Interpreterpublic interface Interpreter A semantic bytecode interpreter. More precisely, this interpreter only
manages the computation of values from other values: it does not manage the
transfer of values to or from the stack, and to or from the local variables.
This separation allows a generic bytecode {@link Analyzer} to work with
various semantic interpreters, without needing to duplicate the code to
simulate the transfer of values. |
Methods Summary |
---|
public Value | binaryOperation(oracle.toplink.libraries.asm.tree.AbstractInsnNode insn, Value value1, Value value2)Interprets a bytecode instruction with two arguments. This method is
called for the following opcodes:
IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD,
IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL,
IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM,
ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR,
IAND, LAND, IOR, LOR, IXOR, LXOR,
LCMP, FCMPL, FCMPG, DCMPL, DCMPG,
IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE,
IF_ACMPEQ, IF_ACMPNE,
PUTFIELD
| public Value | copyOperation(oracle.toplink.libraries.asm.tree.AbstractInsnNode insn, Value value)Interprets a bytecode instruction that moves a value on the stack or to or
from local variables. This method is called for the following opcodes:
ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE,
DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2,
SWAP
| public Value | merge(Value v, Value w)Merges two values. The merge operation must return a value that represents
both values (for instance, if the two values are two types, the merged
value must be a common super type of the two types. If the two values are
integer intervals, the merged value must be an interval that contains the
previous ones. Likewise for other types of values).
| public Value | naryOperation(oracle.toplink.libraries.asm.tree.AbstractInsnNode insn, java.util.List values)Interprets a bytecode instruction with a variable number of arguments.
This method is called for the following opcodes:
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE,
MULTIANEWARRAY
| public Value | newOperation(oracle.toplink.libraries.asm.tree.AbstractInsnNode insn)Interprets a bytecode instruction without arguments. This method is called
for the following opcodes:
ACONST_NULL,
ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5,
LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1,
BIPUSH, SIPUSH, LDC,
JSR,
GETSTATIC,
NEW
| public Value | newValue(oracle.toplink.libraries.asm.Type type)Creates a new value that represents the given type.
| public Value | ternaryOperation(oracle.toplink.libraries.asm.tree.AbstractInsnNode insn, Value value1, Value value2, Value value3)Interprets a bytecode instruction with three arguments. This method is
called for the following opcodes:
IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
| public Value | unaryOperation(oracle.toplink.libraries.asm.tree.AbstractInsnNode insn, Value value)Interprets a bytecode instruction with a single argument. This method is
called for the following opcodes:
INEG, LNEG, FNEG, DNEG,
IINC,
I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S,
IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE,
TABLESWITCH,
LOOKUPSWITCH,
IRETURN, LRETURN, FRETURN, DRETURN, ARETURN,
PUTSTATIC,
GETFIELD,
NEWARRAY, ANEWARRAY,
ARRAYLENGTH,
ATHROW,
CHECKCAST, INSTANCEOF,
MONITORENTER, MONITOREXIT,
IFNULL, IFNONNULL
|
|