Class ContinuationGenerators

java.lang.Object
com.offbynull.coroutines.instrumenter.ContinuationGenerators

final class ContinuationGenerators extends Object
  • Field Details

    • CONTINUATION_GETMODE_METHOD

      private static final Method CONTINUATION_GETMODE_METHOD
    • CONTINUATION_SETMODE_METHOD

      private static final Method CONTINUATION_SETMODE_METHOD
    • CONTINUATION_LOADNEXTMETHODSTATE_METHOD

      private static final Method CONTINUATION_LOADNEXTMETHODSTATE_METHOD
    • CONTINUATION_UNLOADCURRENTMETHODSTATE_METHOD

      private static final Method CONTINUATION_UNLOADCURRENTMETHODSTATE_METHOD
    • CONTINUATION_UNLOADMETHODSTATETOBEFORE_METHOD

      private static final Method CONTINUATION_UNLOADMETHODSTATETOBEFORE_METHOD
    • CONTINUATION_PUSHNEWMETHODSTATE_METHOD

      private static final Method CONTINUATION_PUSHNEWMETHODSTATE_METHOD
    • METHODSTATE_INIT_METHOD

      private static final Constructor<MethodState> METHODSTATE_INIT_METHOD
    • METHODSTATE_GETCONTINUATIONPOINT_METHOD

      private static final Method METHODSTATE_GETCONTINUATIONPOINT_METHOD
    • METHODSTATE_GETDATA_METHOD

      private static final Method METHODSTATE_GETDATA_METHOD
    • METHODSTATE_GETLOCKSTATE_METHOD

      private static final Method METHODSTATE_GETLOCKSTATE_METHOD
  • Constructor Details

    • ContinuationGenerators

      private ContinuationGenerators()
  • Method Details

    • entryPointLoader

      public static org.objectweb.asm.tree.InsnList entryPointLoader(MethodAttributes attrs)
    • restoreState

      public static org.objectweb.asm.tree.InsnList restoreState(MethodAttributes attrs, int idx)
    • restoreStateFromSuspend

      private static org.objectweb.asm.tree.InsnList restoreStateFromSuspend(MethodAttributes attrs, int idx)
    • restoreStateFromNormalInvocation

      private static org.objectweb.asm.tree.InsnList restoreStateFromNormalInvocation(MethodAttributes attrs, int idx)
    • restoreStateFromInvocationWithinTryCatch

      private static org.objectweb.asm.tree.InsnList restoreStateFromInvocationWithinTryCatch(MethodAttributes attrs, int idx)
    • saveState

      public static org.objectweb.asm.tree.InsnList saveState(MethodAttributes attrs, int idx)
    • saveStateFromSuspend

      private static org.objectweb.asm.tree.InsnList saveStateFromSuspend(MethodAttributes attrs, int idx)
    • saveStateFromNormalInvocation

      private static org.objectweb.asm.tree.InsnList saveStateFromNormalInvocation(MethodAttributes attrs, int idx)
    • saveStateFromInvocationWithinTryCatch

      private static org.objectweb.asm.tree.InsnList saveStateFromInvocationWithinTryCatch(MethodAttributes attrs, int idx)
    • returnDummy

      private static org.objectweb.asm.tree.InsnList returnDummy(org.objectweb.asm.Type returnType)
      Generates instructions that returns a dummy value. Return values are as follows:
      • void -> no value
      • boolean -> false
      • byte/short/char/int -> 0
      • long -> 0L
      • float -> 0.0f
      • double -> 0.0
      • Object -> null
      Parameters:
      returnType - return type of the method this generated bytecode is for
      Returns:
      instructions to return a dummy value
      Throws:
      NullPointerException - if any argument is null
      IllegalArgumentException - if returnType's sort is of Type.METHOD
    • popMethodResult

      private static org.objectweb.asm.tree.InsnList popMethodResult(org.objectweb.asm.tree.AbstractInsnNode invokeInsnNode)
      Generates instructions to pop the result of the method off the stack. This will only generate instructions if the method being invoked generates a return value.
      Parameters:
      invokeInsnNode - instruction for the method that was invoked (can either be of type MethodInsnNode or InvokeDynamicInsnNode -- this is used to determine how many items to pop off the stack
      Returns:
      instructions for a pop (only if the method being invoked generates a return value)
      Throws:
      IllegalArgumentException - if invokeInsnNode isn't of type MethodInsnNode or InvokeDynamicInsnNode
      NullPointerException - if any argument is null
    • getLogPrefix

      private static String getLogPrefix(MethodAttributes attrs)