Class ByteCodeForm
- java.lang.Object
-
- kala.compress.harmony.unpack200.bytecode.forms.ByteCodeForm
-
- Direct Known Subclasses:
ByteForm,IincForm,LabelForm,LocalForm,NoArgumentForm,ReferenceForm,ShortForm,VariableInstructionForm
public abstract class ByteCodeForm extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description protected static ByteCodeForm[]byteCodeArrayprotected static java.util.Map<java.lang.String,ByteCodeForm>byteCodesByNameprivate intfirstOperandIndexprivate java.lang.Stringnameprivate intopcodeprivate intoperandLengthprivate int[]rewriteprotected static booleanWIDENED
-
Constructor Summary
Constructors Constructor Description ByteCodeForm(int opcode, java.lang.String name)Answer a new instance of this class with the specified opcode and name.ByteCodeForm(int opcode, java.lang.String name, int[] rewrite)Answer a new instance of this class with the specified opcode, name, operandType and rewrite
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidcalculateOperandPosition()intfirstOperandIndex()voidfixUpByteCodeTargets(ByteCode byteCode, CodeAttribute codeAttribute)The ByteCodeForm knows how to fix up a bytecode if it needs to be fixed up because it holds a Label bytecode.static ByteCodeFormget(int opcode)java.lang.StringgetName()intgetOpcode()int[]getRewrite()int[]getRewriteCopy()booleanhasMultipleByteCodes()This method will answer true if the receiver is a multi-bytecode instruction (such as aload0_putfield_super); otherwise, it will answer false.booleanhasNoOperand()booleannestedMustStartClassPool()intoperandLength()abstract voidsetByteCodeOperands(ByteCode byteCode, OperandManager operandManager, int codeLength)When passed a byteCode, an OperandTable and a SegmentConstantPool, this method will set the rewrite of the byteCode appropriately.java.lang.StringtoString()
-
-
-
Field Detail
-
WIDENED
protected static final boolean WIDENED
- See Also:
- Constant Field Values
-
byteCodeArray
protected static final ByteCodeForm[] byteCodeArray
-
byteCodesByName
protected static final java.util.Map<java.lang.String,ByteCodeForm> byteCodesByName
-
opcode
private final int opcode
-
name
private final java.lang.String name
-
rewrite
private final int[] rewrite
-
firstOperandIndex
private int firstOperandIndex
-
operandLength
private int operandLength
-
-
Constructor Detail
-
ByteCodeForm
public ByteCodeForm(int opcode, java.lang.String name)Answer a new instance of this class with the specified opcode and name. Assume no rewrite.- Parameters:
opcode- int corresponding to the opcode's valuename- String printable name of the opcode
-
ByteCodeForm
public ByteCodeForm(int opcode, java.lang.String name, int[] rewrite)Answer a new instance of this class with the specified opcode, name, operandType and rewrite- Parameters:
opcode- int corresponding to the opcode's valuename- String printable name of the opcoderewrite- int[] Array of ints. Operand positions (which will later be rewritten in ByteCodes) are indicated by -1.
-
-
Method Detail
-
get
public static ByteCodeForm get(int opcode)
-
calculateOperandPosition
protected void calculateOperandPosition()
-
firstOperandIndex
public int firstOperandIndex()
-
fixUpByteCodeTargets
public void fixUpByteCodeTargets(ByteCode byteCode, CodeAttribute codeAttribute)
The ByteCodeForm knows how to fix up a bytecode if it needs to be fixed up because it holds a Label bytecode.- Parameters:
byteCode- a ByteCode to be fixed upcodeAttribute- a CodeAttribute used to determine how the ByteCode should be fixed up.
-
getName
public java.lang.String getName()
-
getOpcode
public int getOpcode()
-
getRewrite
public int[] getRewrite()
-
getRewriteCopy
public int[] getRewriteCopy()
-
hasMultipleByteCodes
public boolean hasMultipleByteCodes()
This method will answer true if the receiver is a multi-bytecode instruction (such as aload0_putfield_super); otherwise, it will answer false.- Returns:
- boolean true if multibytecode, false otherwise
-
hasNoOperand
public boolean hasNoOperand()
-
nestedMustStartClassPool
public boolean nestedMustStartClassPool()
-
operandLength
public int operandLength()
-
setByteCodeOperands
public abstract void setByteCodeOperands(ByteCode byteCode, OperandManager operandManager, int codeLength)
When passed a byteCode, an OperandTable and a SegmentConstantPool, this method will set the rewrite of the byteCode appropriately.- Parameters:
byteCode- ByteCode to be updated (!)operandManager- OperandTable from which to draw infocodeLength- Length of bytes (excluding this bytecode) from the beginning of the method. Used in calculating padding for some variable-length bytecodes (such as lookupswitch, tableswitch).
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-