abstract class com.oracle.truffle.polyglot.ProxyInvokeNode extends com.oracle.truffle.api.nodes.Node
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.truffle.polyglot.ProxyInvokeNode
  super_class: com.oracle.truffle.api.nodes.Node
{
  protected static final int LIMIT;
    descriptor: I
    flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL
    ConstantValue: 2147483647

  private boolean invokeFailed;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.polyglot.ProxyInvokeNode this
         0: .line 656
            aload 0 /* this */
            invokespecial com.oracle.truffle.api.nodes.Node.<init>:()V
            return
        end local 0 // com.oracle.truffle.polyglot.ProxyInvokeNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/polyglot/ProxyInvokeNode;

  public abstract java.lang.Object execute(com.oracle.truffle.polyglot.PolyglotLanguageContext, java.lang.Object, java.lang.reflect.Method, java.lang.Object[]);
    descriptor: (Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
    MethodParameters:
                 Name  Flags
      languageContext  
      receiver         
      method           
      arguments        

  protected  doCachedMethod(com.oracle.truffle.polyglot.PolyglotLanguageContext, , java.lang.reflect.Method, [], java.lang.reflect.Method, java.lang.String, java.lang.Class<?>, java.lang.reflect.Type, com.oracle.truffle.api.interop.InteropLibrary, com.oracle.truffle.api.interop.InteropLibrary, com.oracle.truffle.api.profiles.ConditionProfile, com.oracle.truffle.polyglot.ToHostNode, com.oracle.truffle.api.profiles.BranchProfile);
    descriptor: (Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/reflect/Method;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/reflect/Type;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/profiles/ConditionProfile;Lcom/oracle/truffle/polyglot/ToHostNode;Lcom/oracle/truffle/api/profiles/BranchProfile;)Ljava/lang/Object;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=9, locals=15, args_size=14
        start local 0 // com.oracle.truffle.polyglot.ProxyInvokeNode this
        start local 1 // com.oracle.truffle.polyglot.PolyglotLanguageContext languageContext
        start local 2 // java.lang.Object receiver
        start local 3 // java.lang.reflect.Method method
        start local 4 // java.lang.Object[] arguments
        start local 5 // java.lang.reflect.Method cachedMethod
        start local 6 // java.lang.String name
        start local 7 // java.lang.Class returnClass
        start local 8 // java.lang.reflect.Type returnType
        start local 9 // com.oracle.truffle.api.interop.InteropLibrary receivers
        start local 10 // com.oracle.truffle.api.interop.InteropLibrary members
        start local 11 // com.oracle.truffle.api.profiles.ConditionProfile branchProfile
        start local 12 // com.oracle.truffle.polyglot.ToHostNode toHost
        start local 13 // com.oracle.truffle.api.profiles.BranchProfile error
         0: .line 683
            aload 0 /* this */
            aload 1 /* languageContext */
            aload 2 /* receiver */
            aload 4 /* arguments */
            aload 6 /* name */
            aload 9 /* receivers */
            aload 10 /* members */
            aload 11 /* branchProfile */
            aload 13 /* error */
            invokevirtual com.oracle.truffle.polyglot.ProxyInvokeNode.invokeOrExecute:(Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/String;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/profiles/ConditionProfile;Lcom/oracle/truffle/api/profiles/BranchProfile;)Ljava/lang/Object;
            astore 14 /* result */
        start local 14 // java.lang.Object result
         1: .line 684
            aload 12 /* toHost */
            aload 14 /* result */
            aload 7 /* returnClass */
            aload 8 /* returnType */
            aload 1 /* languageContext */
            iconst_1
            invokevirtual com.oracle.truffle.polyglot.ToHostNode.execute:(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/reflect/Type;Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Z)Ljava/lang/Object;
            areturn
        end local 14 // java.lang.Object result
        end local 13 // com.oracle.truffle.api.profiles.BranchProfile error
        end local 12 // com.oracle.truffle.polyglot.ToHostNode toHost
        end local 11 // com.oracle.truffle.api.profiles.ConditionProfile branchProfile
        end local 10 // com.oracle.truffle.api.interop.InteropLibrary members
        end local 9 // com.oracle.truffle.api.interop.InteropLibrary receivers
        end local 8 // java.lang.reflect.Type returnType
        end local 7 // java.lang.Class returnClass
        end local 6 // java.lang.String name
        end local 5 // java.lang.reflect.Method cachedMethod
        end local 4 // java.lang.Object[] arguments
        end local 3 // java.lang.reflect.Method method
        end local 2 // java.lang.Object receiver
        end local 1 // com.oracle.truffle.polyglot.PolyglotLanguageContext languageContext
        end local 0 // com.oracle.truffle.polyglot.ProxyInvokeNode this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0             this  Lcom/oracle/truffle/polyglot/ProxyInvokeNode;
            0    2     1  languageContext  Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;
            0    2     2         receiver  Ljava/lang/Object;
            0    2     3           method  Ljava/lang/reflect/Method;
            0    2     4        arguments  [Ljava/lang/Object;
            0    2     5     cachedMethod  Ljava/lang/reflect/Method;
            0    2     6             name  Ljava/lang/String;
            0    2     7      returnClass  Ljava/lang/Class<*>;
            0    2     8       returnType  Ljava/lang/reflect/Type;
            0    2     9        receivers  Lcom/oracle/truffle/api/interop/InteropLibrary;
            0    2    10          members  Lcom/oracle/truffle/api/interop/InteropLibrary;
            0    2    11    branchProfile  Lcom/oracle/truffle/api/profiles/ConditionProfile;
            0    2    12           toHost  Lcom/oracle/truffle/polyglot/ToHostNode;
            0    2    13            error  Lcom/oracle/truffle/api/profiles/BranchProfile;
            1    2    14           result  Ljava/lang/Object;
    Signature: (Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/reflect/Method;Ljava/lang/String;Ljava/lang/Class<*>;Ljava/lang/reflect/Type;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/profiles/ConditionProfile;Lcom/oracle/truffle/polyglot/ToHostNode;Lcom/oracle/truffle/api/profiles/BranchProfile;)Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(guards = {"cachedMethod == method"}, limit = "LIMIT")
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
      3:
      4:
        com.oracle.truffle.api.dsl.Cached(value = "method")
      5:
        com.oracle.truffle.api.dsl.Cached(value = "method.getName()")
      6:
        com.oracle.truffle.api.dsl.Cached(value = "getMethodReturnType(method)")
      7:
        com.oracle.truffle.api.dsl.Cached(value = "getMethodGenericReturnType(method)")
      8:
        com.oracle.truffle.api.library.CachedLibrary(value = "receiver")
      9:
        com.oracle.truffle.api.library.CachedLibrary(limit = "LIMIT")
      10:
        com.oracle.truffle.api.dsl.Cached()
      11:
        com.oracle.truffle.api.dsl.Cached(value = "create()")
      12:
        com.oracle.truffle.api.dsl.Cached()
    MethodParameters:
                 Name  Flags
      languageContext  
      receiver         
      method           
      arguments        
      cachedMethod     
      name             
      returnClass      
      returnType       
      receivers        
      members          
      branchProfile    
      toHost           
      error            

  private static boolean guardReturnType(java.lang.reflect.Method, java.lang.reflect.Type);
    descriptor: (Ljava/lang/reflect/Method;Ljava/lang/reflect/Type;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.reflect.Method method
        start local 1 // java.lang.reflect.Type returnType
         0: .line 689
            aload 0 /* method */
            invokevirtual java.lang.reflect.Method.getGenericReturnType:()Ljava/lang/reflect/Type;
            aload 1 /* returnType */
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ireturn
        end local 1 // java.lang.reflect.Type returnType
        end local 0 // java.lang.reflect.Method method
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0      method  Ljava/lang/reflect/Method;
            0    1     1  returnType  Ljava/lang/reflect/Type;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
            Name  Flags
      method      
      returnType  

  private java.lang.Object invokeOrExecute(com.oracle.truffle.polyglot.PolyglotLanguageContext, java.lang.Object, java.lang.Object[], java.lang.String, com.oracle.truffle.api.interop.InteropLibrary, com.oracle.truffle.api.interop.InteropLibrary, com.oracle.truffle.api.profiles.ConditionProfile, com.oracle.truffle.api.profiles.BranchProfile);
    descriptor: (Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/String;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/interop/InteropLibrary;Lcom/oracle/truffle/api/profiles/ConditionProfile;Lcom/oracle/truffle/api/profiles/BranchProfile;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=11, args_size=9
        start local 0 // com.oracle.truffle.polyglot.ProxyInvokeNode this
        start local 1 // com.oracle.truffle.polyglot.PolyglotLanguageContext polyglotContext
        start local 2 // java.lang.Object receiver
        start local 3 // java.lang.Object[] arguments
        start local 4 // java.lang.String member
        start local 5 // com.oracle.truffle.api.interop.InteropLibrary receivers
        start local 6 // com.oracle.truffle.api.interop.InteropLibrary members
        start local 7 // com.oracle.truffle.api.profiles.ConditionProfile invokeProfile
        start local 8 // com.oracle.truffle.api.profiles.BranchProfile error
         0: .line 696
            aload 0 /* this */
            getfield com.oracle.truffle.polyglot.ProxyInvokeNode.invokeFailed:Z
            istore 9 /* localInvokeFailed */
        start local 9 // boolean localInvokeFailed
         1: .line 697
            iload 9 /* localInvokeFailed */
            ifne 7
         2: .line 699
            aload 5 /* receivers */
            aload 2 /* receiver */
            aload 4 /* member */
            aload 3 /* arguments */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
         3: areturn
         4: .line 700
      StackMap locals: com.oracle.truffle.polyglot.ProxyInvokeNode com.oracle.truffle.polyglot.PolyglotLanguageContext java.lang.Object java.lang.Object[] java.lang.String com.oracle.truffle.api.interop.InteropLibrary com.oracle.truffle.api.interop.InteropLibrary com.oracle.truffle.api.profiles.ConditionProfile com.oracle.truffle.api.profiles.BranchProfile int
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            pop
         5: .line 701
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         6: .line 703
            aload 0 /* this */
            iconst_1
            dup
            istore 9 /* localInvokeFailed */
            putfield com.oracle.truffle.polyglot.ProxyInvokeNode.invokeFailed:Z
         7: .line 706
      StackMap locals:
      StackMap stack:
            iload 9 /* localInvokeFailed */
            ifeq 19
         8: .line 707
            aload 7 /* invokeProfile */
            aload 5 /* receivers */
            aload 2 /* receiver */
            aload 4 /* member */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberInvocable:(Ljava/lang/Object;Ljava/lang/String;)Z
            invokevirtual com.oracle.truffle.api.profiles.ConditionProfile.profile:(Z)Z
            ifeq 11
         9: .line 708
            aload 5 /* receivers */
            aload 2 /* receiver */
            aload 4 /* member */
            aload 3 /* arguments */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
        10: areturn
        11: .line 709
      StackMap locals:
      StackMap stack:
            aload 5 /* receivers */
            aload 2 /* receiver */
            aload 4 /* member */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            ifeq 19
        12: .line 710
            aload 5 /* receivers */
            aload 2 /* receiver */
            aload 4 /* member */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 10 /* readMember */
        start local 10 // java.lang.Object readMember
        13: .line 711
            aload 6 /* members */
            aload 10 /* readMember */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isExecutable:(Ljava/lang/Object;)Z
            ifeq 16
        14: .line 712
            aload 6 /* members */
            aload 10 /* readMember */
            aload 3 /* arguments */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.execute:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
        15: areturn
        16: .line 713
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 3 /* arguments */
            arraylength
            ifne 19
        17: .line 714
            aload 10 /* readMember */
        18: areturn
        end local 10 // java.lang.Object readMember
        19: .line 718
      StackMap locals:
      StackMap stack:
            aload 8 /* error */
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
        20: .line 719
            aload 1 /* polyglotContext */
            aload 2 /* receiver */
            aload 4 /* member */
            invokestatic com.oracle.truffle.polyglot.HostInteropErrors.invokeUnsupported:(Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
        end local 9 // boolean localInvokeFailed
        21: .line 720
      StackMap locals: com.oracle.truffle.polyglot.ProxyInvokeNode com.oracle.truffle.polyglot.PolyglotLanguageContext java.lang.Object java.lang.Object[] java.lang.String com.oracle.truffle.api.interop.InteropLibrary com.oracle.truffle.api.interop.InteropLibrary com.oracle.truffle.api.profiles.ConditionProfile com.oracle.truffle.api.profiles.BranchProfile
      StackMap stack: com.oracle.truffle.api.interop.UnknownIdentifierException
            pop
        22: .line 721
            aload 8 /* error */
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
        23: .line 722
            aload 1 /* polyglotContext */
            aload 2 /* receiver */
            aload 4 /* member */
            invokestatic com.oracle.truffle.polyglot.HostInteropErrors.invokeUnsupported:(Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
        24: .line 723
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedTypeException
            astore 9 /* e */
        start local 9 // com.oracle.truffle.api.interop.UnsupportedTypeException e
        25: .line 724
            aload 8 /* error */
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
        26: .line 725
            aload 1 /* polyglotContext */
            aload 2 /* receiver */
            aload 9 /* e */
            invokevirtual com.oracle.truffle.api.interop.UnsupportedTypeException.getSuppliedValues:()[Ljava/lang/Object;
            invokestatic com.oracle.truffle.polyglot.HostInteropErrors.invalidExecuteArgumentType:(Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/RuntimeException;
            athrow
        end local 9 // com.oracle.truffle.api.interop.UnsupportedTypeException e
        27: .line 726
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.ArityException
            astore 9 /* e */
        start local 9 // com.oracle.truffle.api.interop.ArityException e
        28: .line 727
            aload 8 /* error */
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
        29: .line 728
            aload 1 /* polyglotContext */
            aload 2 /* receiver */
            aload 3 /* arguments */
            aload 9 /* e */
            invokevirtual com.oracle.truffle.api.interop.ArityException.getExpectedArity:()I
            aload 9 /* e */
            invokevirtual com.oracle.truffle.api.interop.ArityException.getActualArity:()I
            invokestatic com.oracle.truffle.polyglot.HostInteropErrors.invalidExecuteArity:(Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;[Ljava/lang/Object;II)Ljava/lang/RuntimeException;
            athrow
        end local 9 // com.oracle.truffle.api.interop.ArityException e
        30: .line 729
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedMessageException
            pop
        31: .line 730
            aload 8 /* error */
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
        32: .line 731
            aload 1 /* polyglotContext */
            aload 2 /* receiver */
            aload 4 /* member */
            invokestatic com.oracle.truffle.polyglot.HostInteropErrors.invokeUnsupported:(Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
        end local 8 // com.oracle.truffle.api.profiles.BranchProfile error
        end local 7 // com.oracle.truffle.api.profiles.ConditionProfile invokeProfile
        end local 6 // com.oracle.truffle.api.interop.InteropLibrary members
        end local 5 // com.oracle.truffle.api.interop.InteropLibrary receivers
        end local 4 // java.lang.String member
        end local 3 // java.lang.Object[] arguments
        end local 2 // java.lang.Object receiver
        end local 1 // com.oracle.truffle.polyglot.PolyglotLanguageContext polyglotContext
        end local 0 // com.oracle.truffle.polyglot.ProxyInvokeNode this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   33     0               this  Lcom/oracle/truffle/polyglot/ProxyInvokeNode;
            0   33     1    polyglotContext  Lcom/oracle/truffle/polyglot/PolyglotLanguageContext;
            0   33     2           receiver  Ljava/lang/Object;
            0   33     3          arguments  [Ljava/lang/Object;
            0   33     4             member  Ljava/lang/String;
            0   33     5          receivers  Lcom/oracle/truffle/api/interop/InteropLibrary;
            0   33     6            members  Lcom/oracle/truffle/api/interop/InteropLibrary;
            0   33     7      invokeProfile  Lcom/oracle/truffle/api/profiles/ConditionProfile;
            0   33     8              error  Lcom/oracle/truffle/api/profiles/BranchProfile;
            1   21     9  localInvokeFailed  Z
           13   19    10         readMember  Ljava/lang/Object;
           25   27     9                  e  Lcom/oracle/truffle/api/interop/UnsupportedTypeException;
           28   30     9                  e  Lcom/oracle/truffle/api/interop/ArityException;
      Exception table:
        from    to  target  type
           2     3       4  Class com.oracle.truffle.api.interop.UnsupportedMessageException
           2     3       4  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           0     3      21  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           4    10      21  Class com.oracle.truffle.api.interop.UnknownIdentifierException
          11    15      21  Class com.oracle.truffle.api.interop.UnknownIdentifierException
          16    18      21  Class com.oracle.truffle.api.interop.UnknownIdentifierException
          19    21      21  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           0     3      24  Class com.oracle.truffle.api.interop.UnsupportedTypeException
           4    10      24  Class com.oracle.truffle.api.interop.UnsupportedTypeException
          11    15      24  Class com.oracle.truffle.api.interop.UnsupportedTypeException
          16    18      24  Class com.oracle.truffle.api.interop.UnsupportedTypeException
          19    21      24  Class com.oracle.truffle.api.interop.UnsupportedTypeException
           0     3      27  Class com.oracle.truffle.api.interop.ArityException
           4    10      27  Class com.oracle.truffle.api.interop.ArityException
          11    15      27  Class com.oracle.truffle.api.interop.ArityException
          16    18      27  Class com.oracle.truffle.api.interop.ArityException
          19    21      27  Class com.oracle.truffle.api.interop.ArityException
           0     3      30  Class com.oracle.truffle.api.interop.UnsupportedMessageException
           4    10      30  Class com.oracle.truffle.api.interop.UnsupportedMessageException
          11    15      30  Class com.oracle.truffle.api.interop.UnsupportedMessageException
          16    18      30  Class com.oracle.truffle.api.interop.UnsupportedMessageException
          19    21      30  Class com.oracle.truffle.api.interop.UnsupportedMessageException
    MethodParameters:
                 Name  Flags
      polyglotContext  
      receiver         
      arguments        
      member           
      receivers        
      members          
      invokeProfile    
      error            
}
SourceFile: "HostInteropReflect.java"
InnerClasses:
  public abstract CompilationFinal = com.oracle.truffle.api.CompilerDirectives$CompilationFinal of com.oracle.truffle.api.CompilerDirectives
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
    RuntimeInvisibleAnnotations: 
      com.oracle.truffle.api.dsl.ImportStatic(value = {Lcom/oracle/truffle/polyglot/HostInteropReflect;})