org.objectweb.asm.tree.analysis
Interface Interpreter

All Known Implementing Classes:
BasicInterpreter, DataflowInterpreter

public 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 Analyzer to work with various semantic interpreters, without needing to duplicate the code to simulate the transfer of values.

Author:
Eric Bruneton

Method Summary
 Value binaryOperation(AbstractInsnNode insn, Value value1, Value value2)
          Interprets a bytecode instruction with two arguments.
 Value copyOperation(AbstractInsnNode insn, Value value)
          Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
 Value naryOperation(AbstractInsnNode insn, List values)
          Interprets a bytecode instruction with a variable number of arguments.
 Value newOperation(AbstractInsnNode insn)
          Interprets a bytecode instruction without arguments.
 Value newValue(Type type)
          Creates a new value that represents the given type.
 Value ternaryOperation(AbstractInsnNode insn, Value value1, Value value2, Value value3)
          Interprets a bytecode instruction with three arguments.
 Value unaryOperation(AbstractInsnNode insn, Value value)
          Interprets a bytecode instruction with a single argument.
 

Method Detail

newValue

public Value newValue(Type type)
Creates a new value that represents the given type.

Parameters:
type - a primitive or reference type, or null to represent an uninitialized value.
Returns:
a value that represents the given type. The size of the returned value must be equal to the size of the given type.

newOperation

public Value newOperation(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

Parameters:
insn - the bytecode instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.

copyOperation

public Value copyOperation(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

Parameters:
insn - the bytecode instruction to be interpreted.
value - the value that must be moved by the instruction.
Returns:
the result of the interpretation of the given instruction. The returned value must be equal to the given value.

unaryOperation

public Value unaryOperation(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

Parameters:
insn - the bytecode instruction to be interpreted.
value - the argument of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.

binaryOperation

public Value binaryOperation(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

Parameters:
insn - the bytecode instruction to be interpreted.
value1 - the first argument of the instruction to be interpreted.
value2 - the second argument of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.

ternaryOperation

public Value ternaryOperation(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

Parameters:
insn - the bytecode instruction to be interpreted.
value1 - the first argument of the instruction to be interpreted.
value2 - the second argument of the instruction to be interpreted.
value3 - the third argument of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.

naryOperation

public Value naryOperation(AbstractInsnNode insn,
                           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

Parameters:
insn - the bytecode instruction to be interpreted.
values - the arguments of the instruction to be interpreted.
Returns:
the result of the interpretation of the given instruction.