Package gnu.bytecode
Class CodeAttr
java.lang.Object
gnu.bytecode.Attribute
gnu.bytecode.CodeAttr
- All Implemented Interfaces:
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
Attributes, such as a LineNumbersAttr.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intstatic booleanIf true we get a line number entry for each instruction.Type[] -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddHandler(int start_pc, int end_pc, int handler_pc, int catch_type) Add an exception handler.voidaddHandler(Label start_try, Label end_try, ClassType catch_type) Add an exception handler.Add a new local variable (in the current scope).Add a new local variable (in the current scope).voidCall addLocal for parameters (as implied by method type).voidAdd any needed constant pool entries for this Attribute.intbeginFragment(Label after) intbeginFragment(Label start, Label after) static final StringcalculateSplit(String str) Calculate how many CONSTANT_String constants we need for a string.static booleancastNeeded(Type top, Type required) voiddisAssemble(ClassTypeWriter dst, int start, int limit) final voidemitAdd()Deprecated.final voidemitAdd(char sig) final voidfinal voidemitAnd()voidConvenience for compilingif P1 && P2 then S1 else S2.final voidvoidLoad an element from an array.voidemitArrayLoad(Type element_type) Load an element from an array.voidStore into an element of an array.voidemitArrayStore(Type element_type) Store into an element of an array.voidvoidvoidemitCatchStart(ClassType type) voidemitCatchStart(Variable var) voidemitCheckcast(Type type) final voidemitConvert(PrimType from, PrimType to) final voidemitDiv()voidemitDup()Emit code to duplicate the top element of the stack.voidemitDup(int size) Compile code to duplicate the top 1 or 2 words.voidemitDup(int size, int offset) Compile code to duplicate with offset.voidvoidemitDupX()Emit code to duplicate the top element of the stack and place the copy before the previous element.final voidemitElse()Compile start of else clause.final voidemitFi()Compile end of conditional.voidvoidfinal voidemitGetField(Field field) Compile code to get a non-static field value.final voidemitGetStatic(Field field) Compile code to get a static field value.final voidCompile an unconditional branch (goto).final voidemitGotoIfCompare1(Label label, int opcode) final voidemitGotoIfCompare2(Label label, int logop) final voidemitGotoIfEq(Label label) Compile a conditional transfer if 2 top stack elements are equal.final voidemitGotoIfEq(Label label, boolean invert) Deprecated.final voidemitGotoIfGe(Label label) final voidemitGotoIfGt(Label label) final voidemitGotoIfIntEqZero(Label label) final voidemitGotoIfIntGeZero(Label label) final voidemitGotoIfIntGtZero(Label label) final voidemitGotoIfIntLeZero(Label label) final voidemitGotoIfIntLtZero(Label label) final voidemitGotoIfIntNeZero(Label label) final voidemitGotoIfLe(Label label) final voidemitGotoIfLt(Label label) final voidemitGotoIfNE(Label label) Compile conditional transfer if 2 top stack elements are not equal.final voidemitGotoIfNonNull(Label label) final voidemitGotoIfNull(Label label) final voidemitIfCompare1(int opcode) Compile start of a conditional: if (!(x opcode 0)) ....final voidemitIfEq()Compile start of a conditional:if (x == y) ...The values of x and y must already have been pushed.final voidemitIfGe()Compile start of a conditional:if (x >= y) ...The values of x and y must already have been pushed.final voidemitIfGt()Compile start of a conditional:if (x > y) ...The values of x and y must already have been pushed.final voidemitIfIntCompare(int opcode) Compile start of a conditional:if (!(x OPCODE y)) ...The value of x and y must already have been pushed.final voidCompile start of conditional: if (x == 0) ....final voidfinal voidCompile start of conditional:if (x >= 0).final voidCompile start of conditional:if (x <= 0).final voidfinal voidCompile start of conditional: if (x != 0) ....final voidemitIfLe()Compile start of a conditional:if (x <= y) ...The values of x and y must already have been pushed.final voidemitIfLt()Compile start of a conditional:if (x < y) ...The values of x and y must already have been pushed.final voidCompile start of a conditional: if (x != y) ...final voidCompile start of conditional:if (x != null) ....final voidCompile start of conditional:if (x == null) ...Start a new if/then/else block.final voidemitIfRefCompare1(int opcode) Compile start of a conditional:if (!(x opcode null)) ....final voidvoidEmit an instruction to increment a variable by some amount.voidemitInstanceof(Type type) voidemitInvoke(Method method) voidemitInvokeInterface(Method method) voidemitInvokeMethod(Method method, int opcode) voidemitInvokeSpecial(Method method) voidemitInvokeStatic(Method method) Compile a static method call.voidemitInvokeVirtual(Method method) Compile a virtual method call.final voidemitIOr()final voidfinal voidCompile code to push the contents of a local variable onto the statck.final voidfinal voidfinal voidemitMul()voidInvoke new on a class type.voidemitNewArray(Type element_type) voidemitNewArray(Type element_type, int dims) Compile code to allocate a new array.final voidCompile 'not', assuming 0 or 1 is on the JVM stack.voidemitPop(int nvalues) Compile code to pop values off the stack (and ignore them).voidemitPrimop(int opcode, int arg_count, Type retType) final voidemitPushClass(ObjectType ctype) Push a class constant pool entry.final voidemitPushConstant(int val, Type type) final voidemitPushConstant(CpoolEntry cnst) voidemitPushDefaultValue(Type type) Push zero or null as appropriate for the given type.voidemitPushDouble(double x) voidemitPushFloat(float x) final voidemitPushInt(int i) voidemitPushLong(long i) final voidemitPushMethodHandle(Method method) Push a MethodHandle, using an appropriate constant pool entry.voidvoidemitPushNull(ObjectType type) final voidemitPushPrimArray(Object value, int len, int count, ArrayType arrayType) Emit code to push a constant primitive array.final voidemitPushPrimArray(Object value, ArrayType arrayType) final voidemitPushString(String str) Emit code to push the value of a constant String.final voidfinal voidemitPutField(Field field) Compile code to put a non-static field value.final voidemitPutStatic(Field field) Compile code to put a static field value.final voidemitRem()voidEmit a 'ret' instruction.final voidCompile a method return.final voidemitShl()final voidemitShr()voidvoidInitialize a variable to zero or null, as appropriate.final voidemitSub()Deprecated.final voidemitSub(char sig) final voidvoidemitSwap()voidemitTailCall(boolean pop_args, Label start) Compile a tail-call to position 0 of the current procedure.voidemitTailCall(boolean pop_args, Scope scope) Compile a tail-call to position 0 of the current procedure.final voidemitThen()final voidvoidvoidDeprecated.voidemitTryStart(boolean has_finally, Type result_type) final voidemitUshr()voidemitWithCleanupCatch(Variable catchVar) Called after abodythat has acleanupclause.voidCalled after generating acleanuphandler.voidBeginning of code that has a cleanup handler.final voidemitXOr()voidEnd a block entered by a previous startExitableBlock.voidendFragment(int cookie) End a fragment.voidenterScope(Scope scope) final voidfixUnsigned(Type stackType) final voidAdd a fixup at this location.final voidfixupChain(Label here, Label target) This causes a later processFixup to rearrange the code.getArg(int index) Get the index'th parameter.final AttributeGet the (first) Attribute of this container.byte[]getCode()Get the code (instruction bytes) of this method.intSet the current lengthof the code (instruction bytes) of this method.final ConstantPoolfinal TryStategetLabel()Get a new Label for the current location.final intReturn the length of the attribute in bytes.intGet the maximum number of local variable words in this method.intGet the maximum number of words on the operand stack in this method.final Methodfinal intgetPC()final intgetSP()final booleanisInTry()Search by name for a VariablevoidnoteVarType(int offset, Type type) popScope()final TypepopType()voidprint(ClassTypeWriter dst) voidCreate a Scope that is automatically popped.final voidfinal voidput1(int i) Write an 8-bit byte to the current code-stream.final voidput2(int i) Write a 16-bit short to the current code-streamfinal voidput4(int i) Write a 32-bit int to the current code-streamfinal voidputIndex2(CpoolEntry cnst) final voidputLineNumber(int linenumber) final voidputLineNumber(String filename, int linenumber) final booleanTrue if control could reach here.final voidreserve(int bytes) final voidsetAttributes(Attribute attributes) Set the (list of) Attributes of this container.voidsetCode(byte[] code) Set the code (instruction bytes) of this method.voidsetCodeLength(int len) Set the length the the code (instruction bytes) of this method.voidsetMaxLocals(int n) Set the maximum number of local variable words in this method.voidsetMaxStack(int n) Set the maximum number of words on the operand stack in this method.final voidsetReachable(boolean val) final voidSet the current type state from a label.final voidSet the current type state from a label.final voidstartExitableBlock(Type resultType, boolean runFinallyBlocks) Enter a block which can be exited.Start a new switch statment or expression.final TypetopType()voidwrite(DataOutputStream dstr) Write out the contents of the Attribute.Methods inherited from class gnu.bytecode.Attribute
addToFrontOf, assignConstants, count, get, getContainer, getLengthAll, getName, getNameIndex, getNext, isSkipped, setContainer, setName, setNameIndex, setNext, setSkipped, setSkipped, writeAll
-
Field Details
-
locals
-
stackMap
-
GENERATE_STACK_MAP_TABLE
public static final int GENERATE_STACK_MAP_TABLE- See Also:
-
DONT_USE_JSR
public static final int DONT_USE_JSR- See Also:
-
stack_types
-
instructionLineMode
public static boolean instructionLineModeIf true we get a line number entry for each instruction. Normally false, but can be a convenient hack to allow instruction-level stepping/debugging and stacktraces. In this caseLINE==PC.
-
-
Constructor Details
-
CodeAttr
-
-
Method Details
-
getAttributes
Description copied from interface:AttrContainerGet the (first) Attribute of this container.- Specified by:
getAttributesin interfaceAttrContainer
-
setAttributes
Description copied from interface:AttrContainerSet the (list of) Attributes of this container.- Specified by:
setAttributesin interfaceAttrContainer
-
fixupChain
This causes a later processFixup to rearrange the code. The code at target comes here, instead of the following instructions. Fuctionally equivalent to:goto target; here:, but implemented by code re-arranging. Therefore there should be at some later point agoto here; target:. -
fixupAdd
Add a fixup at this location.- Parameters:
kind- one of the FIXUP_xxx codes.label- varies - typically the target of jump.
-
getMethod
-
getPC
public final int getPC() -
getSP
public final int getSP() -
getConstants
- Specified by:
getConstantsin interfaceAttrContainer- Overrides:
getConstantsin classAttribute
-
reachableHere
public final boolean reachableHere()True if control could reach here. -
setReachable
public final void setReachable(boolean val) -
setUnreachable
public final void setUnreachable() -
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
-
putLineNumber
-
putLineNumber
public final void putLineNumber(int linenumber) -
noteVarType
-
setTypes
Set the current type state from a label. -
setTypes
Set the current type state from a label. -
pushType
-
popType
-
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
-
getLabel
Get a new Label for the current location. Unlike Label.define, does not change reachableHere(). -
emitSwap
public void emitSwap() -
emitDup
public void emitDup()Emit code to duplicate the top element of the stack. -
emitDupX
public void emitDupX()Emit code to duplicate the top element of the stack and place the copy before the previous element. -
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
-
enterScope
-
pushScope
-
pushAutoPoppableScope
Create a Scope that is automatically popped. I.e. the next popScope will keep popping autoPop scopes until it gets to a non-autoPop scope. An autoPop Scope is useful for variables that are assigned and set in the middle of a managed Scope. -
getCurrentScope
-
popScope
-
getArg
Get the index'th parameter. -
lookup
Search by name for a Variable- Parameters:
name- name to search for- Returns:
- the Variable, or null if not found (in any scope of this Method).
-
addLocal
Add a new local variable (in the current scope).- Parameters:
type- type of the new Variable.- Returns:
- the new Variable.
-
addLocal
Add a new local variable (in the current scope).- Parameters:
type- type of the new Variable.name- name of the new Variable.- Returns:
- the new Variable.
-
addParamLocals
public void addParamLocals()Call addLocal for parameters (as implied by method type). -
emitPushConstant
-
emitPushConstant
-
emitPushInt
public final void emitPushInt(int i) -
emitPushLong
public void emitPushLong(long i) -
emitPushFloat
public void emitPushFloat(float x) -
emitPushDouble
public void emitPushDouble(double x) -
calculateSplit
Calculate how many CONSTANT_String constants we need for a string. Each CONSTANT_String can be at most 0xFFFF bytes (as a UTF8 string). Returns a String, where each char, coerced to an int, is the length of a substring of the input that is at most 0xFFFF bytes. -
emitPushString
Emit code to push the value of a constant String. Uses CONSTANT_String and CONSTANT_Utf8 constant pool entries as needed. Can handle Strings whose UTF8 length is greates than 0xFFFF bytes (the limit of a CONSTANT_Utf8) by generating String concatenation. -
emitPushClass
Push a class constant pool entry. This is only supported by JDK 1.5 and later. -
emitPushMethodHandle
Push a MethodHandle, using an appropriate constant pool entry. This is only supported by JDK 1.6 and later. -
emitPushNull
public void emitPushNull() -
emitPushNull
-
emitPushDefaultValue
Push zero or null as appropriate for the given type. -
emitStoreDefaultValue
Initialize a variable to zero or null, as appropriate. -
emitPushThis
public final void emitPushThis() -
emitPushPrimArray
-
emitPushPrimArray
Emit code to push a constant primitive array.- Parameters:
value- The array value that we want the emitted code to re-create.arrayType- The ArrayType that matches value.
-
emitArrayLength
public final void emitArrayLength() -
emitArrayStore
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 => ... -
emitArrayStore
public void emitArrayStore()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
Load an element from an array. Must already have pushed the array and the index (in that order): Stack: ..., array, index => ..., value -
emitArrayLoad
public void emitArrayLoad()Load an element from an array. Equivalent toemitArrayLoad(Type), but element_type is implied. Must already have pushed the array and the index (in that order): Stack: ..., array, index => ..., value -
emitNew
Invoke new on a class type. Does not call the constructor!- Parameters:
type- the desired new object type
-
emitNewArray
Compile code to allocate a new array. The size should have been already pushed on the stack.- Parameters:
element_type- type of the array elementsdims- number of dimensions - more than 1 is untested
-
emitNewArray
-
emitBinop
-
emitAdd
public final void emitAdd(char sig) -
emitAdd
-
emitAdd
Deprecated. -
emitSub
public final void emitSub(char sig) -
emitSub
-
emitSub
Deprecated. -
emitMul
public final void emitMul() -
emitDiv
public final void emitDiv() -
emitRem
public final void emitRem() -
emitAnd
public final void emitAnd() -
emitIOr
public final void emitIOr() -
emitXOr
public final void emitXOr() -
emitShl
public final void emitShl() -
emitShr
public final void emitShr() -
emitUshr
public final void emitUshr() -
emitNot
Compile 'not', assuming 0 or 1 is on the JVM stack. -
emitPrimop
-
emitLoad
Compile code to push the contents of a local variable onto the statck.- Parameters:
var- The variable whose contents we want to push.
-
emitStore
-
emitInc
Emit an instruction to increment a variable by some amount. If the increment is zero, do nothing. The variable must contain an integral value - except if increment is zero. -
emitGetStatic
Compile code to get a static field value. Stack:... => ..., value -
emitGetField
Compile code to get a non-static field value. Stack:..., objectref => ..., value -
emitPutStatic
Compile code to put a static field value. Stack:..., value => ... -
emitPutField
Compile code to put a non-static field value. Stack:..., objectref, value => ... -
emitInvokeMethod
-
emitInvoke
-
emitInvokeVirtual
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
-
emitInvokeStatic
Compile a static method call. The stack contains the the arguments in order.- Parameters:
method- the static method to invoke
-
emitInvokeInterface
-
emitGoto
Compile an unconditional branch (goto).- Parameters:
label- target of the branch (must be in this method).
-
emitJsr
-
startExitableBlock
Enter a block which can be exited. Used to make sure finally-blocks are executed when exiting a block, loop, or method. -
endExitableBlock
public void endExitableBlock()End a block entered by a previous startExitableBlock. -
emitGotoIfCompare1
-
emitGotoIfIntEqZero
-
emitGotoIfIntNeZero
-
emitGotoIfIntLtZero
-
emitGotoIfIntGeZero
-
emitGotoIfIntGtZero
-
emitGotoIfIntLeZero
-
emitGotoIfNull
-
emitGotoIfNonNull
-
emitGotoIfCompare2
-
emitGotoIfEq
Deprecated. -
emitGotoIfEq
Compile a conditional transfer if 2 top stack elements are equal. -
emitGotoIfNE
Compile conditional transfer if 2 top stack elements are not equal. -
emitGotoIfLt
-
emitGotoIfGe
-
emitGotoIfGt
-
emitGotoIfLe
-
emitIfCompare1
public final void emitIfCompare1(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) .... Also use this if you have pushed a boolean value: if (b) ... -
emitIfIntEqZero
public final void emitIfIntEqZero()Compile start of conditional: if (x == 0) .... Also use this if you have pushed a boolean value: if (!b) ... -
emitIfIntLEqZero
public final void emitIfIntLEqZero()Compile start of conditional:if (x <= 0). -
emitIfIntGEqZero
public final void emitIfIntGEqZero()Compile start of conditional:if (x >= 0). -
emitIfRefCompare1
public final void emitIfRefCompare1(int opcode) Compile start of a conditional:if (!(x opcode null)) .... The value of x must already have been pushed and must be of reference type. -
emitIfNotNull
public final void emitIfNotNull()Compile start of conditional:if (x != null) .... -
emitIfNull
public final void emitIfNull()Compile start of conditional:if (x == null) ... -
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() -
emitIfIntGEq
public final void emitIfIntGEq() -
emitIfNEq
public final void emitIfNEq()Compile start of a conditional: if (x != y) ... The values of x and y must already have been pushed. -
emitIfEq
public final void emitIfEq()Compile start of a conditional:if (x == y) ...The values of x and y must already have been pushed. -
emitIfLt
public final void emitIfLt()Compile start of a conditional:if (x < y) ...The values of x and y must already have been pushed. -
emitIfGe
public final void emitIfGe()Compile start of a conditional:if (x >= y) ...The values of x and y must already have been pushed. -
emitIfGt
public final void emitIfGt()Compile start of a conditional:if (x > y) ...The values of x and y must already have been pushed. -
emitIfLe
public final void emitIfLe()Compile start of a conditional:if (x <= y) ...The values of x and y must already have been pushed. -
emitRet
Emit a 'ret' instruction.- Parameters:
var- the variable containing the return address
-
emitThen
public final void emitThen() -
emitIfThen
public final void emitIfThen() -
emitElse
public final void emitElse()Compile start of else clause. -
emitFi
public final void emitFi()Compile end of conditional. -
emitAndThen
public void emitAndThen()Convenience for compilingif P1 && P2 then S1 else S2. Compile that as:compile P1, including an appropriate emitIfXxx emitAndThen() compile P2, including an appropriate emitIfXxx compile S1 emitElse compile S2 emitFi
-
emitIfRaw
Start a new if/then/else block. The caller is responsible for evaluating the condition, and in the "false" case got the returned label. In the "true" case just continue inline.- Returns:
- the else/end label to goto if the condition is false. A subsequent emitElse or emitFi defines the label.
-
fixUnsigned
-
emitConvert
-
castNeeded
-
emitCheckcast
-
emitInstanceof
-
emitThrow
public final void emitThrow() -
emitMonitorEnter
public final void emitMonitorEnter() -
emitMonitorExit
public final void emitMonitorExit() -
emitReturn
public final void emitReturn()Compile a method return. If inside a 'catch' clause, first call 'finally' clauses. The return value (unless the return type is void) must be on the stack, and have the correct type. -
addHandler
public void addHandler(int start_pc, int end_pc, int handler_pc, int catch_type) Add an exception handler. Low-level routine;#emitCatchStartis preferred. -
addHandler
Add an exception handler. Low-level routine;emitCatchStart(gnu.bytecode.Variable)is preferred. -
emitWithCleanupStart
public void emitWithCleanupStart()Beginning of code that has a cleanup handler. This is similar to a try-finally, but the cleanup is only done in the case of an exception. Alternatively, the try clause has to manually do the cleanup with code duplication. Equivalent to:try body catch (Throwable ex) { cleanup; throw ex; }CallemitWithCleanupStartbefore thebody. -
emitWithCleanupCatch
Called after abodythat has acleanupclause. Followed by thecleanupcode. -
emitWithCleanupDone
public void emitWithCleanupDone()Called after generating acleanuphandler. -
emitTryStart
-
emitTryEnd
Deprecated. -
emitCatchStart
-
emitCatchStart
-
emitCatchEnd
public void emitCatchEnd() -
emitFinallyStart
public void emitFinallyStart() -
emitFinallyEnd
public void emitFinallyEnd() -
emitTryCatchEnd
public void emitTryCatchEnd() -
getCurrentTry
-
isInTry
public final boolean isInTry() -
startSwitch
Start a new switch statment or expression. The switch value must have been calculated and left on the stack. -
emitTailCall
Compile a tail-call to position 0 of the current procedure.- Parameters:
pop_args- if true, copy argument registers (except this) from stack.start- the Label to jump back to.
-
emitTailCall
Compile a tail-call to position 0 of the current procedure.- Parameters:
pop_args- if true, copy argument registers (except this) from stack.scope- Scope whose start we jump back to.
-
processFixups
public void processFixups() -
assignConstants
Description copied from class:AttributeAdd any needed constant pool entries for this Attribute. Overridden by sub-classes. Do any other cleanup needed before writing out a .class file.- Overrides:
assignConstantsin classAttribute
-
getLength
public final int getLength()Description copied from class:AttributeReturn the length of the attribute in bytes. Does not include the 6-byte header (for the name_index and the length). -
write
Description copied from class:AttributeWrite out the contents of the Attribute. Does not write the 6-byte attribute header.- Specified by:
writein classAttribute- Throws:
IOException
-
print
-
disAssemble
-
beginFragment
-
beginFragment
-
endFragment
public void endFragment(int cookie) End a fragment.- Parameters:
cookie- the return value from the previous beginFragment.
-