public class ByteCode extends ClassFileEntry
NONE
Modifier | Constructor and Description |
---|---|
protected |
ByteCode(int opcode) |
protected |
ByteCode(int opcode,
ClassFileEntry[] nested) |
Modifier and Type | Method and Description |
---|---|
void |
applyByteCodeTargetFixup(CodeAttribute codeAttribute)
Some ByteCodes (in particular, those with labels need to be fixed up after all the bytecodes in the CodeAttribute
have been added.
|
protected void |
doWrite(DataOutputStream dos) |
boolean |
equals(Object obj) |
void |
extractOperands(OperandManager operandManager,
Segment segment,
int codeLength) |
static ByteCode |
getByteCode(int opcode) |
protected ByteCodeForm |
getByteCodeForm() |
int |
getByteCodeIndex() |
int[] |
getByteCodeTargets() |
int |
getLength() |
String |
getName() |
ClassFileEntry[] |
getNestedClassFileEntries() |
int[] |
getNestedPosition(int index) |
int[][] |
getNestedPositions() |
int |
getOpcode() |
int[] |
getRewrite()
Some bytecodes (the ones with variable lengths) can't have a static rewrite array - they need the ability to
update the array.
|
int |
hashCode() |
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.
|
boolean |
nestedMustStartClassPool() |
protected void |
resolve(ClassConstantPool pool)
Allows the constant pool entries to resolve their nested entries.
|
void |
setByteCodeIndex(int byteCodeOffset)
ByteCodes may need to know their position in the code array (in particular, label byte codes need to know where
they are in order to calculate their targets).
|
void |
setByteCodeTargets(int[] byteCodeTargets)
Some ByteCodes (in particular, those with labels) have to keep track of byteCodeTargets.
|
void |
setNested(ClassFileEntry[] nested) |
void |
setNestedPositions(int[][] nestedPositions)
nestedPositions is an array of arrays of ints.
|
void |
setOperand2Bytes(int operand,
int position)
Given an int operand, set the rewrite bytes for that position and the one immediately following it to a
high-byte, low-byte encoding of the operand.
|
void |
setOperandByte(int operand,
int position)
Given an int operand, treat it as a byte and set the rewrite byte for that position to that value.
|
void |
setOperandBytes(int[] operands)
Given an array of ints which correspond to bytes in the operand of the bytecode, set the rewrite bytes of the
operand to be the appropriate values.
|
void |
setOperandSigned2Bytes(int operand,
int position)
This is just like setOperandInt, but takes special care when the operand is less than 0 to make sure it's written
correctly.
|
void |
setRewrite(int[] rewrite)
Some bytecodes (the ones with variable lengths) can't have a static rewrite array - they need the ability to
update the array.
|
String |
toString() |
objectHashCode, write
protected ByteCode(int opcode)
protected ByteCode(int opcode, ClassFileEntry[] nested)
public static ByteCode getByteCode(int opcode)
protected void doWrite(DataOutputStream dos) throws IOException
doWrite
in class ClassFileEntry
IOException
public boolean equals(Object obj)
equals
in class ClassFileEntry
public void extractOperands(OperandManager operandManager, Segment segment, int codeLength)
protected ByteCodeForm getByteCodeForm()
public int getLength()
public ClassFileEntry[] getNestedClassFileEntries()
getNestedClassFileEntries
in class ClassFileEntry
public int getOpcode()
public int hashCode()
hashCode
in class ClassFileEntry
protected void resolve(ClassConstantPool pool)
ClassFileEntry
resolve
in class ClassFileEntry
pool
- TODOpublic void setOperandBytes(int[] operands)
operands
- int[] rewrite operand bytespublic void setOperand2Bytes(int operand, int position)
operand
- int to set the rewrite bytes toposition
- int position in the operands of the rewrite bytes. For a rewrite array of {100, -1, -1, -1}
position 0 is the first -1, position 1 is the second -1, etc.public void setOperandSigned2Bytes(int operand, int position)
operand
- int to set the rewrite bytes toposition
- int position of the operands in the rewrite bytespublic void setOperandByte(int operand, int position)
operand
- int to set the rewrite byte to (unsigned)position
- int position in the operands of the rewrite bytes. For a rewrite array of {100, -1, -1, -1}
position 0 is the first -1, position 1 is the second -1, etc.public String toString()
toString
in class ClassFileEntry
public void setNested(ClassFileEntry[] nested)
public void setNestedPositions(int[][] nestedPositions)
nestedPositions
- Each subarray specifies a position of a nested element (from the nested[] array) and the
length of that element.public int[][] getNestedPositions()
public int[] getNestedPosition(int index)
public boolean hasMultipleByteCodes()
public void setByteCodeIndex(int byteCodeOffset)
byteCodeOffset
- int position in code array.public int getByteCodeIndex()
public void setByteCodeTargets(int[] byteCodeTargets)
byteCodeTargets
- int index in arraypublic int[] getByteCodeTargets()
public void applyByteCodeTargetFixup(CodeAttribute codeAttribute)
codeAttribute
- the code attributepublic void setRewrite(int[] rewrite)
rewrite
- Some bytecodes.public int[] getRewrite()
public boolean nestedMustStartClassPool()
Copyright © 2002–2022 The Apache Software Foundation. All rights reserved.