Package org.apache.bcel.generic
Class Instruction
- java.lang.Object
-
- org.apache.bcel.generic.Instruction
-
- All Implemented Interfaces:
java.lang.Cloneable
- Direct Known Subclasses:
ACONST_NULL,ArithmeticInstruction,ArrayInstruction,ARRAYLENGTH,ATHROW,BIPUSH,BranchInstruction,BREAKPOINT,ConversionInstruction,CPInstruction,DCMPG,DCMPL,DCONST,FCMPG,FCMPL,FCONST,ICONST,IMPDEP1,IMPDEP2,LCMP,LCONST,LocalVariableInstruction,MONITORENTER,MONITOREXIT,NEWARRAY,NOP,RET,ReturnInstruction,SIPUSH,StackInstruction
public abstract class Instruction extends java.lang.Object implements java.lang.CloneableAbstract super class for all Java byte codes.
-
-
Field Summary
Fields Modifier and Type Field Description private static InstructionComparatorcmp(package private) static Instruction[]EMPTY_ARRAYprotected shortlengthDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected shortopcodeDeprecated.(since 6.0) will be made private; do not access directly, use getter/setter
-
Constructor Summary
Constructors Constructor Description Instruction()Empty constructor needed for Instruction.readInstruction.Instruction(short opcode, short length)Constructs an Instruction.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description abstract voidaccept(Visitor v)Call corresponding visitor method(s).intconsumeStack(ConstantPoolGen cpg)This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.Instructioncopy()Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are).(package private) voiddispose()Some instructions may be reused, so don't do anything by default.voiddump(java.io.DataOutputStream out)Dumps instruction as byte code to stream out.booleanequals(java.lang.Object that)Tests for equality, delegated to comparatorstatic InstructionComparatorgetComparator()Deprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodsintgetLength()Gets the length (in bytes) of instruction.java.lang.StringgetName()Gets the name of instruction, that is, opcode name.shortgetOpcode()Gets this instruction's opcode.inthashCode()Gets the hashCode of this object.protected voidinitFromFile(ByteSequence bytes, boolean wide)Reads needed data (for example index) from file.static booleanisValidByte(int value)Tests if the value can fit in a byte (signed)static booleanisValidShort(int value)Tests if the value can fit in a short (signed)intproduceStack(ConstantPoolGen cpg)This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.static InstructionreadInstruction(ByteSequence bytes)Reads an instruction from (byte code) input stream and return the appropriate object.static voidsetComparator(InstructionComparator c)Deprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methods(package private) voidsetLength(int length)Needed in readInstruction and subclasses in this package(package private) voidsetOpcode(short opcode)Needed in readInstruction and subclasses in this packagejava.lang.StringtoString()java.lang.StringtoString(boolean verbose)Long output format: <name of opcode> "["<opcode number>"]" "("<length of instruction>")"java.lang.StringtoString(ConstantPool cp)Gets the mnemonic for instruction with symbolic references resolved.
-
-
-
Field Detail
-
EMPTY_ARRAY
static final Instruction[] EMPTY_ARRAY
-
cmp
private static InstructionComparator cmp
-
length
@Deprecated protected short length
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter
-
opcode
@Deprecated protected short opcode
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter
-
-
Method Detail
-
getComparator
@Deprecated public static InstructionComparator getComparator()
Deprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodsGets Comparator object used in the equals() method to determine equality of instructions.- Returns:
- currently used comparator for equals().
-
isValidByte
public static boolean isValidByte(int value)
Tests if the value can fit in a byte (signed)- Parameters:
value- the value to check.- Returns:
- true if the value is in range.
- Since:
- 6.0
-
isValidShort
public static boolean isValidShort(int value)
Tests if the value can fit in a short (signed)- Parameters:
value- the value to check.- Returns:
- true if the value is in range.
- Since:
- 6.0
-
readInstruction
public static Instruction readInstruction(ByteSequence bytes) throws java.io.IOException
Reads an instruction from (byte code) input stream and return the appropriate object.If the Instruction is defined in
InstructionConst, then the singleton instance is returned.- Parameters:
bytes- input stream bytes.- Returns:
- instruction object being read.
- Throws:
java.io.IOException- Thrown when an I/O exception of some sort has occurred.- See Also:
InstructionConst.getInstruction(int)
-
setComparator
@Deprecated public static void setComparator(InstructionComparator c)
Deprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodsSets comparator to be used for equals().- Parameters:
c- the comparator.
-
accept
public abstract void accept(Visitor v)
Call corresponding visitor method(s). The order is: Call visitor methods of implemented interfaces first, then call methods according to the class hierarchy in descending order, that is, the most specific visitXXX() call comes last.- Parameters:
v- Visitor object.
-
consumeStack
public int consumeStack(ConstantPoolGen cpg)
This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.- Parameters:
cpg- the constant pool generator.- Returns:
- Number of words consumed from stack by this instruction, or Constants.UNPREDICTABLE, if this cannot be computed statically
-
copy
public Instruction copy()
Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are). This also applies for 'Select' instructions with their multiple branch targets.- Returns:
- (shallow) copy of an instruction.
- See Also:
BranchInstruction
-
dispose
void dispose()
Some instructions may be reused, so don't do anything by default.
-
dump
public void dump(java.io.DataOutputStream out) throws java.io.IOExceptionDumps instruction as byte code to stream out.- Parameters:
out- Output stream.- Throws:
java.io.IOException- Thrown when an I/O exception of some sort has occurred.
-
equals
public boolean equals(java.lang.Object that)
Tests for equality, delegated to comparator- Overrides:
equalsin classjava.lang.Object- Returns:
- true if that is an Instruction and has the same opcode.
-
getLength
public int getLength()
Gets the length (in bytes) of instruction.- Returns:
- length (in bytes) of instruction.
-
getName
public java.lang.String getName()
Gets the name of instruction, that is, opcode name.- Returns:
- name of instruction, that is, opcode name.
-
getOpcode
public short getOpcode()
Gets this instruction's opcode.- Returns:
- this instruction's opcode.
-
hashCode
public int hashCode()
Gets the hashCode of this object.- Overrides:
hashCodein classjava.lang.Object- Returns:
- the hashCode.
- Since:
- 6.0
-
initFromFile
protected void initFromFile(ByteSequence bytes, boolean wide) throws java.io.IOException
Reads needed data (for example index) from file.- Parameters:
bytes- byte sequence to read from.wide- "wide" instruction flag.- Throws:
java.io.IOException- may be thrown if the implementation needs to read data from the file
-
produceStack
public int produceStack(ConstantPoolGen cpg)
This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.- Parameters:
cpg- the constant pool generator.- Returns:
- Number of words produced onto stack by this instruction, or Constants.UNPREDICTABLE, if this cannot be computed statically
-
setLength
final void setLength(int length)
Needed in readInstruction and subclasses in this package- Since:
- 6.0
-
setOpcode
final void setOpcode(short opcode)
Needed in readInstruction and subclasses in this package
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object- Returns:
- mnemonic for instruction in verbose format.
-
toString
public java.lang.String toString(boolean verbose)
Long output format: <name of opcode> "["<opcode number>"]" "("<length of instruction>")"- Parameters:
verbose- long/short format switch.- Returns:
- mnemonic for instruction.
-
toString
public java.lang.String toString(ConstantPool cp)
Gets the mnemonic for instruction with symbolic references resolved.- Parameters:
cp- the constant pool.- Returns:
- mnemonic for instruction with symbolic references resolved.
-
-