Class ByteCodeUtility


  • public final class ByteCodeUtility
    extends java.lang.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 Detail

      • ByteCodeUtility

        public ByteCodeUtility​(org.objectweb.asm.ClassWriter cw,
                               ClassGeneratorImpl cg,
                               boolean debug,
                               java.io.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 Detail

      • dump

        private void dump()
      • emitLineNumberTable

        private void emitLineNumberTable​(MethodGenerator mg)
      • emitLocalVariableTable

        private void emitLocalVariableTable​(MethodGenerator mg)
      • emitMethodEnd

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

        private void emitReturn​(Type returnType)
      • emitRet

        public void emitRet​(Variable var)
      • emitConstantExpression

        public void emitConstantExpression​(Type type,
                                           java.lang.Object value)
      • emitThisExpression

        public void emitThisExpression()
      • emitConditionalBranch

        public void emitConditionalBranch​(MyLabel falseBranch)
      • emitBranch

        public void emitBranch​(MyLabel target)
      • 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,
                                     java.lang.String name,
                                     Signature sig)
        Emit a static INVOKE instruction.
      • emitInvoke

        public void emitInvoke​(Type type,
                               java.lang.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,
                                      java.lang.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)
      • emitPop

        public void emitPop()
      • emitConversion

        public void emitConversion​(Type from,
                                   Type to)