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 |
Modifier | Constructor and Description |
---|---|
protected |
Interpreter(int api) |
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 v,
V w)
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.
|
public abstract V newValue(Type type)
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
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
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
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
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
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
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
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 v, V w)
v
- a value.w
- another value.