public abstract class com.oracle.truffle.js.nodes.access.PropertyCacheNode<T extends com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode<T>> extends com.oracle.truffle.js.nodes.JavaScriptBaseNode
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.truffle.js.nodes.access.PropertyCacheNode
  super_class: com.oracle.truffle.js.nodes.JavaScriptBaseNode
{
  protected final java.lang.Object key;
    descriptor: Ljava/lang/Object;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final com.oracle.truffle.js.runtime.JSContext context;
    descriptor: Lcom/oracle/truffle/js/runtime/JSContext;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected T cacheNode;
    descriptor: Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Signature: TT;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private com.oracle.truffle.api.Assumption invalidationAssumption;
    descriptor: Lcom/oracle/truffle/api/Assumption;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  private static final com.oracle.truffle.js.runtime.util.DebugCounter polymorphicCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter megamorphicCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter cacheAssumptionInitializedCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter cacheAssumptionInvalidatedCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter propertyAssumptionCheckFailedCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter constantObjectCheckFailedCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter traversePrototypeShapeCheckCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final com.oracle.truffle.js.runtime.util.DebugCounter traversePrototypeChainShapeCheckCount;
    descriptor: Lcom/oracle/truffle/js/runtime/util/DebugCounter;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  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 94
            ldc Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode;
            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.PropertyCacheNode.$assertionsDisabled:Z
         3: .line 1606
            ldc "Polymorphic property cache count"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.polymorphicCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
         4: .line 1607
            ldc "Megamorphic property cache count"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.megamorphicCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
         5: .line 1608
            ldc "Property cache assumptions initialized"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheAssumptionInitializedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
         6: .line 1609
            ldc "Property cache assumptions invalidated"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheAssumptionInvalidatedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
         7: .line 1610
            ldc "Property assumption checks failed"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.propertyAssumptionCheckFailedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
         8: .line 1611
            ldc "Constant object checks failed"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.constantObjectCheckFailedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
         9: .line 1612
            ldc "TraversePrototypeShapeCheckNode count"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.traversePrototypeShapeCheckCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
        10: .line 1613
            ldc "TraversePrototypeChainShapeCheckNode count"
            invokestatic com.oracle.truffle.js.runtime.util.DebugCounter.create:(Ljava/lang/String;)Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            putstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.traversePrototypeChainShapeCheckCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.lang.Object, com.oracle.truffle.js.runtime.JSContext);
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // java.lang.Object key
        start local 2 // com.oracle.truffle.js.runtime.JSContext context
         0: .line 1080
            aload 0 /* this */
            invokespecial com.oracle.truffle.js.nodes.JavaScriptBaseNode.<init>:()V
         1: .line 1081
            aload 0 /* this */
            aload 1 /* key */
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
         2: .line 1082
            aload 0 /* this */
            aload 2 /* context */
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
         3: .line 1083
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 4
            aload 1 /* key */
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.isPropertyKey:(Ljava/lang/Object;)Z
            ifne 4
            aload 1 /* key */
            instanceof com.oracle.truffle.api.object.HiddenKey
            ifne 4
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         4: .line 1084
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode java.lang.Object com.oracle.truffle.js.runtime.JSContext
      StackMap stack:
            return
        end local 2 // com.oracle.truffle.js.runtime.JSContext context
        end local 1 // java.lang.Object key
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    5     1      key  Ljava/lang/Object;
            0    5     2  context  Lcom/oracle/truffle/js/runtime/JSContext;
    MethodParameters:
         Name  Flags
      key      
      context  

  public final java.lang.Object getKey();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1087
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            areturn
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;

  protected abstract T createGenericPropertyNode();
    descriptor: ()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: ()TT;

  protected abstract T createCachedPropertyNode(com.oracle.truffle.api.object.Property, , int, , );
    descriptor: (Lcom/oracle/truffle/api/object/Property;Ljava/lang/Object;ILjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: (Lcom/oracle/truffle/api/object/Property;Ljava/lang/Object;ILjava/lang/Object;TT;)TT;
    MethodParameters:
             Name  Flags
      entry        
      thisObj      
      depth        
      value        
      currentHead  

  protected abstract T createUndefinedPropertyNode(, , int, );
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)TT;
    MethodParameters:
         Name  Flags
      thisObj  
      store    
      depth    
      value    

  protected abstract T createJavaPropertyNodeMaybe(, );
    descriptor: (Ljava/lang/Object;I)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: (Ljava/lang/Object;I)TT;
    MethodParameters:
         Name  Flags
      thisObj  
      depth    

  protected abstract T createTruffleObjectPropertyNode();
    descriptor: ()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: ()TT;

  protected T specialize();
    descriptor: (Ljava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // java.lang.Object thisObj
         0: .line 1102
            aload 0 /* this */
            aload 1 /* thisObj */
            aconst_null
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.specialize:(Ljava/lang/Object;Ljava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            areturn
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    1     1  thisObj  Ljava/lang/Object;
    Signature: (Ljava/lang/Object;)TT;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
         Name  Flags
      thisObj  

  protected T specialize(, );
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=11, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // java.lang.Object value
         0: .line 1108
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getLock:()Ljava/util/concurrent/locks/Lock;
            astore 4 /* lock */
        start local 4 // java.util.concurrent.locks.Lock lock
         1: .line 1109
            aload 4 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.lock:()V
         2: .line 1111
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 5 /* currentHead */
        start local 5 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
         3: .line 1113
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode java.lang.Object java.lang.Object top java.util.concurrent.locks.Lock com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 4
            aload 5 /* currentHead */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            if_acmpeq 4
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         4: .line 1114
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 6 /* cachedCount */
        start local 6 // int cachedCount
         5: .line 1115
            iconst_0
            istore 7 /* invalid */
        start local 7 // boolean invalid
         6: .line 1116
            iconst_0
            istore 8 /* generic */
        start local 8 // boolean generic
         7: .line 1117
            aconst_null
            astore 3 /* res */
        start local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode res
         8: .line 1119
            aload 5 /* currentHead */
            astore 9 /* c */
        start local 9 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode c
         9: goto 26
        10: .line 1120
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode java.lang.Object java.lang.Object com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode java.util.concurrent.locks.Lock com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode int int int com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 9 /* c */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.isGeneric:()Z
            ifeq 14
        11: .line 1121
            iconst_1
            istore 8 /* generic */
        12: .line 1122
            aload 9 /* c */
            astore 3 /* res */
        13: .line 1123
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 27
            aload 9 /* c */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.next:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            ifnull 27
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        14: .line 1126
      StackMap locals:
      StackMap stack:
            iinc 6 /* cachedCount */ 1
        15: .line 1127
            aload 9 /* c */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.isValid:()Z
            ifne 18
        16: .line 1128
            iconst_1
            istore 7 /* invalid */
        17: .line 1129
            goto 27
        18: .line 1131
      StackMap locals:
      StackMap stack:
            aload 9 /* c */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.sweep:()Z
            pop
        19: .line 1132
            aload 3 /* res */
            ifnonnull 22
            aload 9 /* c */
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.accepts:(Ljava/lang/Object;)Z
            ifeq 22
            aload 9 /* c */
            aload 2 /* value */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.acceptsValue:(Ljava/lang/Object;)Z
            ifeq 22
        20: .line 1133
            aload 9 /* c */
            astore 3 /* res */
        21: .line 1135
            goto 25
      StackMap locals:
      StackMap stack:
        22: aload 0 /* this */
            aload 9 /* c */
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.isUnexpectedConstantObject:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Ljava/lang/Object;)Z
            ifeq 25
        23: .line 1136
            iconst_1
            istore 7 /* invalid */
        24: .line 1137
            goto 27
        25: .line 1119
      StackMap locals:
      StackMap stack:
            aload 9 /* c */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.next:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 9 /* c */
      StackMap locals:
      StackMap stack:
        26: aload 9 /* c */
            ifnonnull 10
        end local 9 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode c
        27: .line 1142
      StackMap locals:
      StackMap stack:
            iload 7 /* invalid */
            ifeq 33
        28: .line 1143
            aload 0 /* this */
            aload 5 /* currentHead */
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.checkForUnstableAssumption:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Ljava/lang/Object;)V
        29: .line 1144
            aload 0 /* this */
            aload 5 /* currentHead */
            aload 5 /* currentHead */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.filterValid:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.rewriteCached:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 5 /* currentHead */
        30: .line 1145
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.traceAssumptionInvalidated:()V
        31: .line 1146
            aconst_null
            astore 3 /* res */
        32: .line 1147
            goto 41
        33: .line 1149
      StackMap locals:
      StackMap stack:
            aload 3 /* res */
            ifnonnull 41
        34: .line 1150
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 35
            iload 8 /* generic */
            ifeq 35
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        35: .line 1151
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 5 /* currentHead */
            iload 6 /* cachedCount */
            aload 2 /* value */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createSpecialization:(Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;ILjava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 9 /* newNode */
        start local 9 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode newNode
        36: .line 1152
            aload 9 /* newNode */
            ifnonnull 39
        37: .line 1153
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 5 /* currentHead */
        38: .line 1154
            goto 41
        39: .line 1156
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 9 /* newNode */
            astore 3 /* res */
        40: .line 1157
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 41
            aload 3 /* res */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.getParent:()Lcom/oracle/truffle/api/nodes/Node;
            ifnonnull 41
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        end local 9 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode newNode
        end local 8 // boolean generic
        end local 7 // boolean invalid
        end local 6 // int cachedCount
        41: .line 1159
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode java.lang.Object java.lang.Object com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode java.util.concurrent.locks.Lock com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 3 /* res */
            ifnull 3
        end local 5 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        42: .line 1160
            goto 46
        end local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode res
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode java.lang.Object java.lang.Object top java.util.concurrent.locks.Lock
      StackMap stack: java.lang.Throwable
        43: astore 10
        44: .line 1161
            aload 4 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        45: .line 1162
            aload 10
            athrow
        start local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode res
        46: .line 1161
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode java.lang.Object java.lang.Object com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode java.util.concurrent.locks.Lock
      StackMap stack:
            aload 4 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        47: .line 1163
            aload 3 /* res */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.isGeneric:()Z
            ifne 49
            aload 3 /* res */
            aload 1 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.accepts:(Ljava/lang/Object;)Z
            ifeq 48
            aload 3 /* res */
            aload 2 /* value */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.acceptsValue:(Ljava/lang/Object;)Z
            ifne 49
        48: .line 1164
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.js.runtime.Errors.shouldNotReachHere:()Ljava/lang/RuntimeException;
            athrow
        49: .line 1166
      StackMap locals:
      StackMap stack:
            aload 3 /* res */
            areturn
        end local 4 // java.util.concurrent.locks.Lock lock
        end local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode res
        end local 2 // java.lang.Object value
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   50     0         this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0   50     1      thisObj  Ljava/lang/Object;
            0   50     2        value  Ljava/lang/Object;
            8   43     3          res  TT;
           46   50     3          res  TT;
            1   50     4         lock  Ljava/util/concurrent/locks/Lock;
            3   42     5  currentHead  TT;
            5   41     6  cachedCount  I
            6   41     7      invalid  Z
            7   41     8      generic  Z
            9   27     9            c  TT;
           36   41     9      newNode  TT;
      Exception table:
        from    to  target  type
           2    43      43  any
    Signature: (Ljava/lang/Object;Ljava/lang/Object;)TT;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
         Name  Flags
      thisObj  
      value    

  protected T createSpecialization(, T, int, );
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;ILjava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=10, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        start local 3 // int cachedCount
        start local 4 // java.lang.Object value
         0: .line 1170
            iconst_0
            istore 5 /* depth */
        start local 5 // int depth
         1: .line 1171
            aconst_null
            astore 6 /* specialized */
        start local 6 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode specialized
         2: .line 1173
            aconst_null
            astore 7 /* store */
        start local 7 // com.oracle.truffle.api.object.DynamicObject store
         3: .line 1174
            aload 1 /* thisObj */
            invokestatic com.oracle.truffle.js.runtime.objects.JSDynamicObject.isJSDynamicObject:(Ljava/lang/Object;)Z
            ifeq 8
         4: .line 1175
            aload 1 /* thisObj */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSAdapter.isJSAdapter:(Ljava/lang/Object;)Z
            ifne 5
            aload 1 /* thisObj */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSProxy.isJSProxy:(Ljava/lang/Object;)Z
            ifeq 6
      StackMap locals: int com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode com.oracle.truffle.api.object.DynamicObject
      StackMap stack:
         5: aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            instanceof com.oracle.truffle.api.object.HiddenKey
            ifeq 42
         6: .line 1176
      StackMap locals:
      StackMap stack:
            aload 1 /* thisObj */
            checkcast com.oracle.truffle.api.object.DynamicObject
            astore 7 /* store */
         7: .line 1178
            goto 42
      StackMap locals:
      StackMap stack:
         8: aload 1 /* thisObj */
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.isForeignObject:(Ljava/lang/Object;)Z
            ifeq 12
         9: .line 1179
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 10
            aload 1 /* thisObj */
            invokestatic com.oracle.truffle.js.runtime.objects.JSDynamicObject.isJSDynamicObject:(Ljava/lang/Object;)Z
            ifeq 10
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        10: .line 1180
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createTruffleObjectPropertyNode:()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 6 /* specialized */
        11: .line 1181
            goto 42
        12: .line 1182
      StackMap locals:
      StackMap stack:
            aload 1 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.wrapPrimitive:(Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 7 /* store */
        13: .line 1185
            goto 42
        14: .line 1187
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.api.object.DynamicObjectLibrary.getUncached:()Lcom/oracle/truffle/api/object/DynamicObjectLibrary;
            aload 7 /* store */
            invokevirtual com.oracle.truffle.api.object.DynamicObjectLibrary.updateShape:(Lcom/oracle/truffle/api/object/DynamicObject;)Z
            ifeq 16
        15: .line 1188
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.retryCache:()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            areturn
        16: .line 1191
      StackMap locals:
      StackMap stack:
            aload 7 /* store */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            astore 8 /* cacheShape */
        start local 8 // com.oracle.truffle.api.object.Shape cacheShape
        17: .line 1193
            aload 7 /* store */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSDictionary.isJSDictionaryObject:(Lcom/oracle/truffle/api/object/DynamicObject;)Z
            ifeq 19
        18: .line 1195
            aload 0 /* this */
            aload 2 /* currentHead */
            iload 3 /* cachedCount */
            ldc "dictionary object"
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.rewriteToGeneric:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;ILjava/lang/String;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            areturn
        19: .line 1198
      StackMap locals: com.oracle.truffle.api.object.Shape
      StackMap stack:
            iload 3 /* cachedCount */
            ifle 29
        20: .line 1200
            aload 7 /* store */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            invokevirtual com.oracle.truffle.api.object.Shape.getMutex:()Ljava/lang/Object;
            dup
            astore 9
            monitorenter
        21: .line 1201
            aload 8 /* cacheShape */
            aload 2 /* currentHead */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.tryMergeShapes:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Z
            ifeq 25
        22: .line 1202
            invokestatic com.oracle.truffle.api.object.DynamicObjectLibrary.getUncached:()Lcom/oracle/truffle/api/object/DynamicObjectLibrary;
            aload 7 /* store */
            invokevirtual com.oracle.truffle.api.object.DynamicObjectLibrary.updateShape:(Lcom/oracle/truffle/api/object/DynamicObject;)Z
            pop
        23: .line 1203
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.retryCache:()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            aload 9
            monitorexit
        24: areturn
        25: .line 1200
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 9
            monitorexit
        26: goto 29
      StackMap locals:
      StackMap stack: java.lang.Throwable
        27: aload 9
            monitorexit
        28: athrow
        29: .line 1208
      StackMap locals:
      StackMap stack:
            aload 8 /* cacheShape */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            invokevirtual com.oracle.truffle.api.object.Shape.getProperty:(Ljava/lang/Object;)Lcom/oracle/truffle/api/object/Property;
            astore 9 /* property */
        start local 9 // com.oracle.truffle.api.object.Property property
        30: .line 1209
            aload 9 /* property */
            ifnull 34
        31: .line 1210
            aload 0 /* this */
            aload 9 /* property */
            aload 1 /* thisObj */
            iload 5 /* depth */
            aload 4 /* value */
            aload 2 /* currentHead */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createCachedPropertyNode:(Lcom/oracle/truffle/api/object/Property;Ljava/lang/Object;ILjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 6 /* specialized */
        32: .line 1211
            aload 6 /* specialized */
            ifnonnull 43
        33: .line 1212
            aconst_null
            areturn
        34: .line 1215
      StackMap locals: com.oracle.truffle.api.object.Property
      StackMap stack:
            aload 7 /* store */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.alwaysUseStore:(Lcom/oracle/truffle/api/object/DynamicObject;Ljava/lang/Object;)Z
            ifeq 37
        35: .line 1216
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 7 /* store */
            iload 5 /* depth */
            aload 4 /* value */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createUndefinedPropertyNode:(Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 6 /* specialized */
        36: .line 1217
            goto 43
        37: .line 1218
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.isOwnProperty:()Z
            ifeq 39
        38: .line 1219
            goto 43
        39: .line 1222
      StackMap locals:
      StackMap stack:
            aload 7 /* store */
            invokestatic com.oracle.truffle.js.runtime.objects.JSObject.getPrototype:(Lcom/oracle/truffle/api/object/DynamicObject;)Lcom/oracle/truffle/api/object/DynamicObject;
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.toJavaNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.object.DynamicObject
            astore 7 /* store */
        40: .line 1223
            aload 7 /* store */
            ifnull 42
        41: .line 1224
            iinc 5 /* depth */ 1
        end local 9 // com.oracle.truffle.api.object.Property property
        end local 8 // com.oracle.truffle.api.object.Shape cacheShape
        42: .line 1185
      StackMap locals:
      StackMap stack:
            aload 7 /* store */
            ifnonnull 14
        43: .line 1228
      StackMap locals:
      StackMap stack:
            iload 3 /* cachedCount */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getPropertyCacheLimit:()I
            if_icmpge 44
            aload 6 /* specialized */
            ifnull 45
            aload 6 /* specialized */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.isGeneric:()Z
            ifeq 45
        44: .line 1229
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* currentHead */
            iload 3 /* cachedCount */
            ldc "cache limit reached"
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.rewriteToGeneric:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;ILjava/lang/String;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            areturn
        45: .line 1232
      StackMap locals:
      StackMap stack:
            aload 6 /* specialized */
            ifnonnull 47
        46: .line 1233
            aload 0 /* this */
            aload 1 /* thisObj */
            aload 1 /* thisObj */
            iload 5 /* depth */
            aload 4 /* value */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createUndefinedPropertyNode:(Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 6 /* specialized */
        47: .line 1236
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 6 /* specialized */
            aload 2 /* currentHead */
            iload 3 /* cachedCount */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.insertCached:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;I)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            areturn
        end local 7 // com.oracle.truffle.api.object.DynamicObject store
        end local 6 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode specialized
        end local 5 // int depth
        end local 4 // java.lang.Object value
        end local 3 // int cachedCount
        end local 2 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   48     0         this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0   48     1      thisObj  Ljava/lang/Object;
            0   48     2  currentHead  TT;
            0   48     3  cachedCount  I
            0   48     4        value  Ljava/lang/Object;
            1   48     5        depth  I
            2   48     6  specialized  TT;
            3   48     7        store  Lcom/oracle/truffle/api/object/DynamicObject;
           17   42     8   cacheShape  Lcom/oracle/truffle/api/object/Shape;
           30   42     9     property  Lcom/oracle/truffle/api/object/Property;
      Exception table:
        from    to  target  type
          21    24      27  any
          25    26      27  any
          27    28      27  any
    Signature: (Ljava/lang/Object;TT;ILjava/lang/Object;)TT;
    MethodParameters:
             Name  Flags
      thisObj      
      currentHead  
      cachedCount  
      value        

  protected static boolean alwaysUseStore(com.oracle.truffle.api.object.DynamicObject, java.lang.Object);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;Ljava/lang/Object;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.api.object.DynamicObject store
        start local 1 // java.lang.Object key
         0: .line 1240
            aload 0 /* store */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSProxy.isJSProxy:(Ljava/lang/Object;)Z
            ifne 2
            aload 0 /* store */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSArrayBufferView.isJSArrayBufferView:(Ljava/lang/Object;)Z
            ifeq 1
            aload 1 /* key */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.isNonIntegerIndex:(Ljava/lang/Object;)Z
            ifne 2
      StackMap locals:
      StackMap stack:
         1: aload 1 /* key */
            instanceof com.oracle.truffle.api.object.HiddenKey
            ifne 2
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         2: iconst_1
            ireturn
        end local 1 // java.lang.Object key
        end local 0 // com.oracle.truffle.api.object.DynamicObject store
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0  store  Lcom/oracle/truffle/api/object/DynamicObject;
            0    3     1    key  Ljava/lang/Object;
    MethodParameters:
       Name  Flags
      store  
      key    

  protected final void deoptimize();
    descriptor: ()V
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1244
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
            ifnonnull 3
         1: .line 1245
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         2: .line 1246
            goto 7
         3: .line 1247
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.api.CompilerDirectives.inCompiledCode:()Z
            ifeq 7
         4: .line 1249
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.check:()V
         5: .line 1250
            goto 7
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.nodes.InvalidAssumptionException
         6: pop
         7: .line 1258
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
      Exception table:
        from    to  target  type
           4     5       6  Class com.oracle.truffle.api.nodes.InvalidAssumptionException

  protected T retryCache();
    descriptor: ()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1261
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
            ifnonnull 4
         1: .line 1262
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.Truffle.getRuntime:()Lcom/oracle/truffle/api/TruffleRuntime;
            ldc "PropertyCacheNode"
            invokeinterface com.oracle.truffle.api.TruffleRuntime.createAssumption:(Ljava/lang/String;)Lcom/oracle/truffle/api/Assumption;
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
         2: .line 1263
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheAssumptionInitializedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         3: .line 1265
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.reportPolymorphicSpecialize:()V
         4: .line 1267
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
    Signature: ()TT;

  protected void invalidateCache();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1271
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
            ifnull 4
         1: .line 1272
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
            ldc "PropertyCacheNode invalidation"
            invokeinterface com.oracle.truffle.api.Assumption.invalidate:(Ljava/lang/String;)V
         2: .line 1273
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.Truffle.getRuntime:()Lcom/oracle/truffle/api/TruffleRuntime;
            ldc "PropertyCacheNode"
            invokeinterface com.oracle.truffle.api.TruffleRuntime.createAssumption:(Ljava/lang/String;)Lcom/oracle/truffle/api/Assumption;
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidationAssumption:Lcom/oracle/truffle/api/Assumption;
         3: .line 1274
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheAssumptionInvalidatedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         4: .line 1276
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;

  protected T insertCached(T, T, );
    descriptor: (Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;I)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode specialized
        start local 2 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        start local 3 // int cachedCount
         0: .line 1279
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 2 /* currentHead */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            if_acmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1281
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidateCache:()V
         2: .line 1282
            aload 0 /* this */
            aload 1 /* specialized */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.insert:(Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/api/nodes/Node;
            pop
         3: .line 1283
            aload 1 /* specialized */
            aload 2 /* currentHead */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.setNext:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)V
         4: .line 1284
            aload 0 /* this */
            aload 1 /* specialized */
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
         5: .line 1286
            iload 3 /* cachedCount */
            ifle 7
         6: .line 1287
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.polymorphicCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         7: .line 1289
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* specialized */
            iload 3 /* cachedCount */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.traceRewriteInsert:(Lcom/oracle/truffle/api/nodes/Node;I)V
         8: .line 1290
            getstatic com.oracle.truffle.js.runtime.JSConfig.TracePolymorphicPropertyAccess:Z
            ifeq 10
            iload 3 /* cachedCount */
            ifle 10
         9: .line 1291
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "POLYMORPHIC PROPERTY ACCESS key='%s' %s\n%s\n---\n"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aastore
            dup
            iconst_1
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getEncapsulatingSourceSection:()Lcom/oracle/truffle/api/source/SourceSection;
            aastore
            dup
            iconst_2
            aload 1 /* specialized */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.debugString:()Ljava/lang/String;
            aastore
            invokevirtual java.io.PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
            pop
        10: .line 1293
      StackMap locals:
      StackMap stack:
            aload 1 /* specialized */
            areturn
        end local 3 // int cachedCount
        end local 2 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode specialized
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0         this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0   11     1  specialized  TT;
            0   11     2  currentHead  TT;
            0   11     3  cachedCount  I
    Signature: (TT;TT;I)TT;
    MethodParameters:
             Name  Flags
      specialized  
      currentHead  
      cachedCount  

  protected T rewriteToGeneric(T, int, java.lang.String);
    descriptor: (Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;ILjava/lang/String;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        start local 2 // int cachedCount
        start local 3 // java.lang.String reason
         0: .line 1297
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 1 /* currentHead */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            if_acmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1299
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createGenericPropertyNode:()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 4 /* newNode */
        start local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode newNode
         2: .line 1300
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidateCache:()V
         3: .line 1301
            aload 0 /* this */
            aload 4 /* newNode */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.insert:(Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/api/nodes/Node;
            pop
         4: .line 1302
            aload 0 /* this */
            aload 4 /* newNode */
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
         5: .line 1304
            iload 2 /* cachedCount */
            ifle 8
            iload 2 /* cachedCount */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getPropertyCacheLimit:()I
            if_icmplt 8
         6: .line 1305
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.megamorphicCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         7: .line 1306
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.reportPolymorphicSpecialize:()V
         8: .line 1308
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 0 /* this */
            aload 4 /* newNode */
            aload 3 /* reason */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.traceRewriteMegamorphic:(Lcom/oracle/truffle/api/nodes/Node;Ljava/lang/String;)V
         9: .line 1312
            aload 4 /* newNode */
            areturn
        end local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode newNode
        end local 3 // java.lang.String reason
        end local 2 // int cachedCount
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   10     0         this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0   10     1  currentHead  TT;
            0   10     2  cachedCount  I
            0   10     3       reason  Ljava/lang/String;
            2   10     4      newNode  TT;
    Signature: (TT;ILjava/lang/String;)TT;
    MethodParameters:
             Name  Flags
      currentHead  
      cachedCount  
      reason       

  protected T rewriteCached(T, );
    descriptor: (Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        start local 2 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode newHead
         0: .line 1316
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 1 /* currentHead */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            if_acmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1317
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.invalidateCache:()V
         2: .line 1318
            aload 0 /* this */
            aload 2 /* newHead */
            putfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
         3: .line 1319
            aload 2 /* newHead */
            areturn
        end local 2 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode newHead
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode currentHead
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    4     1  currentHead  TT;
            0    4     2      newHead  TT;
    Signature: (TT;TT;)TT;
    MethodParameters:
             Name  Flags
      currentHead  
      newHead      

  protected static <T extends com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode<T>> boolean tryMergeShapes(com.oracle.truffle.api.object.Shape, );
    descriptor: (Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.oracle.truffle.api.object.Shape cacheShape
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode head
         0: .line 1330
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 0 /* cacheShape */
            invokevirtual com.oracle.truffle.api.object.Shape.isValid:()Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1331
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 2 /* result */
        start local 2 // boolean result
         2: .line 1333
            aload 1 /* head */
            astore 3 /* cur */
        start local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cur
         3: goto 15
         4: .line 1334
      StackMap locals: int com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 3 /* cur */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.receiverCheck:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
            ifnonnull 6
         5: .line 1335
            goto 14
         6: .line 1337
      StackMap locals:
      StackMap stack:
            aload 3 /* cur */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.receiverCheck:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode.getShape:()Lcom/oracle/truffle/api/object/Shape;
            astore 4 /* other */
        start local 4 // com.oracle.truffle.api.object.Shape other
         7: .line 1338
            aload 0 /* cacheShape */
            aload 4 /* other */
            if_acmpeq 14
            aload 4 /* other */
            ifnull 14
            aload 4 /* other */
            invokevirtual com.oracle.truffle.api.object.Shape.isValid:()Z
            ifeq 14
         8: .line 1339
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 9
            aload 0 /* cacheShape */
            invokevirtual com.oracle.truffle.api.object.Shape.isValid:()Z
            ifne 9
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         9: .line 1340
      StackMap locals: com.oracle.truffle.api.object.Shape
      StackMap stack:
            iload 2 /* result */
            aload 0 /* cacheShape */
            aload 4 /* other */
            invokevirtual com.oracle.truffle.api.object.Shape.tryMerge:(Lcom/oracle/truffle/api/object/Shape;)Lcom/oracle/truffle/api/object/Shape;
            ifnull 10
            iconst_1
            goto 11
      StackMap locals:
      StackMap stack: int
        10: iconst_0
      StackMap locals: com.oracle.truffle.api.object.Shape com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode int com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode com.oracle.truffle.api.object.Shape
      StackMap stack: int int
        11: ior
            istore 2 /* result */
        12: .line 1341
            aload 0 /* cacheShape */
            invokevirtual com.oracle.truffle.api.object.Shape.isValid:()Z
            ifne 14
        13: .line 1342
            goto 16
        end local 4 // com.oracle.truffle.api.object.Shape other
        14: .line 1333
      StackMap locals:
      StackMap stack:
            aload 3 /* cur */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.next:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 3 /* cur */
      StackMap locals:
      StackMap stack:
        15: aload 3 /* cur */
            ifnonnull 4
        end local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cur
        16: .line 1346
      StackMap locals:
      StackMap stack:
            iload 2 /* result */
            ireturn
        end local 2 // boolean result
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode head
        end local 0 // com.oracle.truffle.api.object.Shape cacheShape
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   17     0  cacheShape  Lcom/oracle/truffle/api/object/Shape;
            0   17     1        head  TT;
            2   17     2      result  Z
            3   16     3         cur  TT;
            7   14     4       other  Lcom/oracle/truffle/api/object/Shape;
    Signature: <T:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode<TT;>;>(Lcom/oracle/truffle/api/object/Shape;TT;)Z
    MethodParameters:
            Name  Flags
      cacheShape  
      head        

  protected void checkForUnstableAssumption(T, );
    descriptor: (Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Ljava/lang/Object;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode head
        start local 2 // java.lang.Object thisObj
         0: .line 1350
            aload 1 /* head */
            astore 3 /* cur */
        start local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cur
         1: goto 14
         2: .line 1351
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 3 /* cur */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.receiverCheck:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
            astore 4 /* check */
        start local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode check
         3: .line 1352
            aload 4 /* check */
            ifnonnull 5
         4: .line 1353
            goto 13
         5: .line 1355
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode
      StackMap stack:
            aload 4 /* check */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode.isUnstable:()Z
            ifeq 8
         6: .line 1356
            aload 0 /* this */
            iconst_0
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.setPropertyAssumptionCheckEnabled:(Z)V
         7: .line 1357
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.propertyAssumptionCheckFailedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         8: .line 1359
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* cur */
            aload 2 /* thisObj */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.isUnexpectedConstantObject:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Ljava/lang/Object;)Z
            ifeq 13
         9: .line 1361
            aload 4 /* check */
            checkcast com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck
            invokeinterface com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck.clearExpectedObject:()V
        10: .line 1362
            aload 0 /* this */
            iconst_0
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.setPropertyAssumptionCheckEnabled:(Z)V
        11: .line 1363
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.constantObjectCheckFailedCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
        12: .line 1364
            aload 0 /* this */
            aload 3 /* cur */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.traceRewriteEvictFinal:(Lcom/oracle/truffle/api/nodes/Node;)V
        end local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode check
        13: .line 1350
      StackMap locals:
      StackMap stack:
            aload 3 /* cur */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.next:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 3 /* cur */
      StackMap locals:
      StackMap stack:
        14: aload 3 /* cur */
            ifnonnull 2
        end local 3 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cur
        15: .line 1367
            return
        end local 2 // java.lang.Object thisObj
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode head
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   16     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0   16     1     head  TT;
            0   16     2  thisObj  Ljava/lang/Object;
            1   15     3      cur  TT;
            3   13     4    check  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
    Signature: (TT;Ljava/lang/Object;)V
    MethodParameters:
         Name  Flags
      head     
      thisObj  

  private boolean isUnexpectedConstantObject(T, );
    descriptor: (Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;Ljava/lang/Object;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cache
        start local 2 // java.lang.Object thisObj
         0: .line 1370
            aload 1 /* cache */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.receiverCheck:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
            instanceof com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck
            ifeq 1
            aload 1 /* cache */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.receiverCheck:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
            checkcast com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck
            invokeinterface com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck.getExpectedObject:()Ljava/lang/Object;
            aload 2 /* thisObj */
            if_acmpeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 2 // java.lang.Object thisObj
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cache
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    2     1    cache  TT;
            0    2     2  thisObj  Ljava/lang/Object;
    Signature: (TT;Ljava/lang/Object;)Z
    MethodParameters:
         Name  Flags
      cache    
      thisObj  

  protected static <T extends com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode<T>> T filterValid();
    descriptor: (Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cache
         0: .line 1374
            aload 0 /* cache */
            ifnonnull 2
         1: .line 1375
            aconst_null
            areturn
         2: .line 1377
      StackMap locals:
      StackMap stack:
            aload 0 /* cache */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.next:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.filterValid:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            astore 1 /* filteredNext */
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode filteredNext
         3: .line 1378
            aload 0 /* cache */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.isValid:()Z
            ifeq 7
         4: .line 1379
            aload 1 /* filteredNext */
            aload 0 /* cache */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.next:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            if_acmpne 6
         5: .line 1380
            aload 0 /* cache */
            areturn
         6: .line 1382
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode
      StackMap stack:
            aload 0 /* cache */
            aload 1 /* filteredNext */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.withNext:(Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            areturn
         7: .line 1385
      StackMap locals:
      StackMap stack:
            aload 1 /* filteredNext */
            areturn
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode filteredNext
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode cache
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    8     0         cache  TT;
            3    8     1  filteredNext  TT;
    Signature: <T:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode<TT;>;>(TT;)TT;
    MethodParameters:
       Name  Flags
      cache  

  protected static final com.oracle.truffle.api.object.DynamicObject wrapPrimitive(java.lang.Object, com.oracle.truffle.js.runtime.JSContext);
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/api/object/DynamicObject;
    flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.lang.Object thisObject
        start local 1 // com.oracle.truffle.js.runtime.JSContext context
         0: .line 1391
            aload 1 /* context */
            aload 0 /* thisObject */
            iconst_0
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.toObjectFromPrimitive:(Lcom/oracle/truffle/js/runtime/JSContext;Ljava/lang/Object;Z)Lcom/oracle/truffle/api/interop/TruffleObject;
            astore 2 /* wrapper */
        start local 2 // java.lang.Object wrapper
         1: .line 1392
            aload 2 /* wrapper */
            invokestatic com.oracle.truffle.js.runtime.objects.JSDynamicObject.isJSDynamicObject:(Ljava/lang/Object;)Z
            ifeq 2
            aload 2 /* wrapper */
            checkcast com.oracle.truffle.js.runtime.objects.JSDynamicObject
            goto 3
      StackMap locals: java.lang.Object
      StackMap stack:
         2: aconst_null
      StackMap locals:
      StackMap stack: com.oracle.truffle.js.runtime.objects.JSDynamicObject
         3: areturn
        end local 2 // java.lang.Object wrapper
        end local 1 // com.oracle.truffle.js.runtime.JSContext context
        end local 0 // java.lang.Object thisObject
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0  thisObject  Ljava/lang/Object;
            0    4     1     context  Lcom/oracle/truffle/js/runtime/JSContext;
            1    4     2     wrapper  Ljava/lang/Object;
    MethodParameters:
            Name  Flags
      thisObject  
      context     

  protected final com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode createShapeCheckNode(com.oracle.truffle.api.object.Shape, com.oracle.truffle.js.runtime.objects.JSDynamicObject, int, boolean, boolean);
    descriptor: (Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;IZZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=5, locals=6, args_size=6
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.object.Shape shape
        start local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        start local 3 // int depth
        start local 4 // boolean isConstantObjectFinal
        start local 5 // boolean isDefine
         0: .line 1396
            iload 3 /* depth */
            ifne 2
         1: .line 1397
            aload 0 /* this */
            aload 1 /* shape */
            aload 2 /* thisObj */
            iload 4 /* isConstantObjectFinal */
            iload 5 /* isDefine */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createShapeCheckNodeDepth0:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;ZZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
            areturn
         2: .line 1398
      StackMap locals:
      StackMap stack:
            iload 3 /* depth */
            iconst_1
            if_icmpne 4
         3: .line 1399
            aload 0 /* this */
            aload 1 /* shape */
            aload 2 /* thisObj */
            iload 3 /* depth */
            iload 4 /* isConstantObjectFinal */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createShapeCheckNodeDepth1:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;IZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
            areturn
         4: .line 1401
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* shape */
            aload 2 /* thisObj */
            iload 3 /* depth */
            iload 4 /* isConstantObjectFinal */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.createShapeCheckNodeDeeper:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;IZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
            areturn
        end local 5 // boolean isDefine
        end local 4 // boolean isConstantObjectFinal
        end local 3 // int depth
        end local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        end local 1 // com.oracle.truffle.api.object.Shape shape
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    5     0                   this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    5     1                  shape  Lcom/oracle/truffle/api/object/Shape;
            0    5     2                thisObj  Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            0    5     3                  depth  I
            0    5     4  isConstantObjectFinal  Z
            0    5     5               isDefine  Z
    MethodParameters:
                       Name  Flags
      shape                  
      thisObj                
      depth                  
      isConstantObjectFinal  
      isDefine               

  private com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode createShapeCheckNodeDepth0(com.oracle.truffle.api.object.Shape, com.oracle.truffle.js.runtime.objects.JSDynamicObject, boolean, boolean);
    descriptor: (Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;ZZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.object.Shape shape
        start local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        start local 3 // boolean isConstantObjectFinal
        start local 4 // boolean isDefine
         0: .line 1407
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.isGlobal:()Z
            ifeq 2
            iload 4 /* isDefine */
            ifne 2
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.isPropertyAssumptionCheckEnabled:()Z
            ifeq 2
            aload 1 /* shape */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            invokestatic com.oracle.truffle.js.runtime.objects.JSShape.getPropertyAssumption:(Lcom/oracle/truffle/api/object/Shape;Ljava/lang/Object;)Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifeq 2
         1: .line 1408
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$AssumptionShapeCheckNode
            dup
            aload 1 /* shape */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$AssumptionShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)V
            areturn
         2: .line 1409
      StackMap locals:
      StackMap stack:
            iload 3 /* isConstantObjectFinal */
            ifeq 7
         3: .line 1410
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 4
            iload 4 /* isDefine */
            ifeq 4
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         4: .line 1411
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.isPropertyAssumptionCheckEnabled:()Z
            ifeq 6
            aload 1 /* shape */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            invokestatic com.oracle.truffle.js.runtime.objects.JSShape.getPropertyAssumption:(Lcom/oracle/truffle/api/object/Shape;Ljava/lang/Object;)Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifeq 6
         5: .line 1412
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectAssumptionShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectAssumptionShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)V
            areturn
         6: .line 1414
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;)V
            areturn
         7: .line 1417
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 8
            iload 3 /* isConstantObjectFinal */
            ifeq 8
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         8: .line 1418
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$ShapeCheckNode
            dup
            aload 1 /* shape */
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$ShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;)V
            areturn
        end local 4 // boolean isDefine
        end local 3 // boolean isConstantObjectFinal
        end local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        end local 1 // com.oracle.truffle.api.object.Shape shape
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    9     0                   this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    9     1                  shape  Lcom/oracle/truffle/api/object/Shape;
            0    9     2                thisObj  Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            0    9     3  isConstantObjectFinal  Z
            0    9     4               isDefine  Z
    MethodParameters:
                       Name  Flags
      shape                  
      thisObj                
      isConstantObjectFinal  
      isDefine               

  private com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode createShapeCheckNodeDepth1(com.oracle.truffle.api.object.Shape, com.oracle.truffle.js.runtime.objects.JSDynamicObject, int, boolean);
    descriptor: (Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;IZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.object.Shape shape
        start local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        start local 3 // int depth
        start local 4 // boolean isConstantObjectFinal
         0: .line 1423
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            iload 3 /* depth */
            iconst_1
            if_icmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1424
      StackMap locals:
      StackMap stack:
            aload 2 /* thisObj */
            iload 3 /* depth */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.prototypesInShape:(Lcom/oracle/truffle/api/object/DynamicObject;I)Z
            ifeq 6
            aload 0 /* this */
            aload 2 /* thisObj */
            iload 3 /* depth */
            iload 4 /* isConstantObjectFinal */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.propertyAssumptionsValid:(Lcom/oracle/truffle/api/object/DynamicObject;IZ)Z
            ifeq 6
         2: .line 1425
            iload 4 /* isConstantObjectFinal */
            ifeq 4
         3: .line 1426
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)V
            goto 5
         4: .line 1427
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/api/object/DynamicObject;Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)V
         5: .line 1425
      StackMap locals:
      StackMap stack: com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractAssumptionShapeCheckNode
            areturn
         6: .line 1429
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.traversePrototypeShapeCheckCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         7: .line 1430
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/api/object/DynamicObject;)V
            areturn
        end local 4 // boolean isConstantObjectFinal
        end local 3 // int depth
        end local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        end local 1 // com.oracle.truffle.api.object.Shape shape
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    8     0                   this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    8     1                  shape  Lcom/oracle/truffle/api/object/Shape;
            0    8     2                thisObj  Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            0    8     3                  depth  I
            0    8     4  isConstantObjectFinal  Z
    MethodParameters:
                       Name  Flags
      shape                  
      thisObj                
      depth                  
      isConstantObjectFinal  

  private com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode createShapeCheckNodeDeeper(com.oracle.truffle.api.object.Shape, com.oracle.truffle.js.runtime.objects.JSDynamicObject, int, boolean);
    descriptor: (Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;IZ)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=5, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.object.Shape shape
        start local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        start local 3 // int depth
        start local 4 // boolean isConstantObjectFinal
         0: .line 1435
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            iload 3 /* depth */
            iconst_1
            if_icmpgt 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1436
      StackMap locals:
      StackMap stack:
            aload 2 /* thisObj */
            iload 3 /* depth */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.prototypesInShape:(Lcom/oracle/truffle/api/object/DynamicObject;I)Z
            ifeq 6
            aload 0 /* this */
            aload 2 /* thisObj */
            iload 3 /* depth */
            iload 4 /* isConstantObjectFinal */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.propertyAssumptionsValid:(Lcom/oracle/truffle/api/object/DynamicObject;IZ)Z
            ifeq 6
         2: .line 1437
            iload 4 /* isConstantObjectFinal */
            ifeq 4
         3: .line 1438
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeChainShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            iload 3 /* depth */
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeChainShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;Ljava/lang/Object;ILcom/oracle/truffle/js/runtime/JSContext;)V
            goto 5
         4: .line 1439
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            iload 3 /* depth */
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/api/object/DynamicObject;Ljava/lang/Object;ILcom/oracle/truffle/js/runtime/JSContext;)V
         5: .line 1437
      StackMap locals:
      StackMap stack: com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractAssumptionShapeCheckNode
            areturn
         6: .line 1441
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.traversePrototypeChainShapeCheckCount:Lcom/oracle/truffle/js/runtime/util/DebugCounter;
            invokevirtual com.oracle.truffle.js.runtime.util.DebugCounter.inc:()V
         7: .line 1442
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainShapeCheckNode
            dup
            aload 1 /* shape */
            aload 2 /* thisObj */
            iload 3 /* depth */
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainShapeCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/api/object/DynamicObject;I)V
            areturn
        end local 4 // boolean isConstantObjectFinal
        end local 3 // int depth
        end local 2 // com.oracle.truffle.js.runtime.objects.JSDynamicObject thisObj
        end local 1 // com.oracle.truffle.api.object.Shape shape
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    8     0                   this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    8     1                  shape  Lcom/oracle/truffle/api/object/Shape;
            0    8     2                thisObj  Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            0    8     3                  depth  I
            0    8     4  isConstantObjectFinal  Z
    MethodParameters:
                       Name  Flags
      shape                  
      thisObj                
      depth                  
      isConstantObjectFinal  

  protected static boolean prototypesInShape(com.oracle.truffle.api.object.DynamicObject, int);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;I)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.oracle.truffle.api.object.DynamicObject thisObj
        start local 1 // int depth
         0: .line 1447
            aload 0 /* thisObj */
            astore 2 /* depthObject */
        start local 2 // com.oracle.truffle.api.object.DynamicObject depthObject
         1: .line 1448
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         2: goto 7
         3: .line 1449
      StackMap locals: com.oracle.truffle.api.object.DynamicObject int
      StackMap stack:
            aload 2 /* depthObject */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            invokestatic com.oracle.truffle.js.runtime.objects.JSShape.isPrototypeInShape:(Lcom/oracle/truffle/api/object/Shape;)Z
            ifne 5
         4: .line 1450
            iconst_0
            ireturn
         5: .line 1452
      StackMap locals:
      StackMap stack:
            aload 2 /* depthObject */
            invokestatic com.oracle.truffle.js.runtime.objects.JSObject.getPrototype:(Lcom/oracle/truffle/api/object/DynamicObject;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 2 /* depthObject */
         6: .line 1448
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 3 /* i */
            iload 1 /* depth */
            if_icmplt 3
        end local 3 // int i
         8: .line 1454
            iconst_1
            ireturn
        end local 2 // com.oracle.truffle.api.object.DynamicObject depthObject
        end local 1 // int depth
        end local 0 // com.oracle.truffle.api.object.DynamicObject thisObj
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0      thisObj  Lcom/oracle/truffle/api/object/DynamicObject;
            0    9     1        depth  I
            1    9     2  depthObject  Lcom/oracle/truffle/api/object/DynamicObject;
            2    8     3            i  I
    MethodParameters:
         Name  Flags
      thisObj  
      depth    

  protected final boolean propertyAssumptionsValid(com.oracle.truffle.api.object.DynamicObject, int, boolean);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;IZ)Z
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=3, locals=7, args_size=4
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.object.DynamicObject thisObj
        start local 2 // int depth
        start local 3 // boolean checkDepth0
         0: .line 1458
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.isSingleRealm:()Z
            ifne 2
         1: .line 1459
            iconst_0
            ireturn
         2: .line 1461
      StackMap locals:
      StackMap stack:
            aload 1 /* thisObj */
            astore 4 /* depthObject */
        start local 4 // com.oracle.truffle.api.object.DynamicObject depthObject
         3: .line 1462
            aload 4 /* depthObject */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            astore 5 /* depthShape */
        start local 5 // com.oracle.truffle.api.object.Shape depthShape
         4: .line 1463
            iload 3 /* checkDepth0 */
            ifeq 6
            aload 5 /* depthShape */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            invokestatic com.oracle.truffle.js.runtime.objects.JSShape.getPropertyAssumption:(Lcom/oracle/truffle/api/object/Shape;Ljava/lang/Object;)Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 6
         5: .line 1464
            iconst_0
            ireturn
         6: .line 1466
      StackMap locals: com.oracle.truffle.api.object.DynamicObject com.oracle.truffle.api.object.Shape
      StackMap stack:
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         7: goto 16
         8: .line 1467
      StackMap locals: int
      StackMap stack:
            iload 2 /* depth */
            ifne 9
            iload 3 /* checkDepth0 */
            ifeq 11
      StackMap locals:
      StackMap stack:
         9: aload 5 /* depthShape */
            invokestatic com.oracle.truffle.js.runtime.objects.JSShape.getPrototypeAssumption:(Lcom/oracle/truffle/api/object/Shape;)Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 11
        10: .line 1468
            iconst_0
            ireturn
        11: .line 1470
      StackMap locals:
      StackMap stack:
            aload 4 /* depthObject */
            invokestatic com.oracle.truffle.js.runtime.objects.JSObject.getPrototype:(Lcom/oracle/truffle/api/object/DynamicObject;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 4 /* depthObject */
        12: .line 1471
            aload 4 /* depthObject */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            astore 5 /* depthShape */
        13: .line 1472
            aload 5 /* depthShape */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            iconst_1
            invokestatic com.oracle.truffle.js.runtime.objects.JSShape.getPropertyAssumption:(Lcom/oracle/truffle/api/object/Shape;Ljava/lang/Object;Z)Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 15
        14: .line 1473
            iconst_0
            ireturn
        15: .line 1466
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        16: iload 6 /* i */
            iload 2 /* depth */
            if_icmplt 8
        end local 6 // int i
        17: .line 1476
            iconst_1
            ireturn
        end local 5 // com.oracle.truffle.api.object.Shape depthShape
        end local 4 // com.oracle.truffle.api.object.DynamicObject depthObject
        end local 3 // boolean checkDepth0
        end local 2 // int depth
        end local 1 // com.oracle.truffle.api.object.DynamicObject thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   18     0         this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0   18     1      thisObj  Lcom/oracle/truffle/api/object/DynamicObject;
            0   18     2        depth  I
            0   18     3  checkDepth0  Z
            3   18     4  depthObject  Lcom/oracle/truffle/api/object/DynamicObject;
            4   18     5   depthShape  Lcom/oracle/truffle/api/object/Shape;
            7   17     6            i  I
    MethodParameters:
             Name  Flags
      thisObj      
      depth        
      checkDepth0  

  protected final com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode createPrimitiveReceiverCheck(java.lang.Object, int);
    descriptor: (Ljava/lang/Object;I)Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=7, locals=5, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // java.lang.Object thisObj
        start local 2 // int depth
         0: .line 1480
            iload 2 /* depth */
            ifne 2
         1: .line 1481
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$InstanceofCheckNode
            dup
            aload 1 /* thisObj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$InstanceofCheckNode.<init>:(Ljava/lang/Class;Lcom/oracle/truffle/js/runtime/JSContext;)V
            areturn
         2: .line 1483
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 3
            aload 1 /* thisObj */
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.isJSPrimitive:(Ljava/lang/Object;)Z
            ifne 3
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         3: .line 1484
      StackMap locals:
      StackMap stack:
            aload 1 /* thisObj */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.wrapPrimitive:(Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/api/object/DynamicObject;
            astore 3 /* wrapped */
        start local 3 // com.oracle.truffle.api.object.DynamicObject wrapped
         4: .line 1486
            aload 3 /* wrapped */
            iload 2 /* depth */
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.prototypesInShape:(Lcom/oracle/truffle/api/object/DynamicObject;I)Z
            ifeq 7
            aload 0 /* this */
            aload 3 /* wrapped */
            iload 2 /* depth */
            iconst_0
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.propertyAssumptionsValid:(Lcom/oracle/truffle/api/object/DynamicObject;IZ)Z
            ifeq 7
         5: .line 1487
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainCheckNode
            dup
            aload 3 /* wrapped */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            aload 3 /* wrapped */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            iload 2 /* depth */
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/api/object/DynamicObject;Ljava/lang/Object;ILcom/oracle/truffle/js/runtime/JSContext;)V
            astore 4 /* prototypeShapeCheck */
        start local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode prototypeShapeCheck
         6: .line 1488
            goto 8
        end local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode prototypeShapeCheck
         7: .line 1489
      StackMap locals: com.oracle.truffle.api.object.DynamicObject
      StackMap stack:
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainCheckNode
            dup
            aload 3 /* wrapped */
            invokevirtual com.oracle.truffle.api.object.DynamicObject.getShape:()Lcom/oracle/truffle/api/object/Shape;
            aload 3 /* wrapped */
            iload 2 /* depth */
            aload 3 /* wrapped */
            invokestatic com.oracle.truffle.js.runtime.objects.JSObject.getJSClass:(Lcom/oracle/truffle/api/object/DynamicObject;)Lcom/oracle/truffle/js/runtime/builtins/JSClass;
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainCheckNode.<init>:(Lcom/oracle/truffle/api/object/Shape;Lcom/oracle/truffle/api/object/DynamicObject;ILcom/oracle/truffle/js/runtime/builtins/JSClass;Lcom/oracle/truffle/js/runtime/JSContext;)V
            astore 4 /* prototypeShapeCheck */
        start local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode prototypeShapeCheck
         8: .line 1491
      StackMap locals: com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode
      StackMap stack:
            new com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrimitiveReceiverCheckNode
            dup
            aload 1 /* thisObj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 4 /* prototypeShapeCheck */
            invokespecial com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrimitiveReceiverCheckNode.<init>:(Ljava/lang/Class;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;)V
            areturn
        end local 4 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode prototypeShapeCheck
        end local 3 // com.oracle.truffle.api.object.DynamicObject wrapped
        end local 2 // int depth
        end local 1 // java.lang.Object thisObj
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    9     0                 this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    9     1              thisObj  Ljava/lang/Object;
            0    9     2                depth  I
            4    9     3              wrapped  Lcom/oracle/truffle/api/object/DynamicObject;
            6    7     4  prototypeShapeCheck  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
            8    9     4  prototypeShapeCheck  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$AbstractShapeCheckNode;
    MethodParameters:
         Name  Flags
      thisObj  
      depth    

  protected abstract boolean isGlobal();
    descriptor: ()Z
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  protected abstract boolean isOwnProperty();
    descriptor: ()Z
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  public final com.oracle.truffle.js.runtime.JSContext getContext();
    descriptor: ()Lcom/oracle/truffle/js/runtime/JSContext;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1500
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            areturn
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;

  protected abstract boolean isPropertyAssumptionCheckEnabled();
    descriptor: ()Z
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  protected abstract void setPropertyAssumptionCheckEnabled(boolean);
    descriptor: (Z)V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    MethodParameters:
       Name  Flags
      value  

  public com.oracle.truffle.api.nodes.NodeCost getCost();
    descriptor: ()Lcom/oracle/truffle/api/nodes/NodeCost;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1509
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            ifnonnull 2
         1: .line 1510
            getstatic com.oracle.truffle.api.nodes.NodeCost.UNINITIALIZED:Lcom/oracle/truffle/api/nodes/NodeCost;
            areturn
         2: .line 1511
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.isGeneric:()Z
            ifeq 4
         3: .line 1512
            getstatic com.oracle.truffle.api.nodes.NodeCost.MEGAMORPHIC:Lcom/oracle/truffle/api/nodes/NodeCost;
            areturn
         4: .line 1513
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.cacheNode:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode.getNext:()Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode;
            ifnonnull 6
         5: .line 1514
            getstatic com.oracle.truffle.api.nodes.NodeCost.MONOMORPHIC:Lcom/oracle/truffle/api/nodes/NodeCost;
            areturn
         6: .line 1516
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.truffle.api.nodes.NodeCost.POLYMORPHIC:Lcom/oracle/truffle/api/nodes/NodeCost;
            areturn
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;

  protected static boolean isArrayLengthProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1521
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSArray$ArrayLengthProxyProperty
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isFunctionLengthProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1525
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSFunction$FunctionLengthPropertyProxy
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isFunctionNameProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1529
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSFunction$FunctionNamePropertyProxy
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isClassPrototypeProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1533
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSFunction$ClassPrototypeProxyProperty
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isStringLengthProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1537
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSString$StringLengthProxyProperty
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isLazyRegexResultIndexProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1541
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSRegExp$LazyRegexResultIndexProxyProperty
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isLazyNamedCaptureGroupProperty(com.oracle.truffle.api.object.Property);
    descriptor: (Lcom/oracle/truffle/api/object/Property;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.object.Property property
         0: .line 1545
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.isProxy:(Lcom/oracle/truffle/api/object/Property;)Z
            ifeq 1
            aload 0 /* property */
            invokestatic com.oracle.truffle.js.runtime.objects.JSProperty.getConstantProxy:(Lcom/oracle/truffle/api/object/Property;)Lcom/oracle/truffle/js/runtime/objects/PropertyProxy;
            instanceof com.oracle.truffle.js.runtime.builtins.JSRegExp$LazyNamedCaptureGroupProperty
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.oracle.truffle.api.object.Property property
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0  property  Lcom/oracle/truffle/api/object/Property;
    MethodParameters:
          Name  Flags
      property  

  protected static boolean isNonIntegerIndex(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.Object key
         0: .line 1549
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 0 /* key */
            instanceof java.lang.String
            ifeq 1
            ldc "Infinity"
            aload 0 /* key */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 1
            aload 0 /* key */
            checkcast java.lang.String
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.canonicalNumericIndexString:(Ljava/lang/String;)Ljava/lang/Object;
            getstatic com.oracle.truffle.js.runtime.objects.Undefined.instance:Lcom/oracle/truffle/js/runtime/objects/JSDynamicObject;
            if_acmpeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1550
      StackMap locals:
      StackMap stack:
            ldc "Infinity"
            aload 0 /* key */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ireturn
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0   key  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      key   

  private void traceRewriteInsert(com.oracle.truffle.api.nodes.Node, int);
    descriptor: (Lcom/oracle/truffle/api/nodes/Node;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.nodes.Node newNode
        start local 2 // int cacheDepth
         0: .line 1554
            getstatic com.oracle.truffle.api.TruffleOptions.TraceRewrites:Z
            ifeq 3
         1: .line 1555
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            astore 3 /* out */
        start local 3 // java.io.PrintStream out
         2: .line 1556
            aload 3 /* out */
            ldc "[truffle]   rewrite %-50s |Property %s |Node %s (%d/%d)%n"
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aastore
            dup
            iconst_2
            aload 1 /* newNode */
            aastore
            dup
            iconst_3
            iload 2 /* cacheDepth */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_4
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getPropertyCacheLimit:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual java.io.PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
            pop
        end local 3 // java.io.PrintStream out
         3: .line 1558
      StackMap locals:
      StackMap stack:
            return
        end local 2 // int cacheDepth
        end local 1 // com.oracle.truffle.api.nodes.Node newNode
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    4     1     newNode  Lcom/oracle/truffle/api/nodes/Node;
            0    4     2  cacheDepth  I
            2    3     3         out  Ljava/io/PrintStream;
    MethodParameters:
            Name  Flags
      newNode     
      cacheDepth  

  private void traceRewriteMegamorphic(com.oracle.truffle.api.nodes.Node, java.lang.String);
    descriptor: (Lcom/oracle/truffle/api/nodes/Node;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.nodes.Node newNode
        start local 2 // java.lang.String reason
         0: .line 1561
            getstatic com.oracle.truffle.api.TruffleOptions.TraceRewrites:Z
            ifeq 3
         1: .line 1562
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            astore 3 /* out */
        start local 3 // java.io.PrintStream out
         2: .line 1563
            aload 3 /* out */
            ldc "[truffle]   rewrite %-50s |Property %s |Node %s |Reason %s (limit %d)%n"
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aastore
            dup
            iconst_2
            aload 1 /* newNode */
            aastore
            dup
            iconst_3
            aload 2 /* reason */
            aastore
            dup
            iconst_4
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getContext:()Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getPropertyCacheLimit:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual java.io.PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
            pop
        end local 3 // java.io.PrintStream out
         3: .line 1565
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String reason
        end local 1 // com.oracle.truffle.api.nodes.Node newNode
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    4     1  newNode  Lcom/oracle/truffle/api/nodes/Node;
            0    4     2   reason  Ljava/lang/String;
            2    3     3      out  Ljava/io/PrintStream;
    MethodParameters:
         Name  Flags
      newNode  
      reason   

  protected void traceRewriteEvictFinal(com.oracle.truffle.api.nodes.Node);
    descriptor: (Lcom/oracle/truffle/api/nodes/Node;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // com.oracle.truffle.api.nodes.Node evicted
         0: .line 1568
            getstatic com.oracle.truffle.api.TruffleOptions.TraceRewrites:Z
            ifeq 3
         1: .line 1569
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            astore 2 /* out */
        start local 2 // java.io.PrintStream out
         2: .line 1570
            aload 2 /* out */
            ldc "[truffle]   rewrite %-50s |Property %s |Node %s |Reason evict final%n"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aastore
            dup
            iconst_2
            aload 1 /* evicted */
            aastore
            invokevirtual java.io.PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
            pop
        end local 2 // java.io.PrintStream out
         3: .line 1572
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.oracle.truffle.api.nodes.Node evicted
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    4     1  evicted  Lcom/oracle/truffle/api/nodes/Node;
            2    3     2      out  Ljava/io/PrintStream;
    MethodParameters:
         Name  Flags
      evicted  

  private void traceAssumptionInvalidated();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
         0: .line 1575
            getstatic com.oracle.truffle.api.TruffleOptions.TraceRewrites:Z
            ifeq 3
         1: .line 1576
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            astore 1 /* out */
        start local 1 // java.io.PrintStream out
         2: .line 1577
            aload 1 /* out */
            ldc "[truffle]   rewrite %-50s |Property %s |Reason assumption invalidated%n"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            aastore
            dup
            iconst_1
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.PropertyCacheNode.key:Ljava/lang/Object;
            aastore
            invokevirtual java.io.PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
            pop
        end local 1 // java.io.PrintStream out
         3: .line 1579
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            2    3     1   out  Ljava/io/PrintStream;

  protected java.lang.String getAccessorKey(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
        start local 1 // java.lang.String getset
         0: .line 1582
            aload 1 /* getset */
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.PropertyCacheNode.getKey:()Ljava/lang/Object;
            invokestatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.getAccessorKey:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
            areturn
        end local 1 // java.lang.String getset
        end local 0 // com.oracle.truffle.js.nodes.access.PropertyCacheNode this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode<TT;>;
            0    1     1  getset  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      getset  

  protected static java.lang.String getAccessorKey(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.lang.String getset
        start local 1 // java.lang.Object key
         0: .line 1587
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 1 /* key */
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.isString:(Ljava/lang/Object;)Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1588
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            instanceof java.lang.String
            ifeq 2
            aload 1 /* key */
            checkcast java.lang.String
            goto 3
      StackMap locals:
      StackMap stack:
         2: aload 1 /* key */
            checkcast com.oracle.truffle.js.runtime.objects.JSLazyString
            invokevirtual com.oracle.truffle.js.runtime.objects.JSLazyString.toString:()Ljava/lang/String;
      StackMap locals:
      StackMap stack: java.lang.String
         3: astore 2 /* origKey */
        start local 2 // java.lang.String origKey
         4: .line 1589
            aload 2 /* origKey */
            invokevirtual java.lang.String.length:()I
            ifle 6
            aload 2 /* origKey */
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            invokestatic java.lang.Character.isLetter:(C)Z
            ifeq 6
         5: .line 1590
            new java.lang.StringBuilder
            dup
            aload 0 /* getset */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* origKey */
            iconst_0
            iconst_1
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokevirtual java.lang.String.toUpperCase:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* origKey */
            iconst_1
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
         6: .line 1592
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            areturn
        end local 2 // java.lang.String origKey
        end local 1 // java.lang.Object key
        end local 0 // java.lang.String getset
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0   getset  Ljava/lang/String;
            0    7     1      key  Ljava/lang/Object;
            4    7     2  origKey  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
        Name  Flags
      getset  
      key     

  protected static com.oracle.truffle.api.object.DynamicObjectLibrary createCachedAccess(java.lang.Object, com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode, com.oracle.truffle.api.object.DynamicObject);
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;Lcom/oracle/truffle/api/object/DynamicObject;)Lcom/oracle/truffle/api/object/DynamicObjectLibrary;
    flags: (0x000c) ACC_PROTECTED, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // java.lang.Object key
        start local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode receiverCheck
        start local 2 // com.oracle.truffle.api.object.DynamicObject store
         0: .line 1596
            getstatic com.oracle.truffle.js.nodes.access.PropertyCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 0 /* key */
            ifnonnull 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 1597
      StackMap locals:
      StackMap stack:
            aload 1 /* receiverCheck */
            instanceof com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractAssumptionShapeCheckNode
            ifeq 3
         2: .line 1598
            invokestatic com.oracle.truffle.api.object.DynamicObjectLibrary.getFactory:()Lcom/oracle/truffle/api/library/LibraryFactory;
            aload 2 /* store */
            invokevirtual com.oracle.truffle.api.library.LibraryFactory.create:(Ljava/lang/Object;)Lcom/oracle/truffle/api/library/Library;
            checkcast com.oracle.truffle.api.object.DynamicObjectLibrary
            areturn
         3: .line 1599
      StackMap locals:
      StackMap stack:
            aload 1 /* receiverCheck */
            instanceof com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode
            ifeq 5
            aload 1 /* receiverCheck */
            instanceof com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractAssumptionShapeCheckNode
            ifne 5
         4: .line 1600
            invokestatic com.oracle.truffle.api.object.DynamicObjectLibrary.getFactory:()Lcom/oracle/truffle/api/library/LibraryFactory;
            aload 2 /* store */
            invokevirtual com.oracle.truffle.api.library.LibraryFactory.create:(Ljava/lang/Object;)Lcom/oracle/truffle/api/library/Library;
            checkcast com.oracle.truffle.api.object.DynamicObjectLibrary
            areturn
         5: .line 1602
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.api.object.DynamicObjectLibrary.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.object.DynamicObjectLibrary
            areturn
        end local 2 // com.oracle.truffle.api.object.DynamicObject store
        end local 1 // com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode receiverCheck
        end local 0 // java.lang.Object key
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0            key  Ljava/lang/Object;
            0    6     1  receiverCheck  Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$ReceiverCheckNode;
            0    6     2          store  Lcom/oracle/truffle/api/object/DynamicObject;
    MethodParameters:
               Name  Flags
      key            
      receiverCheck  
      store          
}
Signature: <T:Lcom/oracle/truffle/js/nodes/access/PropertyCacheNode$CacheNode<TT;>;>Lcom/oracle/truffle/js/nodes/JavaScriptBaseNode;
SourceFile: "PropertyCacheNode.java"
NestMembers:
  com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractAssumptionShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$AssumptionShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectAssumptionShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeChainShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ForeignLanguageCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$InstanceofCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$JSClassCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$NullCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrimitiveReceiverCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ReceiverCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$ShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainShapeCheckNode  com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeShapeCheckNode
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
  public abstract Child = com.oracle.truffle.api.nodes.Node$Child of com.oracle.truffle.api.nodes.Node
  protected abstract AbstractAssumptionShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractAssumptionShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected abstract AbstractShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$AbstractShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final AssumptionShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$AssumptionShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  public abstract CacheNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$CacheNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final ConstantObjectAssumptionShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectAssumptionShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final ConstantObjectPrototypeChainShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeChainShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final ConstantObjectPrototypeShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectPrototypeShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected abstract ConstantObjectReceiverCheck = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectReceiverCheck of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final ConstantObjectShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ConstantObjectShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final ForeignLanguageCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ForeignLanguageCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final InstanceofCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$InstanceofCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final JSClassCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$JSClassCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final NullCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$NullCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final PrimitiveReceiverCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrimitiveReceiverCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final PrototypeChainCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final PrototypeChainShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeChainShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final PrototypeShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$PrototypeShapeCheckNode 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
  protected final ShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$ShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final TraversePrototypeChainCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final TraversePrototypeChainShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeChainShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  protected final TraversePrototypeShapeCheckNode = com.oracle.truffle.js.nodes.access.PropertyCacheNode$TraversePrototypeShapeCheckNode of com.oracle.truffle.js.nodes.access.PropertyCacheNode
  public ArrayLengthProxyProperty = com.oracle.truffle.js.runtime.builtins.JSArray$ArrayLengthProxyProperty of com.oracle.truffle.js.runtime.builtins.JSArray
  public final ClassPrototypeProxyProperty = com.oracle.truffle.js.runtime.builtins.JSFunction$ClassPrototypeProxyProperty of com.oracle.truffle.js.runtime.builtins.JSFunction
  public FunctionLengthPropertyProxy = com.oracle.truffle.js.runtime.builtins.JSFunction$FunctionLengthPropertyProxy of com.oracle.truffle.js.runtime.builtins.JSFunction
  public FunctionNamePropertyProxy = com.oracle.truffle.js.runtime.builtins.JSFunction$FunctionNamePropertyProxy of com.oracle.truffle.js.runtime.builtins.JSFunction
  public LazyNamedCaptureGroupProperty = com.oracle.truffle.js.runtime.builtins.JSRegExp$LazyNamedCaptureGroupProperty of com.oracle.truffle.js.runtime.builtins.JSRegExp
  public LazyRegexResultIndexProxyProperty = com.oracle.truffle.js.runtime.builtins.JSRegExp$LazyRegexResultIndexProxyProperty of com.oracle.truffle.js.runtime.builtins.JSRegExp
  public final StringLengthProxyProperty = com.oracle.truffle.js.runtime.builtins.JSString$StringLengthProxyProperty of com.oracle.truffle.js.runtime.builtins.JSString