abstract class com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode extends com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayClassGuardCachedArrayWriteElementCacheNode
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode
  super_class: com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayClassGuardCachedArrayWriteElementCacheNode
{
  private com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode recursiveWrite;
    descriptor: Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.Node$Child()

  private final com.oracle.truffle.api.profiles.BranchProfile needPrototypeBranch;
    descriptor: Lcom/oracle/truffle/api/profiles/BranchProfile;
    flags: (0x0012) ACC_PRIVATE, 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 792
            ldc Lcom/oracle/truffle/js/nodes/access/WriteElementNode;
            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.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.oracle.truffle.js.runtime.array.ScriptArray, com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode);
    descriptor: (Lcom/oracle/truffle/js/runtime/array/ScriptArray;Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
        start local 1 // com.oracle.truffle.js.runtime.array.ScriptArray arrayType
        start local 2 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode arrayCacheNext
         0: .line 797
            aload 0 /* this */
            aload 1 /* arrayType */
            aload 2 /* arrayCacheNext */
            invokespecial com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayClassGuardCachedArrayWriteElementCacheNode.<init>:(Lcom/oracle/truffle/js/runtime/array/ScriptArray;Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;)V
         1: .line 794
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.profiles.BranchProfile.create:()Lcom/oracle/truffle/api/profiles/BranchProfile;
            putfield com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.needPrototypeBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
         2: .line 798
            return
        end local 2 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode arrayCacheNext
        end local 1 // com.oracle.truffle.js.runtime.array.ScriptArray arrayType
        end local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    3     0            this  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$RecursiveCachedArrayWriteElementCacheNode;
            0    3     1       arrayType  Lcom/oracle/truffle/js/runtime/array/ScriptArray;
            0    3     2  arrayCacheNext  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
    MethodParameters:
                Name  Flags
      arrayType       
      arrayCacheNext  

  protected final boolean setArrayAndWrite(com.oracle.truffle.js.runtime.array.ScriptArray, com.oracle.truffle.api.object.DynamicObject, long, java.lang.Object, com.oracle.truffle.js.nodes.access.WriteElementNode);
    descriptor: (Lcom/oracle/truffle/js/runtime/array/ScriptArray;Lcom/oracle/truffle/api/object/DynamicObject;JLjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=7, locals=7, args_size=6
        start local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
        start local 1 // com.oracle.truffle.js.runtime.array.ScriptArray newArray
        start local 2 // com.oracle.truffle.api.object.DynamicObject target
        start local 3 // long index
        start local 5 // java.lang.Object value
        start local 6 // com.oracle.truffle.js.nodes.access.WriteElementNode root
         0: .line 801
            aload 2 /* target */
            aload 1 /* newArray */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSAbstractArray.arraySetArrayType:(Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;)V
         1: .line 802
            aload 0 /* this */
            aload 2 /* target */
            aload 1 /* newArray */
            lload 3 /* index */
            aload 5 /* value */
            aload 6 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.executeRecursive:(Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;JLjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
            ireturn
        end local 6 // com.oracle.truffle.js.nodes.access.WriteElementNode root
        end local 5 // java.lang.Object value
        end local 3 // long index
        end local 2 // com.oracle.truffle.api.object.DynamicObject target
        end local 1 // com.oracle.truffle.js.runtime.array.ScriptArray newArray
        end local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$RecursiveCachedArrayWriteElementCacheNode;
            0    2     1  newArray  Lcom/oracle/truffle/js/runtime/array/ScriptArray;
            0    2     2    target  Lcom/oracle/truffle/api/object/DynamicObject;
            0    2     3     index  J
            0    2     5     value  Ljava/lang/Object;
            0    2     6      root  Lcom/oracle/truffle/js/nodes/access/WriteElementNode;
    MethodParameters:
          Name  Flags
      newArray  
      target    
      index     
      value     
      root      

  protected final boolean nonHolesArrayNeedsSlowSet(com.oracle.truffle.api.object.DynamicObject, com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray, long, com.oracle.truffle.js.nodes.access.WriteElementNode);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/dyn/AbstractWritableArray;JLcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=4, locals=6, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
        start local 1 // com.oracle.truffle.api.object.DynamicObject target
        start local 2 // com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray arrayType
        start local 3 // long index
        start local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode root
         0: .line 806
            getstatic com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 2 /* arrayType */
            invokevirtual com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray.isHolesType:()Z
            ifeq 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 807
      StackMap locals:
      StackMap stack:
            aload 5 /* root */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getArrayPrototypeNoElementsAssumption:()Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 5
            aload 5 /* root */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode.writeOwn:Z
            ifne 5
         2: .line 808
            aload 2 /* arrayType */
            aload 1 /* target */
            lload 3 /* index */
            invokevirtual com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray.hasElement:(Lcom/oracle/truffle/api/object/DynamicObject;J)Z
            ifne 5
         3: .line 809
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.needPrototypeBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
         4: .line 810
            iconst_1
            ireturn
         5: .line 813
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode root
        end local 3 // long index
        end local 2 // com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray arrayType
        end local 1 // com.oracle.truffle.api.object.DynamicObject target
        end local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    6     0       this  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$RecursiveCachedArrayWriteElementCacheNode;
            0    6     1     target  Lcom/oracle/truffle/api/object/DynamicObject;
            0    6     2  arrayType  Lcom/oracle/truffle/js/runtime/array/dyn/AbstractWritableArray;
            0    6     3      index  J
            0    6     5       root  Lcom/oracle/truffle/js/nodes/access/WriteElementNode;
    MethodParameters:
           Name  Flags
      target     
      arrayType  
      index      
      root       

  protected final boolean holesArrayNeedsSlowSet(com.oracle.truffle.api.object.DynamicObject, com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray, long, com.oracle.truffle.js.nodes.access.WriteElementNode);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/dyn/AbstractWritableArray;JLcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=4, locals=6, args_size=5
        start local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
        start local 1 // com.oracle.truffle.api.object.DynamicObject target
        start local 2 // com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray arrayType
        start local 3 // long index
        start local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode root
         0: .line 817
            getstatic com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.$assertionsDisabled:Z
            ifne 1
            aload 2 /* arrayType */
            invokevirtual com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray.isHolesType:()Z
            ifne 1
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         1: .line 818
      StackMap locals:
      StackMap stack:
            aload 5 /* root */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getArrayPrototypeNoElementsAssumption:()Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 2
            aload 5 /* root */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode.writeOwn:Z
            ifeq 4
         2: .line 819
      StackMap locals:
      StackMap stack:
            aload 5 /* root */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getFastArrayAssumption:()Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 3
            aload 1 /* target */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSSlowArray.isJSSlowArray:(Lcom/oracle/truffle/api/object/DynamicObject;)Z
            ifne 4
         3: .line 820
      StackMap locals:
      StackMap stack:
            aload 5 /* root */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode.context:Lcom/oracle/truffle/js/runtime/JSContext;
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getFastArgumentsObjectAssumption:()Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.isValid:()Z
            ifne 7
            aload 1 /* target */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSSlowArgumentsArray.isJSSlowArgumentsObject:(Lcom/oracle/truffle/api/object/DynamicObject;)Z
            ifeq 7
         4: .line 821
      StackMap locals:
      StackMap stack:
            aload 2 /* arrayType */
            aload 1 /* target */
            lload 3 /* index */
            invokevirtual com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray.hasElement:(Lcom/oracle/truffle/api/object/DynamicObject;J)Z
            ifne 7
         5: .line 822
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.needPrototypeBranch:Lcom/oracle/truffle/api/profiles/BranchProfile;
            invokevirtual com.oracle.truffle.api.profiles.BranchProfile.enter:()V
         6: .line 823
            iconst_1
            ireturn
         7: .line 826
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode root
        end local 3 // long index
        end local 2 // com.oracle.truffle.js.runtime.array.dyn.AbstractWritableArray arrayType
        end local 1 // com.oracle.truffle.api.object.DynamicObject target
        end local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    8     0       this  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$RecursiveCachedArrayWriteElementCacheNode;
            0    8     1     target  Lcom/oracle/truffle/api/object/DynamicObject;
            0    8     2  arrayType  Lcom/oracle/truffle/js/runtime/array/dyn/AbstractWritableArray;
            0    8     3      index  J
            0    8     5       root  Lcom/oracle/truffle/js/nodes/access/WriteElementNode;
    MethodParameters:
           Name  Flags
      target     
      arrayType  
      index      
      root       

  private boolean executeRecursive(com.oracle.truffle.api.object.DynamicObject, com.oracle.truffle.js.runtime.array.ScriptArray, long, java.lang.Object, com.oracle.truffle.js.nodes.access.WriteElementNode);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;JLjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=9, args_size=6
        start local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
        start local 1 // com.oracle.truffle.api.object.DynamicObject targetObject
        start local 2 // com.oracle.truffle.js.runtime.array.ScriptArray array
        start local 3 // long index
        start local 5 // java.lang.Object value
        start local 6 // com.oracle.truffle.js.nodes.access.WriteElementNode root
         0: .line 831
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.recursiveWrite:Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            astore 7 /* c */
        start local 7 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode c
         1: goto 6
         2: .line 832
      StackMap locals: com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode
      StackMap stack:
            aload 7 /* c */
            aload 1 /* targetObject */
            aload 2 /* array */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.guard:(Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/array/ScriptArray;)Z
            istore 8 /* guard */
        start local 8 // boolean guard
         3: .line 833
            iload 8 /* guard */
            ifeq 5
         4: .line 834
            aload 7 /* c */
            aload 1 /* targetObject */
            aload 2 /* array */
            lload 3 /* index */
            aload 5 /* value */
            aload 6 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.executeSetArray:(Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;JLjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
            ireturn
        end local 8 // boolean guard
         5: .line 831
      StackMap locals:
      StackMap stack:
            aload 7 /* c */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.arrayCacheNext:Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            astore 7 /* c */
      StackMap locals:
      StackMap stack:
         6: aload 7 /* c */
            ifnonnull 2
        end local 7 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode c
         7: .line 837
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
         8: .line 838
            aload 0 /* this */
            aload 1 /* targetObject */
            aload 2 /* array */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.specialize:(Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;)Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            astore 7 /* specialization */
        start local 7 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode specialization
         9: .line 839
            aload 7 /* specialization */
            aload 1 /* targetObject */
            aload 2 /* array */
            lload 3 /* index */
            aload 5 /* value */
            aload 6 /* root */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.executeSetArray:(Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;JLjava/lang/Object;Lcom/oracle/truffle/js/nodes/access/WriteElementNode;)Z
            ireturn
        end local 7 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode specialization
        end local 6 // com.oracle.truffle.js.nodes.access.WriteElementNode root
        end local 5 // java.lang.Object value
        end local 3 // long index
        end local 2 // com.oracle.truffle.js.runtime.array.ScriptArray array
        end local 1 // com.oracle.truffle.api.object.DynamicObject targetObject
        end local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   10     0            this  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$RecursiveCachedArrayWriteElementCacheNode;
            0   10     1    targetObject  Lcom/oracle/truffle/api/object/DynamicObject;
            0   10     2           array  Lcom/oracle/truffle/js/runtime/array/ScriptArray;
            0   10     3           index  J
            0   10     5           value  Ljava/lang/Object;
            0   10     6            root  Lcom/oracle/truffle/js/nodes/access/WriteElementNode;
            1    7     7               c  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            3    5     8           guard  Z
            9   10     7  specialization  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.nodes.ExplodeLoop()
    MethodParameters:
              Name  Flags
      targetObject  
      array         
      index         
      value         
      root          

  private com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode specialize(com.oracle.truffle.api.object.DynamicObject, com.oracle.truffle.js.runtime.array.ScriptArray);
    descriptor: (Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;)Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=8, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
        start local 1 // com.oracle.truffle.api.object.DynamicObject target
        start local 2 // com.oracle.truffle.js.runtime.array.ScriptArray array
         0: .line 843
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 844
            aload 0 /* this */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.getLock:()Ljava/util/concurrent/locks/Lock;
            astore 3 /* lock */
        start local 3 // java.util.concurrent.locks.Lock lock
         2: .line 845
            aload 3 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.lock:()V
         3: .line 847
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.recursiveWrite:Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            astore 4 /* currentHead */
        start local 4 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode currentHead
         4: .line 848
            aload 4 /* currentHead */
            astore 5 /* c */
        start local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode c
         5: goto 11
         6: .line 849
      StackMap locals: java.util.concurrent.locks.Lock com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode
      StackMap stack:
            aload 5 /* c */
            aload 1 /* target */
            aload 2 /* array */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.guard:(Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/array/ScriptArray;)Z
            ifeq 10
         7: .line 850
            aload 5 /* c */
            astore 7
         8: .line 862
            aload 3 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
         9: .line 850
            aload 7
            areturn
        10: .line 848
      StackMap locals:
      StackMap stack:
            aload 5 /* c */
            getfield com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.arrayCacheNext:Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            astore 5 /* c */
      StackMap locals:
      StackMap stack:
        11: aload 5 /* c */
            ifnonnull 6
        end local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode c
        12: .line 854
            aload 1 /* target */
            aload 2 /* array */
            aload 4 /* currentHead */
            invokestatic com.oracle.truffle.js.nodes.access.WriteElementNode.makeArrayCacheNode:(Lcom/oracle/truffle/api/object/DynamicObject;Lcom/oracle/truffle/js/runtime/array/ScriptArray;Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;)Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            astore 5 /* newCacheNode */
        start local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode newCacheNode
        13: .line 855
            aload 0 /* this */
            aload 5 /* newCacheNode */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.insert:(Lcom/oracle/truffle/api/nodes/Node;)Lcom/oracle/truffle/api/nodes/Node;
            pop
        14: .line 856
            aload 0 /* this */
            aload 5 /* newCacheNode */
            putfield com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode.recursiveWrite:Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
        15: .line 857
            aload 5 /* newCacheNode */
            aload 1 /* target */
            aload 2 /* array */
            invokevirtual com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode.guard:(Ljava/lang/Object;Lcom/oracle/truffle/js/runtime/array/ScriptArray;)Z
            ifne 17
        16: .line 858
            invokestatic com.oracle.truffle.js.runtime.Errors.shouldNotReachHere:()Ljava/lang/RuntimeException;
            athrow
        17: .line 860
      StackMap locals:
      StackMap stack:
            aload 5 /* newCacheNode */
            astore 7
        18: .line 862
            aload 3 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        19: .line 860
            aload 7
            areturn
        end local 5 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode newCacheNode
        end local 4 // com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode currentHead
        20: .line 861
      StackMap locals: com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode com.oracle.truffle.api.object.DynamicObject com.oracle.truffle.js.runtime.array.ScriptArray java.util.concurrent.locks.Lock
      StackMap stack: java.lang.Throwable
            astore 6
        21: .line 862
            aload 3 /* lock */
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        22: .line 863
            aload 6
            athrow
        end local 3 // java.util.concurrent.locks.Lock lock
        end local 2 // com.oracle.truffle.js.runtime.array.ScriptArray array
        end local 1 // com.oracle.truffle.api.object.DynamicObject target
        end local 0 // com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   23     0          this  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$RecursiveCachedArrayWriteElementCacheNode;
            0   23     1        target  Lcom/oracle/truffle/api/object/DynamicObject;
            0   23     2         array  Lcom/oracle/truffle/js/runtime/array/ScriptArray;
            2   23     3          lock  Ljava/util/concurrent/locks/Lock;
            4   20     4   currentHead  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
            5   12     5             c  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
           13   20     5  newCacheNode  Lcom/oracle/truffle/js/nodes/access/WriteElementNode$ArrayWriteElementCacheNode;
      Exception table:
        from    to  target  type
           3     8      20  any
          10    18      20  any
    MethodParameters:
        Name  Flags
      target  
      array   
}
SourceFile: "WriteElementNode.java"
NestHost: com.oracle.truffle.js.nodes.access.WriteElementNode
InnerClasses:
  public abstract Child = com.oracle.truffle.api.nodes.Node$Child of com.oracle.truffle.api.nodes.Node
  private abstract ArrayClassGuardCachedArrayWriteElementCacheNode = com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayClassGuardCachedArrayWriteElementCacheNode of com.oracle.truffle.js.nodes.access.WriteElementNode
  abstract ArrayWriteElementCacheNode = com.oracle.truffle.js.nodes.access.WriteElementNode$ArrayWriteElementCacheNode of com.oracle.truffle.js.nodes.access.WriteElementNode
  private abstract RecursiveCachedArrayWriteElementCacheNode = com.oracle.truffle.js.nodes.access.WriteElementNode$RecursiveCachedArrayWriteElementCacheNode of com.oracle.truffle.js.nodes.access.WriteElementNode