Top Description Fields Constructors Methods
org.objectweb.asm.tree.analysis

public Class BasicInterpreter

extends Interpreter<BasicValue>
implements Opcodes
Class Inheritance
All Implemented Interfaces
org.objectweb.asm.Opcodes
Known Direct Subclasses
org.objectweb.asm.tree.analysis.BasicVerifier
Imports
java.util.List, org.objectweb.asm.ConstantDynamic, .Handle, .Opcodes, .Type, org.objectweb.asm.tree.AbstractInsnNode, .FieldInsnNode, .IntInsnNode, .InvokeDynamicInsnNode, .LdcInsnNode, .MethodInsnNode, .MultiANewArrayInsnNode, .TypeInsnNode

An Interpreter for BasicValue values.
Authors
Eric Bruneton, Bing Ran

Field Summary

Modifier and TypeField and Description
public static final Type
NULL_TYPE

Special type used for the null literal.

Inherited from org.objectweb.asm.tree.analysis.Interpreter:
api

Constructor Summary

AccessConstructor and Description
public
BasicInterpreter()

Constructs a new BasicInterpreter for the latest ASM API version.

protected
BasicInterpreter(final int
the ASM API version supported by this interpreter. Must be one of the ASMx values in Opcodes.
api
)

Constructs a new BasicInterpreter.

Method Summary

Modifier and TypeMethod and Description
public BasicValue
binaryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final BasicValue
the first argument of the instruction to be interpreted.
value1
,
final BasicValue
the second argument of the instruction to be interpreted.
value2
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.binaryOperation.

Interprets a bytecode instruction with two arguments.
public BasicValue
copyOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final BasicValue
the value that must be moved by the instruction.
value
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.copyOperation.

Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
public BasicValue
merge(final BasicValue
a value.
value1
,
final BasicValue
another value.
value2
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.merge.

Merges two values.
public BasicValue
naryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final List<? extends BasicValue>
the arguments of the instruction to be interpreted.
values
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.naryOperation.

Interprets a bytecode instruction with a variable number of arguments.
public BasicValue
newOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newOperation.

Interprets a bytecode instruction without arguments.
public BasicValue
newValue(final Type
a primitive or reference type, or null to represent an uninitialized value.
type
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newValue.

Creates a new value that represents the given type.
public void
returnOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final BasicValue
the argument of the instruction to be interpreted.
value
,
final BasicValue
the expected return type of the analyzed method.
expected
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.returnOperation.

Interprets a bytecode return instruction.
public BasicValue
ternaryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final BasicValue
the first argument of the instruction to be interpreted.
value1
,
final BasicValue
the second argument of the instruction to be interpreted.
value2
,
final BasicValue
the third argument of the instruction to be interpreted.
value3
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.ternaryOperation.

Interprets a bytecode instruction with three arguments.
public BasicValue
unaryOperation(final AbstractInsnNode
the bytecode instruction to be interpreted.
insn
,
final BasicValue
the argument of the instruction to be interpreted.
value
)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.unaryOperation.

Interprets a bytecode instruction with a single argument.
Inherited from org.objectweb.asm.tree.analysis.Interpreter:
newEmptyValuenewExceptionValuenewParameterValuenewReturnTypeValue

Field Detail

NULL_TYPEback to summary
public static final Type NULL_TYPE

Special type used for the null literal. This is an object reference type with descriptor 'Lnull;'.

Constructor Detail

BasicInterpreterback to summary
public BasicInterpreter()

Constructs a new BasicInterpreter for the latest ASM API version. Subclasses must not use this constructor. Instead, they must use the BasicInterpreter(int) version.

BasicInterpreterback to summary
protected BasicInterpreter(final int api)

Constructs a new BasicInterpreter.

Parameters
api:int

the ASM API version supported by this interpreter. Must be one of the ASMx values in Opcodes.

Method Detail

binaryOperationback to summary
public BasicValue binaryOperation(final AbstractInsnNode insn, final BasicValue value1, final BasicValue value2) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.binaryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.binaryOperation.

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:AbstractInsnNode

the bytecode instruction to be interpreted.

value1:BasicValue

the first argument of the instruction to be interpreted.

value2:BasicValue

the second argument of the instruction to be interpreted.

Returns:BasicValue

the result of the interpretation of the given instruction.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.
copyOperationback to summary
public BasicValue copyOperation(final AbstractInsnNode insn, final BasicValue value) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.copyOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.copyOperation.

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:AbstractInsnNode

the bytecode instruction to be interpreted.

value:BasicValue

the value that must be moved by the instruction.

Returns:BasicValue

the result of the interpretation of the given instruction. The returned value must be equal to the given value.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.
mergeback to summary
public BasicValue merge(final BasicValue value1, final BasicValue value2)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.merge.

Doc from org.objectweb.asm.tree.analysis.Interpreter.merge.

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).

Parameters
value1:BasicValue

a value.

value2:BasicValue

another value.

Returns:BasicValue

the merged value. If the merged value is equal to value1, this method must return value1.

Annotations
@Override
naryOperationback to summary
public BasicValue naryOperation(final AbstractInsnNode insn, final List<? extends BasicValue> values) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.naryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.naryOperation.

Interprets a bytecode instruction with a variable number of arguments. This method is called for the following opcodes:

INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY and INVOKEDYNAMIC

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

values:List<? extends BasicValue>

the arguments of the instruction to be interpreted.

Returns:BasicValue

the result of the interpretation of the given instruction.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.
newOperationback to summary
public BasicValue newOperation(final AbstractInsnNode insn) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.newOperation.

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:AbstractInsnNode

the bytecode instruction to be interpreted.

Returns:BasicValue

the result of the interpretation of the given instruction.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.
newValueback to summary
public BasicValue newValue(final Type type)

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.newValue.

Doc from org.objectweb.asm.tree.analysis.Interpreter.newValue.

Creates a new value that represents the given type.

Called for method parameters (including this), exception handler variable and with null type for variables reserved by long and double types.

An interpreter may choose to implement one or more of Interpreter#newReturnTypeValue(Type), Interpreter#newParameterValue(boolean, int, Type), Interpreter#newEmptyValue(int), Interpreter#newExceptionValue(TryCatchBlockNode, Frame, Type) to distinguish different types of new value.

Parameters
type:Type

a primitive or reference type, or null to represent an uninitialized value.

Returns:BasicValue

a value that represents the given type. The size of the returned value must be equal to the size of the given type.

Annotations
@Override
returnOperationback to summary
public void returnOperation(final AbstractInsnNode insn, final BasicValue value, final BasicValue expected) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.returnOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.returnOperation.

Interprets a bytecode return instruction. This method is called for the following opcodes:

IRETURN, LRETURN, FRETURN, DRETURN, ARETURN

Parameters
insn:AbstractInsnNode

the bytecode instruction to be interpreted.

value:BasicValue

the argument of the instruction to be interpreted.

expected:BasicValue

the expected return type of the analyzed method.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.
ternaryOperationback to summary
public BasicValue ternaryOperation(final AbstractInsnNode insn, final BasicValue value1, final BasicValue value2, final BasicValue value3) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.ternaryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.ternaryOperation.

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:AbstractInsnNode

the bytecode instruction to be interpreted.

value1:BasicValue

the first argument of the instruction to be interpreted.

value2:BasicValue

the second argument of the instruction to be interpreted.

value3:BasicValue

the third argument of the instruction to be interpreted.

Returns:BasicValue

the result of the interpretation of the given instruction.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.
unaryOperationback to summary
public BasicValue unaryOperation(final AbstractInsnNode insn, final BasicValue value) throws AnalyzerException

Implements abstract org.objectweb.asm.tree.analysis.Interpreter.unaryOperation.

Doc from org.objectweb.asm.tree.analysis.Interpreter.unaryOperation.

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:AbstractInsnNode

the bytecode instruction to be interpreted.

value:BasicValue

the argument of the instruction to be interpreted.

Returns:BasicValue

the result of the interpretation of the given instruction.

Annotations
@Override
Exceptions
AnalyzerException:
if an error occurred during the interpretation.