All Packages Class Hierarchy This Package Previous Next Index
Class gnu.bytecode.CodeAttr
java.lang.Object
|
+----gnu.bytecode.Attribute
|
+----gnu.bytecode.CodeAttr
- public class CodeAttr
- extends Attribute
- implements AttrContainer
Represents the contents of a standard "Code" attribute.
Most of the actual methods that generate bytecode operation
are in this class (typically with names starting with emit
),
though there are also some in Method
.
Note that a CodeAttr
is an Attribute
of a Method
, and can in turn contain other
Attribute
s, such as a LineNumbersAttr
.
- Author:
- Per Bothner
-
CodeAttr(Method)
-
-
addHandler(int, int, int, ClassType, ConstantPool)
- Add an exception handler.
-
addHandler(int, int, int, int)
- Add an exception handler.
-
addLocal(Type)
- Add a new local variable (in the current scope).
-
assignConstants(ClassType)
- Add any needed constant pool entries for this Attribute.
-
disAssemble(ClassTypeWriter, int, int)
-
-
emitAdd()
-
-
emitArrayLength()
-
-
emitArrayLoad(Type)
- Load an element from an array.
-
emitArrayStore(Type)
- Store into an element of an array.
-
emitCatchEnd()
-
-
emitCatchStart(Variable)
-
-
emitCheckcast(Type)
-
-
emitConvert(Type)
- Convert the element on top of the stack to requested type
-
emitConvert(Type, Type)
-
-
emitDiv()
-
-
emitDup(int)
- Compile code to duplicate the top 1 or 2 words.
-
emitDup(int, int)
- Compile code to duplicate with offset.
-
emitDup(Type)
-
-
emitElse()
- Compile start of else clause.
-
emitFi()
- Compile end of conditional.
-
emitFinallyEnd()
-
-
emitFinallyStart()
-
-
emitGetField(Field)
- Compile code to get a non-static field value.
-
emitGetStatic(Field)
- Compile code to get a static field value.
-
emitGoto(Label)
- Compile an unconditional branch (goto).
-
emitGoto(Label, int)
- Compile an unconditional branch (goto) or a jsr.
-
emitGotoIf(int)
- Compile start of a conditional: if (!(x OPCODE 0)) ...
-
emitGotoIfEq(Label)
- Compile a conditional transfer if 2 top stack elements are equal.
-
emitGotoIfEq(Label, boolean)
-
-
emitGotoIfNE(Label)
- Compile conditional transfer if 2 top stack elements are not equal.
-
emitIfIntCompare(int)
- Compile start of a conditional: if (!(x OPCODE y)) ...
-
emitIfIntLt()
-
-
emitIfIntNotZero()
- Compile start of conditional: if (x != 0)
-
emitIfNEq()
- Compile start of a conditional: if (x != y) ...
-
emitInstanceof(Type)
-
-
emitInvokeMethod(Method, int)
-
-
emitInvokeSpecial(Method)
-
-
emitInvokeStatic(Method)
- Compile a static method call.
-
emitInvokeVirtual(Method)
- Compile a virtual method call.
-
emitLoad(Variable)
- Comple code to push the contents of a local variable onto the statck.
-
emitMul()
-
-
emitNew(ClassType)
- Invoke new on a class type.
-
emitNewArray(Type)
- Compile code to allocate a new array.
-
emitPop(int)
- Compile code to pop values off the stack (and ignore them).
-
emitPrimop(int, int, Type)
-
-
emitPushDouble(double)
-
-
emitPushInt(int)
-
-
emitPushLong(long)
-
-
emitPushNull()
-
-
emitPushString(String)
-
-
emitPushThis()
-
-
emitPutField(Field)
- Compile code to put a non-static field value.
-
emitPutStatic(Field)
- Compile code to put a static field value.
-
emitRem()
-
-
emitRet(Variable)
- Emit a 'ret' instruction.
-
emitReturn()
- Compile a method return.
-
emitStore(Variable)
-
-
emitSub()
-
-
emitSwap()
-
-
emitThrow()
-
-
emitTryCatchEnd()
-
-
emitTryEnd()
-
-
emitTryStart(boolean)
-
-
enterScope(Scope)
-
-
finalize_labels()
-
-
getArg(int)
- Get the index'th parameter.
-
getAttributes()
-
-
getCode()
- Get the code (instruction bytes) of this method.
-
getCodeLength()
- Set the current lengthof the code (instruction bytes) of this method.
-
getConstants()
-
-
getLength()
- Return the length of the attribute in bytes.
-
getMaxLocals()
- Get the maximum number of local variable words in this method.
-
getMaxStack()
- Get the maximum number of words on the operand stack in this method.
-
getMethod()
-
-
popScope()
-
-
popType()
-
-
print(ClassTypeWriter)
-
-
pushScope()
-
-
pushType(Type)
-
-
put1(int)
- Write an 8-bit byte to the current code-stream.
-
put2(int)
- Write a 16-bit short to the current code-stream
-
put4(int)
- Write a 32-bit int to the current code-stream
-
putIndex2(CpoolEntry)
-
-
putLineNumber(int)
-
-
reachableHere()
- True if control could reach here.
-
reserve(int)
-
-
setAttributes(Attribute)
-
-
setCode(byte[])
- Set the code (instruction bytes) of this method.
-
setCodeLength(int)
- Set the length the the code (instruction bytes) of this method.
-
setMaxLocals(int)
- Set the maximum number of local variable words in this method.
-
setMaxStack(int)
- Set the maximum number of words on the operand stack in this method.
-
topType()
-
-
write(DataOutputStream)
- Write out the contents of the Attribute.
CodeAttr
public CodeAttr(Method meth)
getAttributes
public final Attribute getAttributes()
setAttributes
public final void setAttributes(Attribute attributes)
getMethod
public final Method getMethod()
getConstants
public final ConstantPool getConstants()
reachableHere
public boolean reachableHere()
- True if control could reach here.
getMaxStack
public int getMaxStack()
- Get the maximum number of words on the operand stack in this method.
getMaxLocals
public int getMaxLocals()
- Get the maximum number of local variable words in this method.
setMaxStack
public void setMaxStack(int n)
- Set the maximum number of words on the operand stack in this method.
setMaxLocals
public void setMaxLocals(int n)
- Set the maximum number of local variable words in this method.
getCode
public byte[] getCode()
- Get the code (instruction bytes) of this method.
Does not make a copy.
setCode
public void setCode(byte code[])
- Set the code (instruction bytes) of this method.
- Parameters:
- code - the code bytes (which are not copied).
Implicitly calls setCodeLength(code.length).
setCodeLength
public void setCodeLength(int len)
- Set the length the the code (instruction bytes) of this method.
That is the number of current used bytes in getCode().
(Any remaing bytes provide for future growth.)
getCodeLength
public int getCodeLength()
- Set the current lengthof the code (instruction bytes) of this method.
reserve
public final void reserve(int bytes)
put1
public final void put1(int i)
- Write an 8-bit byte to the current code-stream.
- Parameters:
- i - the byte to write
put2
public final void put2(int i)
- Write a 16-bit short to the current code-stream
- Parameters:
- i - the value to write
put4
public final void put4(int i)
- Write a 32-bit int to the current code-stream
- Parameters:
- i - the value to write
putIndex2
public final void putIndex2(CpoolEntry cnst)
putLineNumber
public final void putLineNumber(int linenumber)
pushType
public final void pushType(Type type)
popType
public final Type popType()
topType
public final Type topType()
emitPop
public void emitPop(int nvalues)
- Compile code to pop values off the stack (and ignore them).
- Parameters:
- nvalues - the number of values (not words) to pop
emitSwap
public void emitSwap()
emitDup
public void emitDup(int size,
int offset)
- Compile code to duplicate with offset.
- Parameters:
- size - the size of the stack item to duplicate (1 or 2)
- offset - where to insert the result (must be 0, 1, or 2)
The new words get inserted at stack[SP-size-offset]
emitDup
public void emitDup(int size)
- Compile code to duplicate the top 1 or 2 words.
- Parameters:
- size - number of words to duplicate
emitDup
public void emitDup(Type type)
enterScope
public void enterScope(Scope scope)
pushScope
public Scope pushScope()
popScope
public Scope popScope()
getArg
public Variable getArg(int index)
- Get the index'th parameter.
addLocal
public Variable addLocal(Type type)
- Add a new local variable (in the current scope).
- Parameters:
- type - type of the new Variable.
- Returns:
- the new Variable.
emitPushInt
public final void emitPushInt(int i)
emitPushLong
public void emitPushLong(long i)
emitPushDouble
public void emitPushDouble(double x)
emitPushString
public final void emitPushString(String str)
emitPushNull
public void emitPushNull()
emitPushThis
public final void emitPushThis()
emitArrayLength
public final void emitArrayLength()
emitArrayStore
public void emitArrayStore(Type element_type)
- Store into an element of an array.
Must already have pushed the array reference, the index,
and the new value (in that order).
Stack: ..., array, index, value => ...
emitArrayLoad
public void emitArrayLoad(Type element_type)
- Load an element from an array.
Must already have pushed the array and the index (in that order):
Stack: ..., array, index => ..., value
emitNew
public void emitNew(ClassType type)
- Invoke new on a class type.
Does not call the constructor!
- Parameters:
- type - the desired new object type
emitNewArray
public void emitNewArray(Type element_type)
- Compile code to allocate a new array.
The size shold have been already pushed on the stack.
- Parameters:
- type - type of the array elements
emitAdd
public final void emitAdd()
emitSub
public final void emitSub()
emitMul
public final void emitMul()
emitDiv
public final void emitDiv()
emitRem
public final void emitRem()
emitPrimop
public void emitPrimop(int opcode,
int arg_count,
Type retType)
emitLoad
public final void emitLoad(Variable var)
- Comple code to push the contents of a local variable onto the statck.
- Parameters:
- var - The variable whose contents we want to push.
emitStore
public void emitStore(Variable var)
emitGetStatic
public final void emitGetStatic(Field field)
- Compile code to get a static field value.
Stack: ... => ..., value
emitGetField
public final void emitGetField(Field field)
- Compile code to get a non-static field value.
Stack: ..., objectref => ..., value
emitPutStatic
public final void emitPutStatic(Field field)
- Compile code to put a static field value.
Stack: ..., value => ...
emitPutField
public final void emitPutField(Field field)
- Compile code to put a non-static field value.
Stack: ..., objectref, value => ...
emitInvokeMethod
public void emitInvokeMethod(Method method,
int opcode)
emitInvokeVirtual
public void emitInvokeVirtual(Method method)
- Compile a virtual method call.
The stack contains the 'this' object, followed by the arguments in order.
- Parameters:
- method - the method to invoke virtually
emitInvokeSpecial
public void emitInvokeSpecial(Method method)
emitInvokeStatic
public void emitInvokeStatic(Method method)
- Compile a static method call.
The stack contains the the arguments in order.
- Parameters:
- method - the static method to invoke
emitGoto
public final void emitGoto(Label label,
int opcode)
- Compile an unconditional branch (goto) or a jsr.
- Parameters:
- label - target of the branch (must be in this method).
emitGoto
public final void emitGoto(Label label)
- Compile an unconditional branch (goto).
- Parameters:
- label - target of the branch (must be in this method).
emitGotoIfEq
public final void emitGotoIfEq(Label label,
boolean invert)
emitGotoIfEq
public final void emitGotoIfEq(Label label)
- Compile a conditional transfer if 2 top stack elements are equal.
emitGotoIfNE
public final void emitGotoIfNE(Label label)
- Compile conditional transfer if 2 top stack elements are not equal.
emitGotoIf
public final void emitGotoIf(int opcode)
- Compile start of a conditional: if (!(x OPCODE 0)) ...
The value of x must already have been pushed.
emitIfIntNotZero
public final void emitIfIntNotZero()
- Compile start of conditional: if (x != 0)
emitIfIntCompare
public final void emitIfIntCompare(int opcode)
- Compile start of a conditional: if (!(x OPCODE y)) ...
The value of x and y must already have been pushed.
emitIfIntLt
public final void emitIfIntLt()
emitIfNEq
public final void emitIfNEq()
- Compile start of a conditional: if (x != y) ...
The values of x and y must already have been pushed.
emitRet
public void emitRet(Variable var)
- Emit a 'ret' instruction.
- Parameters:
- var - the variable containing the return address
emitElse
public final void emitElse()
- Compile start of else clause.
emitFi
public final void emitFi()
- Compile end of conditional.
emitConvert
public final void emitConvert(Type type)
- Convert the element on top of the stack to requested type
emitConvert
public final void emitConvert(Type from,
Type to)
emitCheckcast
public void emitCheckcast(Type type)
emitInstanceof
public void emitInstanceof(Type type)
emitThrow
public final void emitThrow()
emitReturn
public final void emitReturn()
- Compile a method return.
addHandler
public void addHandler(int start_pc,
int end_pc,
int handler_pc,
int catch_type)
- Add an exception handler.
addHandler
public void addHandler(int start_pc,
int end_pc,
int handler_pc,
ClassType catch_type,
ConstantPool constants)
- Add an exception handler.
emitTryStart
public void emitTryStart(boolean has_finally)
emitTryEnd
public void emitTryEnd()
emitCatchStart
public void emitCatchStart(Variable var)
emitCatchEnd
public void emitCatchEnd()
emitFinallyStart
public void emitFinallyStart()
emitFinallyEnd
public void emitFinallyEnd()
emitTryCatchEnd
public void emitTryCatchEnd()
finalize_labels
public void finalize_labels()
assignConstants
public void assignConstants(ClassType cl)
- Add any needed constant pool entries for this Attribute.
- Overrides:
- assignConstants in class Attribute
getLength
public final int getLength()
- Return the length of the attribute in bytes.
- Overrides:
- getLength in class Attribute
write
public void write(DataOutputStream dstr) throws IOException
- Write out the contents of the Attribute.
- Overrides:
- write in class Attribute
print
public void print(ClassTypeWriter dst)
- Overrides:
- print in class Attribute
disAssemble
public void disAssemble(ClassTypeWriter dst,
int offset,
int length)
All Packages Class Hierarchy This Package Previous Next Index