V
- type of the Value used for the analysis.BasicInterpreter
, SourceInterpreter
public abstract class Interpreter<V extends Value>
extends java.lang.Object
Analyzer
to work
with various semantic interpreters, without needing to duplicate the code to simulate the
transfer of values.Modifier and Type | Field | Description |
---|---|---|
protected int |
api |
The ASM API version supported by this interpreter.
|
Modifier | Constructor | Description |
---|---|---|
protected |
Interpreter(int api) |
Constructs a new
Interpreter . |
Modifier and Type | Method | Description |
---|---|---|
abstract V |
binaryOperation(AbstractInsnNode insn,
V value1,
V value2) |
Interprets a bytecode instruction with two arguments.
|
abstract V |
copyOperation(AbstractInsnNode insn,
V value) |
Interprets a bytecode instruction that moves a value on the stack or to or from local
variables.
|
abstract V |
merge(V value1,
V value2) |
Merges two values.
|
abstract V |
naryOperation(AbstractInsnNode insn,
java.util.List<? extends V> values) |
Interprets a bytecode instruction with a variable number of arguments.
|
V |
newEmptyNonParameterLocalValue(int local) |
Called by the analyzer when initializing a non-parameter local in a frame.
|
V |
newEmptyValueAfterSize2Local(int local) |
Called by the analyzer and the interpreter.
|
V |
newEmptyValueForPreviousSize2Local(int local) |
Called by the interpreter.
|
V |
newExceptionValue(TryCatchBlockNode tryCatchBlockNode,
Frame handlerFrame,
Type exceptionType) |
Called by the analyzer when initializing the exception value on the call stack at the entry
of an exception handler.
|
abstract V |
newOperation(AbstractInsnNode insn) |
Interprets a bytecode instruction without arguments.
|
V |
newParameterValue(boolean isInstanceMethod,
int local,
Type type) |
Called by the analyzer when initializing the value of a parameter in a frame.
|
V |
newReturnTypeValue(Type type) |
Called by the analyzer for initializing the return type value of a frame.
|
abstract V |
newValue(Type type) |
Creates a new value that represents the given type.
|
abstract void |
returnOperation(AbstractInsnNode insn,
V value,
V expected) |
Interprets a bytecode return instruction.
|
abstract V |
ternaryOperation(AbstractInsnNode insn,
V value1,
V value2,
V value3) |
Interprets a bytecode instruction with three arguments.
|
abstract V |
unaryOperation(AbstractInsnNode insn,
V value) |
Interprets a bytecode instruction with a single argument.
|
protected final int api
Opcodes.ASM4
, Opcodes.ASM5
, Opcodes.ASM6
or Opcodes.ASM7_EXPERIMENTAL
.protected Interpreter(int api)
Interpreter
.api
- the ASM API version supported by this interpreter. Must be one of Opcodes.ASM4
, Opcodes.ASM5
, Opcodes.ASM6
or Opcodes.ASM7_EXPERIMENTAL
.public abstract V newValue(Type type)
Called for method parameters (including this
), exception handler variable and
with null
type for variables reserved by long and double types.
type
- a primitive or reference type, or null to represent an uninitialized
value.public abstract V newOperation(AbstractInsnNode insn) throws AnalyzerException
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
insn
- the bytecode instruction to be interpreted.AnalyzerException
- if an error occurred during the interpretation.public V newReturnTypeValue(Type type)
public V newParameterValue(boolean isInstanceMethod, int local, Type type)
public V newEmptyNonParameterLocalValue(int local)
public V newEmptyValueAfterSize2Local(int local)
public V newEmptyValueForPreviousSize2Local(int local)
public V newExceptionValue(TryCatchBlockNode tryCatchBlockNode, Frame handlerFrame, Type exceptionType)
public abstract V copyOperation(AbstractInsnNode insn, V value) throws AnalyzerException
ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP
insn
- the bytecode instruction to be interpreted.value
- the value that must be moved by the instruction.AnalyzerException
- if an error occurred during the interpretation.public abstract V unaryOperation(AbstractInsnNode insn, V value) throws AnalyzerException
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
insn
- the bytecode instruction to be interpreted.value
- the argument of the instruction to be interpreted.AnalyzerException
- if an error occurred during the interpretation.public abstract V binaryOperation(AbstractInsnNode insn, V value1, V value2) throws AnalyzerException
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
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.AnalyzerException
- if an error occurred during the interpretation.public abstract V ternaryOperation(AbstractInsnNode insn, V value1, V value2, V value3) throws AnalyzerException
IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
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.AnalyzerException
- if an error occurred during the interpretation.public abstract V naryOperation(AbstractInsnNode insn, java.util.List<? extends V> values) throws AnalyzerException
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY and INVOKEDYNAMIC
insn
- the bytecode instruction to be interpreted.values
- the arguments of the instruction to be interpreted.AnalyzerException
- if an error occurred during the interpretation.public abstract void returnOperation(AbstractInsnNode insn, V value, V expected) throws AnalyzerException
IRETURN, LRETURN, FRETURN, DRETURN, ARETURN
insn
- the bytecode instruction to be interpreted.value
- the argument of the instruction to be interpreted.expected
- the expected return type of the analyzed method.AnalyzerException
- if an error occurred during the interpretation.public abstract V merge(V value1, V value2)
value1
- a value.value2
- another value.