public class com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest
  super_class: java.lang.Object
{
  private static final java.lang.String READ_READY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "readReady"

  private static final java.lang.String READ_LAZY;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "readLazy"

  private static final java.lang.String INVOKE_GETTER1;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "\"functionDeclaration\":\"function invokeGetter(arrayStr){let result=this;const properties=JSON.parse(arrayStr);for(let i=0,n=properties.length;i<n;++i)\\nresult=result[properties[i]];return result;}\""

  private static final java.lang.String INVOKE_GETTER2;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "\"functionDeclaration\":\"function remoteFunction(propName) { return this[propName]; }\""

  private static final java.lang.String INVOKE_GETTER3;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "\"functionDeclaration\":\"function invokeGetter(arrayStr) {\\n      let result = this;\\n      const properties = JSON.parse(arrayStr);\\n      for (let i = 0, n = properties.length; i < n; ++i) {\\n        result = result[properties[i]];\\n      }\\n      return result;\\n    }\""

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest this
         0: .line 63
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/tools/chromeinspector/test/LazyAccessInspectDebugTest;

  public void testReadWithSideEffects();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=10, args_size=1
        start local 0 // com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest this
         0: .line 80
            new java.util.concurrent.atomic.AtomicInteger
            dup
            iconst_0
            invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:(I)V
            astore 1 /* readLazyCount */
        start local 1 // java.util.concurrent.atomic.AtomicInteger readLazyCount
         1: .line 81
            iconst_1
            invokestatic com.oracle.truffle.tools.chromeinspector.test.InspectorTester.start:(Z)Lcom/oracle/truffle/tools/chromeinspector/test/InspectorTester;
            astore 2 /* tester */
        start local 2 // com.oracle.truffle.tools.chromeinspector.test.InspectorTester tester
         2: .line 82
            aload 2 /* tester */
            ldc "{\"id\":1,\"method\":\"Runtime.enable\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
         3: .line 83
            aload 2 /* tester */
            ldc "{\"id\":2,\"method\":\"Debugger.enable\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
         4: .line 84
            aload 2 /* tester */
         5: .line 85
            ldc "{\"result\":{},\"id\":1}\n{\"result\":{},\"id\":2}\n"
         6: .line 84
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
         7: .line 87
            aload 2 /* tester */
            ldc "{\"id\":3,\"method\":\"Runtime.runIfWaitingForDebugger\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
         8: .line 88
            aload 2 /* tester */
         9: .line 89
            ldc "{\"result\":{},\"id\":3}\n{\"method\":\"Runtime.executionContextCreated\",\"params\":{\"context\":{\"origin\":\"\",\"name\":\"test\",\"id\":1}}}\n"
        10: .line 88
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        11: .line 91
            new com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage
            dup
            aload 1 /* readLazyCount */
            invokespecial com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage.<init>:(Ljava/util/concurrent/atomic/AtomicInteger;)V
            invokestatic com.oracle.truffle.api.test.polyglot.ProxyLanguage.setDelegate:(Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;)Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;
            pop
        12: .line 92
            ldc "proxyLanguage"
            ldc "1"
            ldc "ReadWithSideEffects.test"
            invokestatic org.graalvm.polyglot.Source.newBuilder:(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)Lorg/graalvm/polyglot/Source$Builder;
            invokevirtual org.graalvm.polyglot.Source$Builder.build:()Lorg/graalvm/polyglot/Source;
            astore 3 /* source */
        start local 3 // org.graalvm.polyglot.Source source
        13: .line 93
            aload 3 /* source */
            invokevirtual org.graalvm.polyglot.Source.getURI:()Ljava/net/URI;
            invokestatic com.oracle.truffle.tools.chromeinspector.test.InspectorTester.getStringURI:(Ljava/net/URI;)Ljava/lang/String;
            astore 4 /* sourceURI */
        start local 4 // java.lang.String sourceURI
        14: .line 94
            new com.oracle.truffle.tools.chromeinspector.types.Script
            dup
            iconst_0
            aconst_null
            aload 3 /* source */
            invokestatic com.oracle.truffle.tck.DebuggerTester.getSourceImpl:(Lorg/graalvm/polyglot/Source;)Lcom/oracle/truffle/api/source/Source;
            invokespecial com.oracle.truffle.tools.chromeinspector.types.Script.<init>:(ILjava/lang/String;Lcom/oracle/truffle/api/source/Source;)V
            invokevirtual com.oracle.truffle.tools.chromeinspector.types.Script.getHash:()Ljava/lang/String;
            astore 5 /* hash */
        start local 5 // java.lang.String hash
        15: .line 95
            aload 2 /* tester */
            aload 3 /* source */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.eval:(Lorg/graalvm/polyglot/Source;)Ljava/util/concurrent/Future;
            pop
        16: .line 96
            aload 2 /* tester */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.getContextId:()J
            lstore 6 /* id */
        start local 6 // long id
        17: .line 97
            aload 3 /* source */
            invokevirtual org.graalvm.polyglot.Source.getLineCount:()I
            iconst_1
            isub
            istore 8 /* endLine */
        start local 8 // int endLine
        18: .line 98
            aload 3 /* source */
            iconst_1
            invokevirtual org.graalvm.polyglot.Source.getLineLength:(I)I
            istore 9 /* endColumn */
        start local 9 // int endColumn
        19: .line 99
            aload 2 /* tester */
        20: .line 100
            new java.lang.StringBuilder
            dup
            ldc "{\"method\":\"Debugger.scriptParsed\",\"params\":{\"endLine\":"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 8 /* endLine */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ",\"scriptId\":\"0\",\"endColumn\":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 9 /* endColumn */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ",\"startColumn\":0,\"startLine\":0,\"length\":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        21: .line 101
            aload 3 /* source */
            invokevirtual org.graalvm.polyglot.Source.getLength:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ",\"executionContextId\":"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            lload 6 /* id */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            ldc ",\"url\":\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* sourceURI */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\",\"hash\":\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 5 /* hash */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\"}}\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        22: .line 100
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        23: .line 99
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        24: .line 102
            aload 2 /* tester */
        25: .line 103
            new java.lang.StringBuilder
            dup
            ldc "{\"method\":\"Debugger.paused\",\"params\":{\"reason\":\"other\",\"hitBreakpoints\":[],\"callFrames\":[{\"callFrameId\":\"0\",\"functionName\":\"TestRootNode\",\"scopeChain\":[{\"name\":\"TestRootNode\",\"type\":\"local\",\"object\":{\"description\":\"TestRootNode\",\"type\":\"object\",\"objectId\":\"1\"}},{\"name\":\"top\",\"type\":\"global\",\"object\":{\"description\":\"top\",\"type\":\"object\",\"objectId\":\"2\"}}],\"this\":{\"subtype\":\"null\",\"description\":\"null\",\"type\":\"object\",\"objectId\":\"3\"},\"functionLocation\":{\"scriptId\":\"0\",\"columnNumber\":0,\"lineNumber\":0},\"location\":{\"scriptId\":\"0\",\"columnNumber\":0,\"lineNumber\":0},\"url\":\""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        26: .line 110
            aload 4 /* sourceURI */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        27: .line 111
            ldc "}]}}\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        28: .line 103
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        29: .line 102
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        30: .line 113
            aload 2 /* tester */
            ldc "{\"id\":1,\"method\":\"Runtime.getProperties\",\"params\":{\"objectId\":\"1\"}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        31: .line 114
            aload 2 /* tester */
        32: .line 115
            ldc "{\"result\":{\"result\":[{\"isOwn\":true,\"enumerable\":true,\"name\":\"o\",\"value\":{\"description\":\"Object LazyReadObject\",\"className\":\"Object\",\"type\":\"object\",\"objectId\":\"4\"},\"configurable\":true,\"writable\":true}],\"internalProperties\":[]},\"id\":1}\n"
        33: .line 114
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        34: .line 119
            aload 2 /* tester */
            ldc "{\"id\":2,\"method\":\"Runtime.getProperties\",\"params\":{\"objectId\":\"4\"}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        35: .line 120
            aload 2 /* tester */
        36: .line 121
            ldc "{\"result\":{\"result\":[{\"isOwn\":true,\"enumerable\":true,\"name\":\"readReady\",\"value\":{\"description\":\"42\",\"type\":\"number\",\"value\":42},\"configurable\":true,\"writable\":false},{\"isOwn\":true,\"get\":{\"description\":\"\",\"className\":\"Function\",\"type\":\"function\",\"objectId\":\"6\"},\"enumerable\":true,\"name\":\"readLazy\",\"configurable\":true,\"writable\":false}],\"internalProperties\":[]},\"id\":2}\n"
        37: .line 120
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        38: .line 126
            lconst_0
            aload 1 /* readLazyCount */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        39: .line 128
            aload 2 /* tester */
            ldc "{\"id\":10,\"method\":\"Runtime.callFunctionOn\",\"params\":{\"objectId\":\"4\",\"functionDeclaration\":\"function invokeGetter(arrayStr){let result=this;const properties=JSON.parse(arrayStr);for(let i=0,n=properties.length;i<n;++i)\\nresult=result[properties[i]];return result;}\",\"arguments\":[{\"value\":\"[\\\"readLazy\\\"]\"}],\"silent\":true}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        40: .line 133
            aload 2 /* tester */
        41: .line 134
            ldc "{\"result\":{\"result\":{\"description\":\"43\",\"type\":\"number\",\"value\":43}},\"id\":10}\n"
        42: .line 133
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        43: .line 136
            lconst_1
            aload 1 /* readLazyCount */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        44: .line 138
            aload 2 /* tester */
            ldc "{\"id\":11,\"method\":\"Runtime.callFunctionOn\",\"params\":{\"objectId\":\"4\",\"functionDeclaration\":\"function remoteFunction(propName) { return this[propName]; }\",\"arguments\":[{\"value\":\"readLazy\"}],\"silent\":true}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        45: .line 143
            aload 2 /* tester */
        46: .line 144
            ldc "{\"result\":{\"result\":{\"description\":\"43\",\"type\":\"number\",\"value\":43}},\"id\":11}\n"
        47: .line 143
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        48: .line 145
            ldc 2
            aload 1 /* readLazyCount */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        49: .line 148
            aload 2 /* tester */
            ldc "{\"id\":20,\"method\":\"Runtime.getProperties\",\"params\":{\"objectId\":\"2\"}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        50: .line 149
            aload 2 /* tester */
        51: .line 150
            ldc "{\"result\":{\"result\":[{\"isOwn\":true,\"enumerable\":true,\"name\":\"readReady\",\"value\":{\"description\":\"42\",\"type\":\"number\",\"value\":42},\"configurable\":true,\"writable\":false},{\"isOwn\":true,\"get\":{\"description\":\"\",\"className\":\"Function\",\"type\":\"function\",\"objectId\":\"8\"},\"enumerable\":true,\"name\":\"readLazy\",\"configurable\":true,\"writable\":false}],\"internalProperties\":[]},\"id\":20}\n"
        52: .line 149
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        53: .line 153
            ldc 2
            aload 1 /* readLazyCount */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        54: .line 155
            aload 2 /* tester */
            ldc "{\"id\":21,\"method\":\"Runtime.callFunctionOn\",\"params\":{\"objectId\":\"2\",\"functionDeclaration\":\"function invokeGetter(arrayStr) {\\n      let result = this;\\n      const properties = JSON.parse(arrayStr);\\n      for (let i = 0, n = properties.length; i < n; ++i) {\\n        result = result[properties[i]];\\n      }\\n      return result;\\n    }\",\"arguments\":[{\"value\":\"[\\\"readLazy\\\"]\"}],\"silent\":true}}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        55: .line 160
            aload 2 /* tester */
        56: .line 161
            ldc "{\"result\":{\"result\":{\"description\":\"43\",\"type\":\"number\",\"value\":43}},\"id\":21}\n"
        57: .line 160
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        58: .line 163
            ldc 3
            aload 1 /* readLazyCount */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        59: .line 165
            aload 2 /* tester */
            ldc "{\"id\":100,\"method\":\"Debugger.resume\"}"
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.sendMessage:(Ljava/lang/String;)V
        60: .line 166
            aload 2 /* tester */
        61: .line 167
            ldc "{\"result\":{},\"id\":100}\n{\"method\":\"Debugger.resumed\"}\n"
        62: .line 166
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.compareReceivedMessages:(Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        63: .line 171
            new com.oracle.truffle.api.test.polyglot.ProxyLanguage
            dup
            invokespecial com.oracle.truffle.api.test.polyglot.ProxyLanguage.<init>:()V
            invokestatic com.oracle.truffle.api.test.polyglot.ProxyLanguage.setDelegate:(Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;)Lcom/oracle/truffle/api/test/polyglot/ProxyLanguage;
            pop
        64: .line 172
            aload 2 /* tester */
            invokevirtual com.oracle.truffle.tools.chromeinspector.test.InspectorTester.finish:()V
        65: .line 173
            return
        end local 9 // int endColumn
        end local 8 // int endLine
        end local 6 // long id
        end local 5 // java.lang.String hash
        end local 4 // java.lang.String sourceURI
        end local 3 // org.graalvm.polyglot.Source source
        end local 2 // com.oracle.truffle.tools.chromeinspector.test.InspectorTester tester
        end local 1 // java.util.concurrent.atomic.AtomicInteger readLazyCount
        end local 0 // com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   66     0           this  Lcom/oracle/truffle/tools/chromeinspector/test/LazyAccessInspectDebugTest;
            1   66     1  readLazyCount  Ljava/util/concurrent/atomic/AtomicInteger;
            2   66     2         tester  Lcom/oracle/truffle/tools/chromeinspector/test/InspectorTester;
           13   66     3         source  Lorg/graalvm/polyglot/Source;
           14   66     4      sourceURI  Ljava/lang/String;
           15   66     5           hash  Ljava/lang/String;
           17   66     6             id  J
           18   66     8        endLine  I
           19   66     9      endColumn  I
    Exceptions:
      throws java.lang.Exception
    RuntimeVisibleAnnotations: 
      org.junit.Test()
}
SourceFile: "LazyAccessInspectDebugTest.java"
NestMembers:
  com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage  com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage$Keys  com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage$LazyReadObject  com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage$MetaObject  com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage$TestRootNode  com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage$TestStatementNode
InnerClasses:
  ReadWithSideEffectsLanguage = com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest$ReadWithSideEffectsLanguage of com.oracle.truffle.tools.chromeinspector.test.LazyAccessInspectDebugTest
  public Builder = org.graalvm.polyglot.Source$Builder of org.graalvm.polyglot.Source