Class EmitterFactory

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

public final class EmitterFactory extends Object
This class provides methods that allow the construction of an object that can later be used to emit a bytecode. This is useful when multiple visitors are needed for first preparing an AST, then generating the bytecode.
  • Field Details

    • MAX_OPCODE

      private static final int MAX_OPCODE
      See Also:
    • opcodeNames

      private static String[] opcodeNames
    • visitInsnSet

      private static BitSet visitInsnSet
    • visitIntInsnSet

      private static BitSet visitIntInsnSet
    • visitVarInsnSet

      private static BitSet visitVarInsnSet
    • visitFieldInsnSet

      private static BitSet visitFieldInsnSet
    • visitMethodInsnSet

      private static BitSet visitMethodInsnSet
    • visitTypeInsnSet

      private static BitSet visitTypeInsnSet
    • visitJumpInsnSet

      private static BitSet visitJumpInsnSet
    • specialOpcodeSet

      private static BitSet specialOpcodeSet
    • validOpcodeSet

      private static BitSet validOpcodeSet
    • arrayStore

      private static final EmitterFactory.Emitter arrayStore
    • arrayLoad

      private static final EmitterFactory.Emitter arrayLoad
    • arrayLength

      private static final EmitterFactory.Emitter arrayLength
  • Constructor Details

    • EmitterFactory

      private EmitterFactory()
  • Method Details

    • makeBitSet

      private static BitSet makeBitSet(int... args)
    • check

      private static void check(BitSet validOps, int op)
    • getVarInsnOpcode

      private static int getVarInsnOpcode(Type type, boolean isStore)
    • makeFieldInsnEmitter

      private static EmitterFactory.Emitter makeFieldInsnEmitter(boolean isStore, boolean isStatic, Type targetType, String name, Type varType)
    • makeEmitter

      public static EmitterFactory.Emitter makeEmitter(Variable var, boolean isStore)
      Create an emitter that generates the instruction needed to either store the TOS value into the variable (isStore==true) or push the variable's value onto the stack (isStore==false). The stack index must be set on var in the stackFrameSlot attribute.
    • makeEmitter

      public static EmitterFactory.Emitter makeEmitter(ExpressionFactory.NonStaticFieldAccessExpression expr, boolean isStore)
      Create an emitter that generates the instruction needed to either store the TOS value into the non-static field (isStore==true) or push the non-static fields's value onto the stack (isStore==false).
    • makeEmitter

      public static EmitterFactory.Emitter makeEmitter(ExpressionFactory.StaticFieldAccessExpression expr, boolean isStore)
      Create an emitter that generates the instruction needed to either store the TOS value into the static field (isStore==true) or push the static fields's value onto the stack (isStore==false).
    • makeEmitter

      public static EmitterFactory.Emitter makeEmitter(ExpressionFactory.ArrayIndexExpression expr, boolean isStore)
      Create an emitter that generates the instruction needed to either store the TOS value into an array (aastore) (isStore==true) or push the array element's value onto the stack (aaload) (isStore==false). This emitter assumes that arrayref and index are already on the stack, and value is on the stack either before (aastore) or after (aaload) the instruction executes.
    • makeEmitter