Class IndyInterface

java.lang.Object
org.codehaus.groovy.vmplugin.v8.IndyInterface

public class IndyInterface extends Object
Bytecode level interface for bootstrap methods used by invokedynamic. This class provides a logging ability by using the boolean system property groovy.indy.logging. Other than that this class contains the interfacing methods with bytecode for invokedynamic as well as some helper methods and classes.
  • Field Details

    • SAFE_NAVIGATION

      public static final int SAFE_NAVIGATION
      flags for method and property calls
      See Also:
    • THIS_CALL

      public static final int THIS_CALL
      flags for method and property calls
      See Also:
    • GROOVY_OBJECT

      public static final int GROOVY_OBJECT
      flags for method and property calls
      See Also:
    • IMPLICIT_THIS

      public static final int IMPLICIT_THIS
      flags for method and property calls
      See Also:
    • SPREAD_CALL

      public static final int SPREAD_CALL
      flags for method and property calls
      See Also:
    • UNCACHED_CALL

      public static final int UNCACHED_CALL
      flags for method and property calls
      See Also:
    • LOG

      protected static final Logger LOG
      Logger
    • LOG_ENABLED

      protected static final boolean LOG_ENABLED
      boolean to indicate if logging for indy is enabled
    • LOOKUP

      public static final MethodHandles.Lookup LOOKUP
      LOOKUP constant used for example in unreflect calls
    • switchPoint

      protected static SwitchPoint switchPoint
  • Constructor Details

    • IndyInterface

      public IndyInterface()
  • Method Details

    • invalidateSwitchPoints

      protected static void invalidateSwitchPoints()
      Callback for constant metaclass update change
    • bootstrap

      public static CallSite bootstrap(MethodHandles.Lookup caller, String callType, MethodType type, String name, int flags)
      bootstrap method for method calls from Groovy compiled code with indy enabled. This method gets a flags parameter which uses the following encoding:
      Parameters:
      caller - - the caller
      callType - - the type of the call
      type - - the call site type
      name - - the real method name
      flags - - call flags
      Returns:
      the produced CallSite
      Since:
      Groovy 2.1.0
    • makeFallBack

      protected static MethodHandle makeFallBack(MutableCallSite mc, Class<?> sender, String name, int callID, MethodType type, boolean safeNavigation, boolean thisCall, boolean spreadCall)
      Makes a fallback method for an invalidated method selection
    • fromCache

      public static Object fromCache(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) throws Throwable
      Get the cached methodhandle. if the related methodhandle is not found in the inline cache, cache and return it.
      Throws:
      Throwable
    • selectMethod

      public static Object selectMethod(CacheableCallSite callSite, Class<?> sender, String methodName, int callID, Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) throws Throwable
      Core method for indy method selection using runtime types.
      Throws:
      Throwable
    • staticArrayAccess

      public static CallSite staticArrayAccess(MethodHandles.Lookup lookup, String name, MethodType type)
      Since:
      2.5.0