Class AsmBytecodeGenerator

java.lang.Object
com.helix.core.bytecode.AsmBytecodeGenerator
All Implemented Interfaces:
BytecodeGenerator, org.objectweb.asm.Opcodes
Direct Known Subclasses:
AsmGenerator

public class AsmBytecodeGenerator extends Object implements BytecodeGenerator, org.objectweb.asm.Opcodes
Low-level ASM bytecode generator for high-performance rule compilation with direct ONNX inference invocations.

Emits ultra-low-latency JVM bytecode instructions (ALOAD, LDC, INVOKESTATIC, FCMP/DCMP) bypassing reflection and dynamic dispatch, achieving sub-millisecond execution latency.

  • Field Summary

    Fields inherited from interface org.objectweb.asm.Opcodes

    AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V9
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    AsmBytecodeGenerator(boolean profilingEnabled)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    generate(Rule rule, ExpressionNode astRoot)
    Generates an executable CompiledRule instance from a rule definition and its parsed AST.
    byte[]
    Generates raw JVM bytecode for the given rule without loading the class into the JVM.
    byte[]
    generateBytecode(String className, Rule rule, ExpressionNode astRoot)
    Generates raw JVM bytecode for the specified class name.
    boolean
     
    static boolean
    Runtime helper invoked from compiled bytecode to retrieve a boolean variable from context.
    static double
    Runtime helper invoked from compiled bytecode to retrieve a double variable from context.
    static Object
    Runtime helper invoked from compiled bytecode to retrieve an object variable from context.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • AsmBytecodeGenerator

      public AsmBytecodeGenerator()
    • AsmBytecodeGenerator

      public AsmBytecodeGenerator(boolean profilingEnabled)
  • Method Details

    • isProfilingEnabled

      public boolean isProfilingEnabled()
    • generateBytecode

      public byte[] generateBytecode(Rule rule, ExpressionNode astRoot) throws BytecodeGenerationException
      Generates raw JVM bytecode for the given rule without loading the class into the JVM.
      Parameters:
      rule - rule definition
      astRoot - AST expression tree
      Returns:
      raw class byte array
      Throws:
      BytecodeGenerationException - if generation fails
    • generateBytecode

      public byte[] generateBytecode(String className, Rule rule, ExpressionNode astRoot) throws BytecodeGenerationException
      Generates raw JVM bytecode for the specified class name.
      Parameters:
      className - fully qualified class name to generate
      rule - rule definition
      astRoot - AST expression tree
      Returns:
      raw class byte array
      Throws:
      BytecodeGenerationException - if generation fails
    • generate

      public CompiledRule generate(Rule rule, ExpressionNode astRoot) throws BytecodeGenerationException
      Description copied from interface: BytecodeGenerator
      Generates an executable CompiledRule instance from a rule definition and its parsed AST.
      Specified by:
      generate in interface BytecodeGenerator
      Parameters:
      rule - raw rule definition metadata
      astRoot - parsed root AST node
      Returns:
      compiled rule instance
      Throws:
      BytecodeGenerationException - if generation fails
    • resolveDouble

      public static double resolveDouble(ExecutionContext context, String name)
      Runtime helper invoked from compiled bytecode to retrieve a double variable from context.
    • resolveBoolean

      public static boolean resolveBoolean(ExecutionContext context, String name)
      Runtime helper invoked from compiled bytecode to retrieve a boolean variable from context.
    • resolveObject

      public static Object resolveObject(ExecutionContext context, String name)
      Runtime helper invoked from compiled bytecode to retrieve an object variable from context.