V
- type of the Value used for the analysis.public abstract class Interpreter<V extends Value> extends Object
Analyzer
to work
with various semantic interpreters, without needing to duplicate the code to simulate the
transfer of values.Modifier and Type | Field and Description |
---|---|
protected int |
api
The ASM API version supported by this interpreter.
|
Modifier | Constructor and Description |
---|---|
protected |
Interpreter(int api)
Constructs a new
Interpreter . |
Modifier and Type | Method and 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,
List<? extends V> values)
Interprets a bytecode instruction with a variable number of arguments.
|
abstract V |
newOperation(AbstractInsnNode insn)
Interprets a bytecode instruction without arguments.
|
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 occured during the interpretation.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 occured 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 occured 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 occured 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 occured during the interpretation.public abstract V naryOperation(AbstractInsnNode insn, 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 occured 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 occured during the interpretation.public abstract V merge(V value1, V value2)
value1
- a value.value2
- another value.Copyright © 2019. All rights reserved.