public class com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode extends com.oracle.truffle.js.runtime.JavaScriptRootNode
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode
  super_class: com.oracle.truffle.js.runtime.JavaScriptRootNode
{
  private final com.oracle.truffle.js.runtime.JSContext context;
    descriptor: Lcom/oracle/truffle/js/runtime/JSContext;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.truffle.trufflenode.GraalJSAccess graalAccess;
    descriptor: Lcom/oracle/truffle/trufflenode/GraalJSAccess;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.truffle.trufflenode.info.Accessor accessor;
    descriptor: Lcom/oracle/truffle/trufflenode/info/Accessor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.truffle.trufflenode.info.FunctionTemplate signature;
    descriptor: Lcom/oracle/truffle/trufflenode/info/FunctionTemplate;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean getter;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.oracle.truffle.api.profiles.BranchProfile errorBranch;
    descriptor: Lcom/oracle/truffle/api/profiles/BranchProfile;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private com.oracle.truffle.js.nodes.access.GetPrototypeNode getPrototypeNode;
    descriptor: Lcom/oracle/truffle/js/nodes/access/GetPrototypeNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private com.oracle.truffle.js.nodes.access.PropertyGetNode prototypePropertyGetNode;
    descriptor: Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private com.oracle.truffle.js.nodes.access.PropertyGetNode holderPropertyGetNode;
    descriptor: Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 63
            ldc Lcom/oracle/truffle/trufflenode/node/ExecuteNativeAccessorNode;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(com.oracle.truffle.trufflenode.GraalJSAccess, com.oracle.truffle.js.runtime.JSContext, com.oracle.truffle.trufflenode.info.Accessor, boolean);
    descriptor: (Lcom/oracle/truffle/trufflenode/GraalJSAccess;Lcom/oracle/truffle/js/runtime/JSContext;Lcom/oracle/truffle/trufflenode/info/Accessor;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
        start local 1 // com.oracle.truffle.trufflenode.GraalJSAccess graalAccess
        start local 2 // com.oracle.truffle.js.runtime.JSContext context
        start local 3 // com.oracle.truffle.trufflenode.info.Accessor accessor
        start local 4 // boolean getter
         0: .line 74
            aload 0 /* this */
            invokespecial com.oracle.truffle.js.runtime.JavaScriptRootNode.<init>:()V
         1: .line 69
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.profiles.BranchProfile.create:()Lcom/oracle/truffle/api/profiles/BranchProfile;
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.errorBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
         2: .line 75
            aload 0 /* this */
            aload 2 /* context */
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
         3: .line 76
            aload 0 /* this */
            aload 1 /* graalAccess */
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.graalAccess:Lcom/oracle/truffle/trufflenode/GraalJSAccess;
         4: .line 77
            aload 0 /* this */
            aload 3 /* accessor */
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
         5: .line 78
            aload 0 /* this */
            aload 3 /* accessor */
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getSignature:()Lcom/oracle/truffle/trufflenode/info/FunctionTemplate;
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.signature:Lcom/oracle/truffle/trufflenode/info/FunctionTemplate;
         6: .line 79
            aload 0 /* this */
            iload 4 /* getter */
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.getter:Z
         7: .line 80
            aload 0 /* this */
            invokestatic com.oracle.truffle.js.nodes.access.GetPrototypeNode.create:()Lcom/oracle/truffle/js/nodes/access/GetPrototypeNode;
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.getPrototypeNode:Lcom/oracle/truffle/js/nodes/access/GetPrototypeNode;
         8: .line 81
            aload 0 /* this */
            ldc "prototype"
            iconst_0
            aload 2 /* context */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyGetNode.create:(Ljava/lang/Object;ZLcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.prototypePropertyGetNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
         9: .line 82
            aload 0 /* this */
            getstatic com.oracle.truffle.trufflenode.GraalJSAccess.HOLDER_KEY:Lcom/oracle/truffle/api/object/HiddenKey;
            aload 2 /* context */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyGetNode.createGetHidden:(Lcom/oracle/truffle/api/object/HiddenKey;Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            putfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.holderPropertyGetNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
        10: .line 83
            return
        end local 4 // boolean getter
        end local 3 // com.oracle.truffle.trufflenode.info.Accessor accessor
        end local 2 // com.oracle.truffle.js.runtime.JSContext context
        end local 1 // com.oracle.truffle.trufflenode.GraalJSAccess graalAccess
        end local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0         this  Lcom/oracle/truffle/trufflenode/node/ExecuteNativeAccessorNode;
            0   11     1  graalAccess  Lcom/oracle/truffle/trufflenode/GraalJSAccess;
            0   11     2      context  Lcom/oracle/truffle/js/runtime/JSContext;
            0   11     3     accessor  Lcom/oracle/truffle/trufflenode/info/Accessor;
            0   11     4       getter  Z
    MethodParameters:
             Name  Flags
      graalAccess  
      context      
      accessor     
      getter       

  public java.lang.Object execute(com.oracle.truffle.api.frame.VirtualFrame);
    descriptor: (Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
        start local 1 // com.oracle.truffle.api.frame.VirtualFrame frame
         0: .line 87
            aload 1 /* frame */
            invokeinterface com.oracle.truffle.api.frame.VirtualFrame.getArguments:()[Ljava/lang/Object;
            astore 2 /* arguments */
        start local 2 // java.lang.Object[] arguments
         1: .line 88
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.signature:Lcom/oracle/truffle/trufflenode/info/FunctionTemplate;
            ifnull 9
         2: .line 89
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.signature:Lcom/oracle/truffle/trufflenode/info/FunctionTemplate;
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getRealm:()Lcom/oracle/truffle/js/runtime/JSRealm;
            invokevirtual com.oracle.truffle.trufflenode.info.FunctionTemplate.getFunctionObject:(Lcom/oracle/truffle/js/runtime/JSRealm;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 3 /* functionObject */
        start local 3 // com.oracle.truffle.api.object.DynamicObject functionObject
         3: .line 90
            aload 3 /* functionObject */
            ifnull 9
         4: .line 91
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.prototypePropertyGetNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            aload 3 /* functionObject */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode.getValue:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* functionPrototype */
        start local 4 // java.lang.Object functionPrototype
         5: .line 92
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.getPrototypeNode:Lcom/oracle/truffle/js/nodes/access/GetPrototypeNode;
            aload 2 /* arguments */
            iconst_0
            aaload
            invokevirtual com.oracle.truffle.js.nodes.access.GetPrototypeNode.executeJSObject:(Ljava/lang/Object;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 5 /* instancePrototype */
        start local 5 // java.lang.Object instancePrototype
         6: .line 93
            aload 4 /* functionPrototype */
            aload 5 /* instancePrototype */
            if_acmpeq 9
         7: .line 94
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.errorBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
         8: .line 95
            aload 0 /* this */
            invokevirtual com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.incompatibleReceiverMessage:()Ljava/lang/String;
            invokestatic com.oracle.truffle.js.runtime.Errors.createTypeError:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/JSException;
            athrow
        end local 5 // java.lang.Object instancePrototype
        end local 4 // java.lang.Object functionPrototype
        end local 3 // com.oracle.truffle.api.object.DynamicObject functionObject
         9: .line 99
      StackMap locals: java.lang.Object[]
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.getter:Z
            ifeq 10
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getGetterPtr:()J
            goto 11
      StackMap locals:
      StackMap stack:
        10: aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getSetterPtr:()J
      StackMap locals:
      StackMap stack: long
        11: lstore 3 /* functionPointer */
        start local 3 // long functionPointer
        12: .line 100
            lload 3 /* functionPointer */
            lconst_0
            lcmp
            ifne 15
        13: .line 101
            getstatic com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.$assertionsDisabled:Z
            ifne 14
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.getter:Z
            ifeq 14
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        14: .line 102
      StackMap locals: long
      StackMap stack:
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            areturn
        15: .line 104
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.holderPropertyGetNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            aload 2 /* arguments */
            iconst_1
            aaload
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode.getValue:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* holder */
        start local 5 // java.lang.Object holder
        16: .line 105
            aload 0 /* this */
            lload 3 /* functionPointer */
            aload 5 /* holder */
            aload 2 /* arguments */
            invokevirtual com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.executeAccessorMethod:(JLjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 5 // java.lang.Object holder
        end local 3 // long functionPointer
        end local 2 // java.lang.Object[] arguments
        end local 1 // com.oracle.truffle.api.frame.VirtualFrame frame
        end local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   17     0               this  Lcom/oracle/truffle/trufflenode/node/ExecuteNativeAccessorNode;
            0   17     1              frame  Lcom/oracle/truffle/api/frame/VirtualFrame;
            1   17     2          arguments  [Ljava/lang/Object;
            3    9     3     functionObject  Lcom/oracle/truffle/api/object/DynamicObject;
            5    9     4  functionPrototype  Ljava/lang/Object;
            6    9     5  instancePrototype  Ljava/lang/Object;
           12   17     3    functionPointer  J
           16   17     5             holder  Ljava/lang/Object;
    MethodParameters:
       Name  Flags
      frame  

  private java.lang.String incompatibleReceiverMessage();
    descriptor: ()Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
         0: .line 110
            new java.lang.StringBuilder
            dup
            ldc "Method "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " called on incompatible receiver"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/trufflenode/node/ExecuteNativeAccessorNode;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()

  private java.lang.Object executeAccessorMethod(long, java.lang.Object, java.lang.Object[]);
    descriptor: (JLjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=6, args_size=4
        start local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
        start local 1 // long functionPointer
        start local 3 // java.lang.Object holder
        start local 4 // java.lang.Object[] arguments
         0: .line 116
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.getter:Z
            ifeq 4
         1: .line 117
            lload 1 /* functionPointer */
            aload 3 /* holder */
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getName:()Ljava/lang/String;
            aload 4 /* arguments */
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getData:()Ljava/lang/Object;
            invokestatic com.oracle.truffle.trufflenode.NativeAccess.executeAccessorGetter:(JLjava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* result */
        start local 5 // java.lang.Object result
         2: .line 118
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.graalAccess:Lcom/oracle/truffle/trufflenode/GraalJSAccess;
            aload 5 /* result */
            invokevirtual com.oracle.truffle.trufflenode.GraalJSAccess.correctReturnValue:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* result */
         3: .line 119
            goto 6
        end local 5 // java.lang.Object result
         4: .line 120
      StackMap locals:
      StackMap stack:
            lload 1 /* functionPointer */
            aload 3 /* holder */
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getName:()Ljava/lang/String;
            aload 4 /* arguments */
            aload 0 /* this */
            getfield com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode.accessor:Lcom/oracle/truffle/trufflenode/info/Accessor;
            invokevirtual com.oracle.truffle.trufflenode.info.Accessor.getData:()Ljava/lang/Object;
            invokestatic com.oracle.truffle.trufflenode.NativeAccess.executeAccessorSetter:(JLjava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 121
            getstatic com.oracle.truffle.js.runtime.objects.Undefined.instance:Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            astore 5 /* result */
        start local 5 // java.lang.Object result
         6: .line 123
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 5 /* result */
            areturn
        end local 5 // java.lang.Object result
        end local 4 // java.lang.Object[] arguments
        end local 3 // java.lang.Object holder
        end local 1 // long functionPointer
        end local 0 // com.oracle.truffle.trufflenode.node.ExecuteNativeAccessorNode this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    7     0             this  Lcom/oracle/truffle/trufflenode/node/ExecuteNativeAccessorNode;
            0    7     1  functionPointer  J
            0    7     3           holder  Ljava/lang/Object;
            0    7     4        arguments  [Ljava/lang/Object;
            2    4     5           result  Ljava/lang/Object;
            6    7     5           result  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
                 Name  Flags
      functionPointer  
      holder           
      arguments        
}
SourceFile: "ExecuteNativeAccessorNode.java"
InnerClasses:
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives
  public abstract Child = com.oracle.truffle.api.nodes.Node$Child of com.oracle.truffle.api.nodes.Node