Class EmitUtils


  • public class EmitUtils
    extends java.lang.Object
    • Field Detail

      • CSTRUCT_NULL

        private static final Signature CSTRUCT_NULL
      • CSTRUCT_THROWABLE

        private static final Signature CSTRUCT_THROWABLE
      • GET_NAME

        private static final Signature GET_NAME
      • HASH_CODE

        private static final Signature HASH_CODE
      • EQUALS

        private static final Signature EQUALS
      • STRING_LENGTH

        private static final Signature STRING_LENGTH
      • STRING_CHAR_AT

        private static final Signature STRING_CHAR_AT
      • FOR_NAME

        private static final Signature FOR_NAME
      • DOUBLE_TO_LONG_BITS

        private static final Signature DOUBLE_TO_LONG_BITS
      • FLOAT_TO_INT_BITS

        private static final Signature FLOAT_TO_INT_BITS
      • TO_STRING

        private static final Signature TO_STRING
      • APPEND_STRING

        private static final Signature APPEND_STRING
      • APPEND_INT

        private static final Signature APPEND_INT
      • APPEND_DOUBLE

        private static final Signature APPEND_DOUBLE
      • APPEND_FLOAT

        private static final Signature APPEND_FLOAT
      • APPEND_CHAR

        private static final Signature APPEND_CHAR
      • APPEND_LONG

        private static final Signature APPEND_LONG
      • APPEND_BOOLEAN

        private static final Signature APPEND_BOOLEAN
      • LENGTH

        private static final Signature LENGTH
      • SET_LENGTH

        private static final Signature SET_LENGTH
      • GET_DECLARED_METHOD

        private static final Signature GET_DECLARED_METHOD
    • Constructor Detail

      • EmitUtils

        private EmitUtils()
    • Method Detail

      • null_constructor

        public static void null_constructor​(ClassEmitter ce)
      • process_array

        public static void process_array​(CodeEmitter e,
                                         org.objectweb.asm.Type type,
                                         ProcessArrayCallback callback)
        Process an array on the stack. Assumes the top item on the stack is an array of the specified type. For each element in the array, puts the element on the stack and triggers the callback.
        Parameters:
        type - the type of the array (type.isArray() must be true)
        callback - the callback triggered for each element
      • process_arrays

        public static void process_arrays​(CodeEmitter e,
                                          org.objectweb.asm.Type type,
                                          ProcessArrayCallback callback)
        Process two arrays on the stack in parallel. Assumes the top two items on the stack are arrays of the specified class. The arrays must be the same length. For each pair of elements in the arrays, puts the pair on the stack and triggers the callback.
        Parameters:
        type - the type of the arrays (type.isArray() must be true)
        callback - the callback triggered for each pair of elements
      • string_switch_trie

        private static void string_switch_trie​(CodeEmitter e,
                                               java.lang.String[] strings,
                                               ObjectSwitchCallback callback)
                                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • stringSwitchHelper

        private static void stringSwitchHelper​(CodeEmitter e,
                                               java.util.List strings,
                                               ObjectSwitchCallback callback,
                                               org.objectweb.asm.Label def,
                                               org.objectweb.asm.Label end,
                                               int index)
                                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getSwitchKeys

        static int[] getSwitchKeys​(java.util.Map buckets)
      • string_switch_hash

        private static void string_switch_hash​(CodeEmitter e,
                                               java.lang.String[] strings,
                                               ObjectSwitchCallback callback,
                                               boolean skipEquals)
                                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • load_class_this

        public static void load_class_this​(CodeEmitter e)
      • load_class

        public static void load_class​(CodeEmitter e,
                                      org.objectweb.asm.Type type)
      • load_class_helper

        private static void load_class_helper​(CodeEmitter e,
                                              org.objectweb.asm.Type type)
      • push_array

        public static void push_array​(CodeEmitter e,
                                      java.lang.Object[] array)
      • remapComponentType

        private static java.lang.Class remapComponentType​(java.lang.Class componentType)
      • push_object

        public static void push_object​(CodeEmitter e,
                                       java.lang.Object obj)
      • hash_primitive

        private static void hash_primitive​(CodeEmitter e,
                                           org.objectweb.asm.Type type)
      • hash_long

        private static void hash_long​(CodeEmitter e)
      • not_equals

        public static void not_equals​(CodeEmitter e,
                                      org.objectweb.asm.Type type,
                                      org.objectweb.asm.Label notEquals,
                                      CustomizerRegistry registry)
        Branches to the specified label if the top two items on the stack are not equal. The items must both be of the specified class. Equality is determined by comparing primitive values directly and by invoking the equals method for Objects. Arrays are recursively processed in the same manner.
      • nullcmp

        private static void nullcmp​(CodeEmitter e,
                                    org.objectweb.asm.Label oneNull,
                                    org.objectweb.asm.Label bothNull)
        If both objects on the top of the stack are non-null, does nothing. If one is null, or both are null, both are popped off and execution branches to the respective label.
        Parameters:
        oneNull - label to branch to if only one of the objects is null
        bothNull - label to branch to if both of the objects are null
      • shrinkStringBuffer

        private static void shrinkStringBuffer​(CodeEmitter e,
                                               int amt)
      • member_switch_helper

        private static void member_switch_helper​(CodeEmitter e,
                                                 java.util.List members,
                                                 ObjectSwitchCallback callback,
                                                 boolean useName)
      • member_helper_size

        private static void member_helper_size​(CodeEmitter e,
                                               java.util.List members,
                                               ObjectSwitchCallback callback,
                                               EmitUtils.ParameterTyper typer,
                                               org.objectweb.asm.Label def,
                                               org.objectweb.asm.Label end)
                                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • member_helper_type

        private static void member_helper_type​(CodeEmitter e,
                                               java.util.List members,
                                               ObjectSwitchCallback callback,
                                               EmitUtils.ParameterTyper typer,
                                               org.objectweb.asm.Label def,
                                               org.objectweb.asm.Label end,
                                               java.util.BitSet checked)
                                        throws java.lang.Exception
        Throws:
        java.lang.Exception
      • wrap_throwable

        public static void wrap_throwable​(Block block,
                                          org.objectweb.asm.Type wrapper)
      • add_properties

        public static void add_properties​(ClassEmitter ce,
                                          java.lang.String[] names,
                                          org.objectweb.asm.Type[] types)
      • add_property

        public static void add_property​(ClassEmitter ce,
                                        java.lang.String name,
                                        org.objectweb.asm.Type type,
                                        java.lang.String fieldName)
      • wrap_undeclared_throwable

        public static void wrap_undeclared_throwable​(CodeEmitter e,
                                                     Block handler,
                                                     org.objectweb.asm.Type[] exceptions,
                                                     org.objectweb.asm.Type wrapper)