class com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester implements com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$ScopeTester
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester
  super_class: java.lang.Object
{
  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester this
         0: .line 340
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/test/instrumentation/ScopeInstrumentTest$DefaultScopeTester;

  public void testScope(com.oracle.truffle.api.instrumentation.TruffleInstrument$Env, com.oracle.truffle.api.nodes.Node, com.oracle.truffle.api.frame.VirtualFrame);
    descriptor: (Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;Lcom/oracle/truffle/api/nodes/Node;Lcom/oracle/truffle/api/frame/VirtualFrame;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=10, args_size=4
        start local 0 // com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester this
        start local 1 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
        start local 2 // com.oracle.truffle.api.nodes.Node node
        start local 3 // com.oracle.truffle.api.frame.VirtualFrame frame
         0: .line 344
            aload 2 /* node */
            aload 3 /* frame */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.findLocalScope:(Lcom/oracle/truffle/api/nodes/Node;Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object;
            astore 4 /* dynamicScope */
        start local 4 // java.lang.Object dynamicScope
         1: .line 345
            aload 2 /* node */
            aconst_null
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.findLocalScope:(Lcom/oracle/truffle/api/nodes/Node;Lcom/oracle/truffle/api/frame/VirtualFrame;)Ljava/lang/Object;
            astore 5 /* lexicalScope */
        start local 5 // java.lang.Object lexicalScope
         2: .line 346
            aload 2 /* node */
            invokevirtual com.oracle.truffle.api.nodes.Node.getSourceSection:()Lcom/oracle/truffle/api/source/SourceSection;
            invokevirtual com.oracle.truffle.api.source.SourceSection.getStartLine:()I
            istore 6 /* line */
        start local 6 // int line
         3: .line 347
            iload 6 /* line */
            iconst_1
            if_icmple 26
            iload 6 /* line */
            bipush 6
            if_icmpge 26
         4: .line 348
            new java.lang.StringBuilder
            dup
            ldc "Line = "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 6 /* line */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ", function name: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc "testFunction"
            aload 5 /* lexicalScope */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getScopeName:(Ljava/lang/Object;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         5: .line 351
            iconst_0
            iload 6 /* line */
            iconst_2
            isub
            invokestatic java.lang.Math.max:(II)I
            iconst_2
            invokestatic java.lang.Math.min:(II)I
            istore 7 /* setVars */
        start local 7 // int setVars
         6: .line 356
            aload 4 /* dynamicScope */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getKeyList:(Ljava/lang/Object;)Ljava/util/List;
            astore 9 /* keyList */
        start local 9 // java.util.List keyList
         7: .line 357
            aload 9 /* keyList */
            ldc "this"
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            pop
         8: .line 358
            aload 9 /* keyList */
            invokeinterface java.util.List.size:()I
            istore 8 /* varCount */
        start local 8 // int varCount
         9: .line 360
            new java.lang.StringBuilder
            dup
            ldc "Line = "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 6 /* line */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ", num vars:"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc 2
            iload 8 /* varCount */
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
        10: .line 361
            ldc "Var a: "
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 4 /* dynamicScope */
            ldc "a"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
        11: .line 362
            ldc "Var b: "
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 4 /* dynamicScope */
            ldc "b"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
        12: .line 363
            iload 7 /* setVars */
            iconst_1
            if_icmplt 14
        13: .line 364
            ldc "Var a: "
            bipush 10
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 4 /* dynamicScope */
            ldc "a"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        14: .line 366
      StackMap locals: com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester com.oracle.truffle.api.instrumentation.TruffleInstrument$Env com.oracle.truffle.api.nodes.Node com.oracle.truffle.api.frame.VirtualFrame java.lang.Object java.lang.Object int int int java.util.List
      StackMap stack:
            iload 7 /* setVars */
            iconst_2
            if_icmplt 16
        15: .line 367
            ldc "Var b: "
            bipush 20
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 4 /* dynamicScope */
            ldc "b"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        16: .line 371
      StackMap locals:
      StackMap stack:
            aload 5 /* lexicalScope */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getKeyList:(Ljava/lang/Object;)Ljava/util/List;
            astore 9 /* keyList */
        17: .line 372
            aload 9 /* keyList */
            ldc "this"
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            pop
        18: .line 373
            aload 9 /* keyList */
            invokeinterface java.util.List.size:()I
            istore 8 /* varCount */
        19: .line 375
            new java.lang.StringBuilder
            dup
            ldc "Line = "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 6 /* line */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ", num vars:"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc 2
            iload 8 /* varCount */
            i2l
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/String;JJ)V
        20: .line 376
            ldc "Var a: "
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 5 /* lexicalScope */
            ldc "a"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
        21: .line 377
            ldc "Var b: "
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 5 /* lexicalScope */
            ldc "b"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isMemberReadable:(Ljava/lang/Object;Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
        22: .line 378
            iload 7 /* setVars */
            iconst_1
            if_icmplt 24
        23: .line 379
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 5 /* lexicalScope */
            ldc "a"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isNull:(Ljava/lang/Object;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        24: .line 381
      StackMap locals:
      StackMap stack:
            iload 7 /* setVars */
            iconst_2
            if_icmplt 26
        25: .line 382
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 5 /* lexicalScope */
            ldc "b"
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isNull:(Ljava/lang/Object;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        end local 9 // java.util.List keyList
        end local 8 // int varCount
        end local 7 // int setVars
        26: .line 385
      StackMap locals:
      StackMap stack:
            iload 6 /* line */
            bipush 6
            if_icmpne 28
        27: .line 386
            aload 1 /* env */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester.testGlobalScope:(Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;)V
        28: .line 388
      StackMap locals:
      StackMap stack:
            return
        end local 6 // int line
        end local 5 // java.lang.Object lexicalScope
        end local 4 // java.lang.Object dynamicScope
        end local 3 // com.oracle.truffle.api.frame.VirtualFrame frame
        end local 2 // com.oracle.truffle.api.nodes.Node node
        end local 1 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
        end local 0 // com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   29     0          this  Lcom/oracle/truffle/js/test/instrumentation/ScopeInstrumentTest$DefaultScopeTester;
            0   29     1           env  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
            0   29     2          node  Lcom/oracle/truffle/api/nodes/Node;
            0   29     3         frame  Lcom/oracle/truffle/api/frame/VirtualFrame;
            1   29     4  dynamicScope  Ljava/lang/Object;
            2   29     5  lexicalScope  Ljava/lang/Object;
            3   29     6          line  I
            6   26     7       setVars  I
            9   26     8      varCount  I
            7   26     9       keyList  Ljava/util/List<Ljava/lang/String;>;
    Exceptions:
      throws java.lang.Exception
    MethodParameters:
       Name  Flags
      env    
      node   
      frame  

  private static void testGlobalScope(com.oracle.truffle.api.instrumentation.TruffleInstrument$Env);
    descriptor: (Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=1
        start local 0 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
         0: .line 391
            aload 0 /* env */
            aload 0 /* env */
            invokevirtual com.oracle.truffle.api.instrumentation.TruffleInstrument$Env.getLanguages:()Ljava/util/Map;
            ldc "js"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.nodes.LanguageInfo
            invokevirtual com.oracle.truffle.api.instrumentation.TruffleInstrument$Env.getScope:(Lcom/oracle/truffle/api/nodes/LanguageInfo;)Ljava/lang/Object;
            astore 1 /* globalScope */
        start local 1 // java.lang.Object globalScope
         1: .line 392
            ldc "global"
            aload 1 /* globalScope */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getScopeName:(Ljava/lang/Object;)Ljava/lang/String;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 393
            aload 1 /* globalScope */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getKeys:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* keys */
        start local 2 // java.lang.Object keys
         3: .line 394
            aload 2 /* keys */
            invokestatic org.junit.Assert.assertNotNull:(Ljava/lang/Object;)V
         4: .line 395
            ldc "number of keys >= 1"
            aload 2 /* keys */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getSize:(Ljava/lang/Object;)I
            iconst_1
            if_icmplt 5
            iconst_1
            goto 6
      StackMap locals: com.oracle.truffle.api.instrumentation.TruffleInstrument$Env java.lang.Object java.lang.Object
      StackMap stack: java.lang.String
         5: iconst_0
      StackMap locals: com.oracle.truffle.api.instrumentation.TruffleInstrument$Env java.lang.Object java.lang.Object
      StackMap stack: java.lang.String int
         6: invokestatic org.junit.Assert.assertTrue:(Ljava/lang/String;Z)V
         7: .line 396
            ldc "testFunction"
            astore 3 /* functionName */
        start local 3 // java.lang.String functionName
         8: .line 397
            aload 2 /* keys */
            ldc "testFunction"
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester.hasValue:(Ljava/lang/Object;Ljava/lang/String;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
         9: .line 398
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 1 /* globalScope */
            aload 3 /* functionName */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readMember:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
            astore 4 /* function */
        start local 4 // java.lang.Object function
        10: .line 399
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 4 /* function */
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.isExecutable:(Ljava/lang/Object;)Z
            invokestatic org.junit.Assert.assertTrue:(Z)V
        11: .line 400
            return
        end local 4 // java.lang.Object function
        end local 3 // java.lang.String functionName
        end local 2 // java.lang.Object keys
        end local 1 // java.lang.Object globalScope
        end local 0 // com.oracle.truffle.api.instrumentation.TruffleInstrument$Env env
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   12     0           env  Lcom/oracle/truffle/api/instrumentation/TruffleInstrument$Env;
            1   12     1   globalScope  Ljava/lang/Object;
            3   12     2          keys  Ljava/lang/Object;
            8   12     3  functionName  Ljava/lang/String;
           10   12     4      function  Ljava/lang/Object;
    Exceptions:
      throws java.lang.Exception
    MethodParameters:
      Name  Flags
      env   

  private static boolean hasValue(java.lang.Object, java.lang.String);
    descriptor: (Ljava/lang/Object;Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // java.lang.Object object
        start local 1 // java.lang.String key
         0: .line 403
            aload 0 /* object */
            invokestatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.getSize:(Ljava/lang/Object;)I
            istore 2 /* size */
        start local 2 // int size
         1: .line 404
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         2: goto 7
         3: .line 405
      StackMap locals: int int
      StackMap stack:
            getstatic com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest.INTEROP:Lcom/oracle/truffle/api/interop/InteropLibrary;
            aload 0 /* object */
            iload 3 /* i */
            i2l
            invokevirtual com.oracle.truffle.api.interop.InteropLibrary.readArrayElement:(Ljava/lang/Object;J)Ljava/lang/Object;
            astore 4 /* read */
        start local 4 // java.lang.Object read
         4: .line 406
            aload 4 /* read */
            instanceof java.lang.String
            ifeq 6
            aload 1 /* key */
            aload 4 /* read */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 6
         5: .line 407
            iconst_1
            ireturn
        end local 4 // java.lang.Object read
         6: .line 404
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 3 /* i */
            iload 2 /* size */
            if_icmplt 3
        end local 3 // int i
         8: .line 410
            iconst_0
            ireturn
        end local 2 // int size
        end local 1 // java.lang.String key
        end local 0 // java.lang.Object object
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0  object  Ljava/lang/Object;
            0    9     1     key  Ljava/lang/String;
            1    9     2    size  I
            2    8     3       i  I
            4    6     4    read  Ljava/lang/Object;
    Exceptions:
      throws com.oracle.truffle.api.interop.UnsupportedMessageException, com.oracle.truffle.api.interop.InvalidArrayIndexException
    MethodParameters:
        Name  Flags
      object  
      key     
}
SourceFile: "ScopeInstrumentTest.java"
NestHost: com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest
InnerClasses:
  public final Env = com.oracle.truffle.api.instrumentation.TruffleInstrument$Env of com.oracle.truffle.api.instrumentation.TruffleInstrument
  private DefaultScopeTester = com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$DefaultScopeTester of com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest
  abstract ScopeTester = com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest$ScopeTester of com.oracle.truffle.js.test.instrumentation.ScopeInstrumentTest