Class ByteCodeUtility
java.lang.Object
org.glassfish.pfl.dynamic.codegen.impl.ByteCodeUtility
Class that is responsible for low-level bytecode generation using ASM.
It provides methods that directly generate bytecode in a MethodVisitor.
This will often be accompanied by type analysis, such as in determining
the correct sort of return instruction to use, or how to generate code
for a constant.
-
Constructor Summary
ConstructorsConstructorDescriptionByteCodeUtility(org.objectweb.asm.ClassWriter cw, ClassGeneratorImpl cg) ByteCodeUtility(org.objectweb.asm.ClassWriter cw, ClassGeneratorImpl cg, boolean debug, PrintStream ps) Construct an instance of ByteCodeUtility from an ASM ClassWriter and a codegen ClassGeneratorImpl. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddField(FieldGenerator arg) voidcallEmitter(EmitterFactory.Emitter emitter) voidvoidvoidemitBranch(MyLabel target) voidvoidemitConditionalBranch(MyLabel falseBranch) voidemitConstantExpression(Type type, Object value) voidemitConversion(Type from, Type to) voidemitDup()voidemitExceptionTableEntry(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, Type exceptionType) voidemitInstanceof(Type type) voidemitInvoke(Type type, String name, Signature sig) Emit the appropriate non-static INVOKE instruction as follows: If type is an interface, emit INVOKEINTERFACE.voidemitJsr(org.objectweb.asm.Label label) voidvoidemitMethodEnd(MethodGenerator mg, org.objectweb.asm.Label returnLabel, Variable returnVariable, boolean dump) voidvoidemitNewArrayCall(Type type) voidemitNewCall(Type type) Emit the NEW, DUP sequence required at the start of a new call.voidemitNewInvoke(Type type, Signature sig) Emit the INVOKESPECIAL instruction for calling a constructor with the given signature.voidemitPop()voidvoidemitSpecialInvoke(Type type, String name, Signature sig) Emit the INVOKESPECIAL instruction for calling a method with the given signature.voidemitStaticInvoke(Type type, String name, Signature sig) Emit a static INVOKE instruction.voidvoidint
-
Constructor Details
-
ByteCodeUtility
public ByteCodeUtility(org.objectweb.asm.ClassWriter cw, ClassGeneratorImpl cg, boolean debug, PrintStream ps) Construct an instance of ByteCodeUtility from an ASM ClassWriter and a codegen ClassGeneratorImpl. If debug is true, debugText() can be called to get a text representation of the generated code for debugging purposes. -
ByteCodeUtility
-
-
Method Details
-
addField
-
emitMethodStart
-
emitMethodEnd
public void emitMethodEnd(MethodGenerator mg, org.objectweb.asm.Label returnLabel, Variable returnVariable, boolean dump) -
emitRet
-
emitConstantExpression
-
emitThisExpression
public void emitThisExpression() -
emitConditionalBranch
-
emitBranch
-
emitLabel
-
emitNewCall
Emit the NEW, DUP sequence required at the start of a new call. -
emitInstanceof
-
emitCast
-
emitDup
public void emitDup() -
emitArrayStore
public void emitArrayStore() -
typeCode
-
emitNewArrayCall
-
emitStaticInvoke
Emit a static INVOKE instruction. -
emitInvoke
Emit the appropriate non-static INVOKE instruction as follows:- If type is an interface, emit INVOKEINTERFACE.
- If name/sig has private access in type, emit INVOKESPECIAL. Note that the target must be "this" in this case.
- Otherwise emit INVOKEVIRTUAL.
-
emitNewInvoke
Emit the INVOKESPECIAL instruction for calling a constructor with the given signature. This is used for new Foo() calls, and for super() and this() calls at the start of a constructor. -
emitSpecialInvoke
Emit the INVOKESPECIAL instruction for calling a method with the given signature. This is used for for super.name() and this.name() method calls. -
emitThrow
public void emitThrow() -
emitExceptionTableEntry
public void emitExceptionTableEntry(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, Type exceptionType) -
emitJsr
public void emitJsr(org.objectweb.asm.Label label) -
callEmitter
-
emitPop
public void emitPop() -
emitConversion
-
emitBinaryOperator
-