类org.objectweb.asm.tree.analysis.Value源码实例Demo

下面列出了怎么用org.objectweb.asm.tree.analysis.Value的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: zelixkiller   文件: StackHelper.java
/**
 * Determines if two frames are compatible.
 * 
 * @param oldFrame
 * @param afterRET
 * @param interpreter2
 * @return
 */
public boolean isMergeCompatible(StackFrame oldFrame, StackFrame afterRET) {
	if (oldFrame == null || oldFrame.getStackSize() != afterRET.getStackSize()) {
		return false;
	}
	boolean changes = false;
	for (int i = 0; i < oldFrame.getLocals() + oldFrame.getStackSize(); ++i) {
		Value v = afterRET.getStack(i);
		if (v != null && !v.equals(oldFrame.getStack(i))) {
			changes = true;
		}
	}
	return changes;
}
 
源代码2 项目: tascalate-javaflow   文件: MonitoringFrame.java
@Override
public void execute(AbstractInsnNode insn, Interpreter interpreter) throws AnalyzerException {

    boolean never = false;
    if (never) {
        super.execute(insn, interpreter);
        return;
    }

    int insnOpcode = insn.getOpcode();

    if (insnOpcode == Opcodes.MONITORENTER || insnOpcode == Opcodes.MONITOREXIT) {
        Value pop = pop();
        interpreter.unaryOperation(insn, pop);

        int local = -1;
        for (int i = 0; i < getLocals(); i++) {
            if (getLocal(i) == pop) local = i;
        }

        if (local > -1) {
            if (insnOpcode == Opcodes.MONITORENTER) {
                monitorEnter(local);
            } else {
                monitorExit(local);
            }
        }

    } else {
        super.execute(insn, interpreter);
    }
}
 
源代码3 项目: tascalate-javaflow   文件: MonitoringFrame.java
@Override
public void execute(AbstractInsnNode insn, Interpreter interpreter) throws AnalyzerException {

    boolean never = false;
    if (never) {
        super.execute(insn, interpreter);
        return;
    }

    int insnOpcode = insn.getOpcode();

    if (insnOpcode == Opcodes.MONITORENTER || insnOpcode == Opcodes.MONITOREXIT) {
        Value pop = pop();
        interpreter.unaryOperation(insn, pop);

        int local = -1;
        for (int i = 0; i < getLocals(); i++) {
            if (getLocal(i) == pop) local = i;
        }

        if (local > -1) {
            if (insnOpcode == Opcodes.MONITORENTER) {
                monitorEnter(local);
            } else {
                monitorExit(local);
            }
        }

    } else {
        super.execute(insn, interpreter);
    }
}
 
源代码4 项目: tascalate-javaflow   文件: FastClassVerifier.java
@Override
public Value merge(Value v, Value w) {
    if (!v.equals(w)) {
        Type t = ((BasicValue)v).getType();
        Type u = ((BasicValue)w).getType();
        int tsort = t == null ? -1 : t.getSort();
        if (tsort == Type.OBJECT || tsort == Type.ARRAY) {
            int usort = u == null ? -1 : u.getSort();
            if (usort == Type.OBJECT || usort == Type.ARRAY) {
                if ("Lnull;".equals(t.getDescriptor())) {
                    return w;
                }
                if ("Lnull;".equals(u.getDescriptor())) {
                    return v;
                }
                if (isAssignableFrom(t, u)) {
                    return v;
                }
                if (isAssignableFrom(u, t)) {
                    return w;
                }
                return new BasicValue(classHierarchy.getCommonSuperType(t, u));
            }
        }
        return BasicValue.UNINITIALIZED_VALUE;
    }
    return v;
}
 
源代码5 项目: tascalate-javaflow   文件: MonitoringFrame.java
@Override
public void execute(AbstractInsnNode insn, Interpreter interpreter) throws AnalyzerException {

    boolean never = false;
    if (never) {
        super.execute(insn, interpreter);
        return;
    }

    int insnOpcode = insn.getOpcode();

    if (insnOpcode == Opcodes.MONITORENTER || insnOpcode == Opcodes.MONITOREXIT) {
        Value pop = pop();
        interpreter.unaryOperation(insn, pop);

        int local = -1;
        for (int i = 0; i < getLocals(); i++) {
            if (getLocal(i) == pop) local = i;
        }

        if (local > -1) {
            if (insnOpcode == Opcodes.MONITORENTER) {
                monitorEnter(local);
            } else {
                monitorExit(local);
            }
        }

    } else {
        super.execute(insn, interpreter);
    }
}
 
 类所在包
 同包方法