public final class com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode extends com.oracle.truffle.js.nodes.access.PropertyGetNode$LinkedPropertyGetNode
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode
  super_class: com.oracle.truffle.js.nodes.access.PropertyGetNode$LinkedPropertyGetNode
{
  private com.oracle.truffle.js.nodes.interop.ImportValueNode importValueNode;
    descriptor: Lcom/oracle/truffle/js/nodes/interop/ImportValueNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private com.oracle.truffle.js.nodes.cast.JSToObjectNode toObjectNode;
    descriptor: Lcom/oracle/truffle/js/nodes/cast/JSToObjectNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private com.oracle.truffle.js.nodes.interop.ForeignObjectPrototypeNode foreignObjectPrototypeNode;
    descriptor: Lcom/oracle/truffle/js/nodes/interop/ForeignObjectPrototypeNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

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

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

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

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

  private final com.oracle.truffle.js.runtime.JSContext context;
    descriptor: Lcom/oracle/truffle/js/runtime/JSContext;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private com.oracle.truffle.api.interop.InteropLibrary interop;
    descriptor: Lcom/oracle/truffle/api/interop/InteropLibrary;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private com.oracle.truffle.api.interop.InteropLibrary getterInterop;
    descriptor: Lcom/oracle/truffle/api/interop/InteropLibrary;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

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

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

  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 915
            ldc Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            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.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.lang.Object, boolean, boolean, com.oracle.truffle.js.runtime.JSContext);
    descriptor: (Ljava/lang/Object;ZZLcom/oracle/truffle/js/runtime/JSContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object key
        start local 2 // boolean isMethod
        start local 3 // boolean isGlobal
        start local 4 // com.oracle.truffle.js.runtime.JSContext context
         0: .line 932
            aload 0 /* this */
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$ForeignLanguageCheckNode
            dup
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$ForeignLanguageCheckNode.<init>:()V
            invokespecial com.oracle.truffle.js.nodes.access.PropertyGetNode$LinkedPropertyGetNode.<init>:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;)V
         1: .line 928
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.profiles.BranchProfile.create:()Lcom/oracle/truffle/api/profiles/BranchProfile;
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.errorBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
         2: .line 929
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.optimistic:Z
         3: .line 933
            aload 0 /* this */
            aload 4 /* context */
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
         4: .line 934
            aload 0 /* this */
            invokestatic com.oracle.truffle.js.nodes.interop.ImportValueNode.create:()Lcom/oracle/truffle/js/nodes/interop/ImportValueNode;
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.importValueNode:Lcom/oracle/truffle/js/nodes/interop/ImportValueNode;
         5: .line 935
            aload 0 /* this */
            aload 4 /* context */
            invokestatic com.oracle.truffle.js.nodes.cast.JSToObjectNode.createToObject:(Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/js/nodes/cast/JSToObjectNode;
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.toObjectNode:Lcom/oracle/truffle/js/nodes/cast/JSToObjectNode;
         6: .line 936
            aload 0 /* this */
            aload 1 /* key */
            ldc "length"
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isLength:Z
         7: .line 937
            aload 0 /* this */
            iload 2 /* isMethod */
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isMethod:Z
         8: .line 938
            aload 0 /* this */
            iload 3 /* isGlobal */
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isGlobal:Z
         9: .line 939
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getFactory:()Lcom/oracle/truffle/api/library/LibraryFactory;
            iconst_5
            invokevirtual com.oracle.truffle.api.library.LibraryFactory.createDispatched:(I)Lcom/oracle/truffle/api/library/Library;
            checkcast com.oracle.truffle.api.interop.InteropLibrary
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
        10: .line 940
            return
        end local 4 // com.oracle.truffle.js.runtime.JSContext context
        end local 3 // boolean isGlobal
        end local 2 // boolean isMethod
        end local 1 // java.lang.Object key
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0   11     1       key  Ljava/lang/Object;
            0   11     2  isMethod  Z
            0   11     3  isGlobal  Z
            0   11     4   context  Lcom/oracle/truffle/js/runtime/JSContext;
    MethodParameters:
          Name  Flags
      key       
      isMethod  
      isGlobal  
      context   

  private java.lang.Object foreignGet(java.lang.Object, com.oracle.truffle.js.nodes.access.PropertyGetNode);
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
         0: .line 943
            aload 2 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode.getKey:()Ljava/lang/Object;
            astore 3 /* key */
        start local 3 // java.lang.Object key
         1: .line 944
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isNull:(Ljava/lang/Object;)Z
            ifeq 4
         2: .line 945
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.errorBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
         3: .line 946
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            aload 3 /* key */
            aload 1 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isMethod:Z
            aload 0 /* this */
            invokestatic com.oracle.truffle.js.runtime.Errors.createTypeErrorCannotGetProperty:(Lcom/oracle/truffle/js/runtime/JSContext;Ljava/lang/Object;Ljava/lang/Object;ZLcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/js/runtime/JSException;
            athrow
         4: .line 948
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.toObjectNode:Lcom/oracle/truffle/js/nodes/cast/JSToObjectNode;
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.cast.JSToObjectNode.execute:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* object */
        start local 4 // java.lang.Object object
         5: .line 949
            aload 1 /* thisObj */
            aload 4 /* object */
            if_acmpeq 8
         6: .line 951
            getstatic com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.$assertionsDisabled:Z
            ifne 7
            aload 4 /* object */
            invokestatic com.oracle.truffle.js.runtime.objects.JSObject.isJSObject:(Ljava/lang/Object;)Z
            ifne 7
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         7: .line 952
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 4 /* object */
            aload 3 /* key */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getFromJSObject:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
         8: .line 954
      StackMap locals:
      StackMap stack:
            aload 3 /* key */
            instanceof java.lang.String
            ifne 10
         9: .line 955
            getstatic com.oracle.truffle.js.runtime.objects.Undefined.instance:Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            areturn
        10: .line 957
      StackMap locals:
      StackMap stack:
            aload 3 /* key */
            checkcast java.lang.String
            astore 5 /* stringKey */
        start local 5 // java.lang.String stringKey
        11: .line 958
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.isOptionNashornCompatibilityMode:()Z
            ifeq 15
        12: .line 959
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 2 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.tryGetters:(Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
            astore 6 /* result */
        start local 6 // java.lang.Object result
        13: .line 960
            aload 6 /* result */
            ifnull 15
        14: .line 961
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.importValueNode:Lcom/oracle/truffle/js/nodes/interop/ImportValueNode;
            aload 6 /* result */
            invokevirtual com.oracle.truffle.js.nodes.interop.ImportValueNode.executeWithTarget:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 6 // java.lang.Object result
        15: .line 965
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.optimistic:Z
            ifeq 23
        16: .line 967
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            aload 5 /* stringKey */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 6 /* foreignResult */
        start local 6 // java.lang.Object foreignResult
        17: .line 968
            goto 29
        end local 6 // java.lang.Object foreignResult
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
        18: pop
        19: .line 969
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
        20: .line 970
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.optimistic:Z
        21: .line 971
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 3 /* key */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.maybeGetFromPrototype:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            astore 6 /* foreignResult */
        start local 6 // java.lang.Object foreignResult
        22: .line 973
            goto 29
        end local 6 // java.lang.Object foreignResult
        23: .line 974
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            aload 5 /* stringKey */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            ifeq 28
        24: .line 976
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            aload 5 /* stringKey */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 6 /* foreignResult */
        start local 6 // java.lang.Object foreignResult
        25: .line 977
            goto 29
        end local 6 // java.lang.Object foreignResult
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
        26: pop
        27: .line 978
            getstatic com.oracle.truffle.js.runtime.objects.Undefined.instance:Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            areturn
        28: .line 981
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 3 /* key */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.maybeGetFromPrototype:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            astore 6 /* foreignResult */
        start local 6 // java.lang.Object foreignResult
        29: .line 984
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.importValueNode:Lcom/oracle/truffle/js/nodes/interop/ImportValueNode;
            aload 6 /* foreignResult */
            invokevirtual com.oracle.truffle.js.nodes.interop.ImportValueNode.executeWithTarget:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 6 // java.lang.Object foreignResult
        end local 5 // java.lang.String stringKey
        end local 4 // java.lang.Object object
        end local 3 // java.lang.Object key
        end local 2 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   30     0           this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0   30     1        thisObj  Ljava/lang/Object;
            0   30     2           root  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            1   30     3            key  Ljava/lang/Object;
            5   30     4         object  Ljava/lang/Object;
           11   30     5      stringKey  Ljava/lang/String;
           13   15     6         result  Ljava/lang/Object;
           17   18     6  foreignResult  Ljava/lang/Object;
           22   23     6  foreignResult  Ljava/lang/Object;
           25   26     6  foreignResult  Ljava/lang/Object;
           29   30     6  foreignResult  Ljava/lang/Object;
      Exception table:
        from    to  target  type
          16    17      18  Class com.oracle.truffle.api.interop.UnknownIdentifierException
          16    17      18  Class com.oracle.truffle.api.interop.UnsupportedMessageException
          24    25      26  Class com.oracle.truffle.api.interop.UnknownIdentifierException
          24    25      26  Class com.oracle.truffle.api.interop.UnsupportedMessageException
    MethodParameters:
         Name  Flags
      thisObj  
      root     

  private java.lang.Object maybeGetFromPrototype(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // java.lang.Object key
         0: .line 988
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getContextOptions:()Lcom/oracle/truffle/js/runtime/JSContextOptions;
            invokevirtual com.oracle.truffle.js.runtime.JSContextOptions.hasForeignObjectPrototype:()Z
            ifeq 6
         1: .line 989
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.foreignObjectPrototypeNode:Lcom/oracle/truffle/js/nodes/interop/ForeignObjectPrototypeNode;
            ifnonnull 4
         2: .line 990
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         3: .line 991
            aload 0 /* this */
            aload 0 /* this */
            invokestatic com.oracle.truffle.js.nodes.interop.ForeignObjectPrototypeNode.create:()Lcom/oracle/truffle/js/nodes/interop/ForeignObjectPrototypeNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.insert:(Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/api/nodes/Node;
            checkcast com.oracle.truffle.js.nodes.interop.ForeignObjectPrototypeNode
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.foreignObjectPrototypeNode:Lcom/oracle/truffle/js/nodes/interop/ForeignObjectPrototypeNode;
         4: .line 993
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.foreignObjectPrototypeNode:Lcom/oracle/truffle/js/nodes/interop/ForeignObjectPrototypeNode;
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.interop.ForeignObjectPrototypeNode.executeDynamicObject:(Ljava/lang/Object;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 3 /* prototype */
        start local 3 // com.oracle.truffle.api.object.DynamicObject prototype
         5: .line 994
            aload 0 /* this */
            aload 3 /* prototype */
            aload 2 /* key */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getFromJSObject:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 3 // com.oracle.truffle.api.object.DynamicObject prototype
         6: .line 996
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.js.runtime.objects.Undefined.instance:Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            areturn
        end local 2 // java.lang.Object key
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0       this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0    7     1    thisObj  Ljava/lang/Object;
            0    7     2        key  Ljava/lang/Object;
            5    6     3  prototype  Lcom/oracle/truffle/api/object/DynamicObject;
    MethodParameters:
         Name  Flags
      thisObj  
      key      

  private java.lang.Object getFromJSObject(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object object
        start local 2 // java.lang.Object key
         0: .line 1000
            getstatic com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.$assertionsDisabled:Z
            ifne 1
            aload 1 /* object */
            invokestatic com.oracle.truffle.js.runtime.objects.JSObject.isJSObject:(Ljava/lang/Object;)Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1001
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getFromJSObjectNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            ifnonnull 4
         2: .line 1002
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         3: .line 1003
            aload 0 /* this */
            aload 0 /* this */
            aload 2 /* key */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokestatic com.oracle.truffle.js.nodes.access.PropertyGetNode.create:(Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.insert:(Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/api/nodes/Node;
            checkcast com.oracle.truffle.js.nodes.access.PropertyGetNode
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getFromJSObjectNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
         4: .line 1005
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.$assertionsDisabled:Z
            ifne 5
            aload 2 /* key */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getFromJSObjectNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode.getKey:()Ljava/lang/Object;
            invokevirtual java.lang.Object.equals:(Ljava/lang/Object;)Z
            ifne 5
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         5: .line 1006
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getFromJSObjectNode:Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            aload 1 /* object */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode.getValue:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 2 // java.lang.Object key
        end local 1 // java.lang.Object object
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0    6     1  object  Ljava/lang/Object;
            0    6     2     key  Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      object  
      key     

  private java.lang.Object tryGetters(java.lang.Object, com.oracle.truffle.js.nodes.access.PropertyGetNode);
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
         0: .line 1011
            getstatic com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.$assertionsDisabled:Z
            ifne 1
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.isOptionNashornCompatibilityMode:()Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1012
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.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.js.runtime.JSRealm.getEnv:()Lcom/oracle/truffle/api/TruffleLanguage$Env;
            astore 3 /* env */
        start local 3 // com.oracle.truffle.api.TruffleLanguage$Env env
         2: .line 1013
            aload 3 /* env */
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$Env.isHostObject:(Ljava/lang/Object;)Z
            ifeq 9
         3: .line 1014
            aload 0 /* this */
            aload 1 /* thisObj */
            ldc "get"
            aload 2 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.tryInvokeGetter:(Ljava/lang/Object;Ljava/lang/String;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
            astore 4 /* result */
        start local 4 // java.lang.Object result
         4: .line 1015
            aload 4 /* result */
            ifnull 6
         5: .line 1016
            aload 4 /* result */
            areturn
         6: .line 1018
      StackMap locals: com.oracle.truffle.api.TruffleLanguage$Env java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 1 /* thisObj */
            ldc "is"
            aload 2 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.tryInvokeGetter:(Ljava/lang/Object;Ljava/lang/String;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
            astore 4 /* result */
         7: .line 1020
            aload 4 /* result */
            ifnull 9
         8: .line 1021
            aload 4 /* result */
            areturn
        end local 4 // java.lang.Object result
         9: .line 1024
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // com.oracle.truffle.api.TruffleLanguage$Env env
        end local 2 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   10     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0   10     1  thisObj  Ljava/lang/Object;
            0   10     2     root  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            2   10     3      env  Lcom/oracle/truffle/api/TruffleLanguage$Env;
            4    9     4   result  Ljava/lang/Object;
    MethodParameters:
         Name  Flags
      thisObj  
      root     

  private java.lang.Object tryInvokeGetter(java.lang.Object, java.lang.String, com.oracle.truffle.js.nodes.access.PropertyGetNode);
    descriptor: (Ljava/lang/Object;Ljava/lang/String;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // java.lang.String prefix
        start local 3 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
         0: .line 1028
            getstatic com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.$assertionsDisabled:Z
            ifne 1
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.isOptionNashornCompatibilityMode:()Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1029
      StackMap locals:
      StackMap stack:
            aload 3 /* root */
            aload 2 /* prefix */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode.getAccessorKey:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* getterKey */
        start local 4 // java.lang.String getterKey
         2: .line 1030
            aload 4 /* getterKey */
            ifnonnull 4
         3: .line 1031
            aconst_null
            areturn
         4: .line 1033
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getterInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            ifnonnull 7
         5: .line 1034
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         6: .line 1035
            aload 0 /* this */
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.interop.InteropLibrary.getFactory:()Lcom/oracle/truffle/api/library/LibraryFactory;
            iconst_5
            invokevirtual com.oracle.truffle.api.library.LibraryFactory.createDispatched:(I)Lcom/oracle/truffle/api/library/Library;
            checkcast com.oracle.truffle.api.interop.InteropLibrary
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.insert:(Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/api/nodes/Node;
            checkcast com.oracle.truffle.api.interop.InteropLibrary
            putfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getterInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
         7: .line 1037
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getterInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            aload 4 /* getterKey */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberInvocable:(Ljava/lang/Object;Ljava/lang/String;)Z
            ifne 9
         8: .line 1038
            aconst_null
            areturn
         9: .line 1041
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getterInterop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            aload 4 /* getterKey */
            getstatic com.oracle.truffle.js.runtime.JSArguments.EMPTY_ARGUMENTS_ARRAY:[Ljava/lang/Object;
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.invokeMember:(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
        10: areturn
        11: .line 1042
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.InteropException
            pop
        12: .line 1043
            aconst_null
            areturn
        end local 4 // java.lang.String getterKey
        end local 3 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
        end local 2 // java.lang.String prefix
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   13     0       this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0   13     1    thisObj  Ljava/lang/Object;
            0   13     2     prefix  Ljava/lang/String;
            0   13     3       root  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            2   13     4  getterKey  Ljava/lang/String;
      Exception table:
        from    to  target  type
           9    10      11  Class com.oracle.truffle.api.interop.UnknownIdentifierException
           9    10      11  Class com.oracle.truffle.api.interop.UnsupportedMessageException
           9    10      11  Class com.oracle.truffle.api.interop.UnsupportedTypeException
           9    10      11  Class com.oracle.truffle.api.interop.ArityException
    MethodParameters:
         Name  Flags
      thisObj  
      prefix   
      root     

  private java.lang.Object getSize(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object thisObj
         0: .line 1049
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.getArraySize:(Ljava/lang/Object;)J
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.longToIntOrDouble:(J)Ljava/lang/Number;
         1: areturn
         2: .line 1050
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.interop.UnsupportedMessageException
            astore 2 /* e */
        start local 2 // com.oracle.truffle.api.interop.UnsupportedMessageException e
         3: .line 1051
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.errorBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
         4: .line 1052
            aload 1 /* thisObj */
            aload 2 /* e */
            ldc "getArraySize"
            aload 0 /* this */
            invokestatic com.oracle.truffle.js.runtime.Errors.createTypeErrorInteropException:(Ljava/lang/Object;Lcom/oracle/truffle/api/interop/InteropException;Ljava/lang/String;Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/js/runtime/JSException;
            athrow
        end local 2 // com.oracle.truffle.api.interop.UnsupportedMessageException e
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0    5     1  thisObj  Ljava/lang/Object;
            3    5     2        e  Lcom/oracle/truffle/api/interop/UnsupportedMessageException;
      Exception table:
        from    to  target  type
           0     1       2  Class com.oracle.truffle.api.interop.UnsupportedMessageException
    MethodParameters:
         Name  Flags
      thisObj  

  protected java.lang.Object getValue(java.lang.Object, java.lang.Object, java.lang.Object, com.oracle.truffle.js.nodes.access.PropertyGetNode, boolean);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;Z)Ljava/lang/Object;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=6, args_size=6
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // java.lang.Object receiver
        start local 3 // java.lang.Object defaultValue
        start local 4 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
        start local 5 // boolean guard
         0: .line 1058
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isMethod:Z
            ifeq 2
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isGlobal:Z
            ifne 2
         1: .line 1059
            aload 1 /* thisObj */
            areturn
         2: .line 1061
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.isLength:Z
            ifeq 4
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.interop:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.hasArrayElements:(Ljava/lang/Object;)Z
            ifeq 4
         3: .line 1062
            aload 0 /* this */
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.getSize:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
         4: .line 1064
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 4 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode.foreignGet:(Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;)Ljava/lang/Object;
            areturn
        end local 5 // boolean guard
        end local 4 // com.oracle.truffle.js.nodes.access.PropertyGetNode root
        end local 3 // java.lang.Object defaultValue
        end local 2 // java.lang.Object receiver
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    5     0          this  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode$ForeignPropertyGetNode;
            0    5     1       thisObj  Ljava/lang/Object;
            0    5     2      receiver  Ljava/lang/Object;
            0    5     3  defaultValue  Ljava/lang/Object;
            0    5     4          root  Lcom/oracle/truffle/js/nodes/access/PropertyGetNode;
            0    5     5         guard  Z
    MethodParameters:
              Name  Flags
      thisObj       
      receiver      
      defaultValue  
      root          
      guard         
}
SourceFile: "PropertyGetNode.java"
NestHost: com.oracle.truffle.js.nodes.access.PropertyGetNode
InnerClasses:
  public abstract CompilationFinal = com.oracle.truffle.api.CompilerDirectives$CompilationFinal of com.oracle.truffle.api.CompilerDirectives
  public final Env = com.oracle.truffle.api.TruffleLanguage$Env of com.oracle.truffle.api.TruffleLanguage
  public abstract Child = com.oracle.truffle.api.nodes.Node$Child of com.oracle.truffle.api.nodes.Node
  protected final ForeignLanguageCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ForeignLanguageCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected abstract ReceiverCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  public final ForeignPropertyGetNode = com.oracle.truffle.js.nodes.access.PropertyGetNode$ForeignPropertyGetNode of com.oracle.truffle.js.nodes.access.PropertyGetNode
  public abstract LinkedPropertyGetNode = com.oracle.truffle.js.nodes.access.PropertyGetNode$LinkedPropertyGetNode of com.oracle.truffle.js.nodes.access.PropertyGetNode