Class ByteCodeUtility

java.lang.Object
org.glassfish.pfl.dynamic.codegen.impl.ByteCodeUtility

public final class ByteCodeUtility extends Object
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 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

      public ByteCodeUtility(org.objectweb.asm.ClassWriter cw, ClassGeneratorImpl cg)
  • Method Details

    • addField

      public void addField(FieldGenerator arg)
    • emitMethodStart

      public void emitMethodStart(MethodGenerator mg)
    • emitMethodEnd

      public void emitMethodEnd(MethodGenerator mg, org.objectweb.asm.Label returnLabel, Variable returnVariable, boolean dump)
    • emitRet

      public void emitRet(Variable var)
    • emitConstantExpression

      public void emitConstantExpression(Type type, Object value)
    • emitThisExpression

      public void emitThisExpression()
    • emitConditionalBranch

      public void emitConditionalBranch(MyLabel falseBranch)
    • emitBranch

      public void emitBranch(MyLabel target)
    • emitLabel

      public void emitLabel(Attribute<MyLabel> attr, Node node)
    • emitNewCall

      public void emitNewCall(Type type)
      Emit the NEW, DUP sequence required at the start of a new call.
    • emitInstanceof

      public void emitInstanceof(Type type)
    • emitCast

      public void emitCast(Type from, Type to)
    • emitDup

      public void emitDup()
    • emitArrayStore

      public void emitArrayStore()
    • typeCode

      public int typeCode(Type type)
    • emitNewArrayCall

      public void emitNewArrayCall(Type type)
    • emitStaticInvoke

      public void emitStaticInvoke(Type type, String name, Signature sig)
      Emit a static INVOKE instruction.
    • emitInvoke

      public void emitInvoke(Type type, String name, Signature sig)
      Emit the appropriate non-static INVOKE instruction as follows:
      1. If type is an interface, emit INVOKEINTERFACE.
      2. If name/sig has private access in type, emit INVOKESPECIAL. Note that the target must be "this" in this case.
      3. Otherwise emit INVOKEVIRTUAL.
    • emitNewInvoke

      public void emitNewInvoke(Type type, Signature sig)
      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

      public void emitSpecialInvoke(Type type, String name, Signature sig)
      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

      public void callEmitter(EmitterFactory.Emitter emitter)
    • emitPop

      public void emitPop()
    • emitConversion

      public void emitConversion(Type from, Type to)
    • emitBinaryOperator

      public void emitBinaryOperator(ExpressionFactory.BinaryOperatorExpression arg)