public class com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest this
         0: .line 61
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/api/debug/test/ConcurrentDebuggingTest;

  public void testConcurrentBreakpoints();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=11, args_size=1
        start local 0 // com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest this
         0: .line 65
            bipush 100
            istore 1 /* numThreads */
        start local 1 // int numThreads
         1: .line 66
            new java.lang.StringBuilder
            dup
            ldc "ROOT(DEFINE(foo,\n  STATEMENT\n),\nLOOP("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         2: .line 69
            iload 1 /* numThreads */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ", SPAWN(foo)),\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         3: .line 70
            ldc "JOIN())"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         4: .line 66
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 2 /* code */
        start local 2 // java.lang.String code
         5: .line 71
            ldc "instrumentation-test-language"
            aload 2 /* code */
            invokestatic org.graalvm.polyglot.Source.create:(Ljava/lang/String;Ljava/lang/CharSequence;)Lorg/graalvm/polyglot/Source;
            astore 3 /* source */
        start local 3 // org.graalvm.polyglot.Source source
         6: .line 72
            aload 3 /* source */
            invokevirtual org.graalvm.polyglot.Source.getURI:()Ljava/net/URI;
            invokestatic com.oracle.truffle.api.debug.Breakpoint.newBuilder:(Ljava/net/URI;)Lcom/oracle/truffle/api/debug/Breakpoint$Builder;
            iconst_2
            invokevirtual com.oracle.truffle.api.debug.Breakpoint$Builder.lineIs:(I)Lcom/oracle/truffle/api/debug/Breakpoint$Builder;
            invokevirtual com.oracle.truffle.api.debug.Breakpoint$Builder.build:()Lcom/oracle/truffle/api/debug/Breakpoint;
            astore 4 /* breakpoint */
        start local 4 // com.oracle.truffle.api.debug.Breakpoint breakpoint
         7: .line 73
            iconst_0
            anewarray java.lang.String
            invokestatic org.graalvm.polyglot.Context.newBuilder:([Ljava/lang/String;)Lorg/graalvm/polyglot/Context$Builder;
            iconst_1
            invokevirtual org.graalvm.polyglot.Context$Builder.allowCreateThread:(Z)Lorg/graalvm/polyglot/Context$Builder;
            invokevirtual org.graalvm.polyglot.Context$Builder.build:()Lorg/graalvm/polyglot/Context;
            astore 5 /* context */
        start local 5 // org.graalvm.polyglot.Context context
         8: .line 74
            aload 5 /* context */
            invokevirtual org.graalvm.polyglot.Context.getEngine:()Lorg/graalvm/polyglot/Engine;
            invokevirtual org.graalvm.polyglot.Engine.getInstruments:()Ljava/util/Map;
            ldc "debugger"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.graalvm.polyglot.Instrument
            ldc Lcom/oracle/truffle/api/debug/Debugger;
            invokevirtual org.graalvm.polyglot.Instrument.lookup:(Ljava/lang/Class;)Ljava/lang/Object;
            checkcast com.oracle.truffle.api.debug.Debugger
            astore 6 /* debugger */
        start local 6 // com.oracle.truffle.api.debug.Debugger debugger
         9: .line 75
            new java.util.concurrent.atomic.AtomicInteger
            dup
            iconst_0
            invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:(I)V
            astore 7 /* hits */
        start local 7 // java.util.concurrent.atomic.AtomicInteger hits
        10: .line 76
            aconst_null
            astore 8
            aconst_null
            astore 9
        11: aload 6 /* debugger */
            aload 4 /* breakpoint */
            aload 7 /* hits */
            invokedynamic onSuspend(Lcom/oracle/truffle/api/debug/Breakpoint;Ljava/util/concurrent/atomic/AtomicInteger;)Lcom/oracle/truffle/api/debug/SuspendedCallback;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Lcom/oracle/truffle/api/debug/SuspendedEvent;)V
                  com/oracle/truffle/api/debug/test/ConcurrentDebuggingTest.lambda$0(Lcom/oracle/truffle/api/debug/Breakpoint;Ljava/util/concurrent/atomic/AtomicInteger;Lcom/oracle/truffle/api/debug/SuspendedEvent;)V (6)
                  (Lcom/oracle/truffle/api/debug/SuspendedEvent;)V
            invokevirtual com.oracle.truffle.api.debug.Debugger.startSession:(Lcom/oracle/truffle/api/debug/SuspendedCallback;)Lcom/oracle/truffle/api/debug/DebuggerSession;
            astore 10 /* session */
        start local 10 // com.oracle.truffle.api.debug.DebuggerSession session
        12: .line 81
            aload 10 /* session */
            aload 4 /* breakpoint */
            invokevirtual com.oracle.truffle.api.debug.DebuggerSession.install:(Lcom/oracle/truffle/api/debug/Breakpoint;)Lcom/oracle/truffle/api/debug/Breakpoint;
            pop
        13: .line 82
            aload 5 /* context */
            aload 3 /* source */
            invokevirtual org.graalvm.polyglot.Context.eval:(Lorg/graalvm/polyglot/Source;)Lorg/graalvm/polyglot/Value;
            pop
        14: .line 83
            aload 10 /* session */
            ifnull 20
            aload 10 /* session */
            invokevirtual com.oracle.truffle.api.debug.DebuggerSession.close:()V
            goto 20
      StackMap locals: com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest int java.lang.String org.graalvm.polyglot.Source com.oracle.truffle.api.debug.Breakpoint org.graalvm.polyglot.Context com.oracle.truffle.api.debug.Debugger java.util.concurrent.atomic.AtomicInteger java.lang.Throwable java.lang.Throwable com.oracle.truffle.api.debug.DebuggerSession
      StackMap stack: java.lang.Throwable
        15: astore 8
            aload 10 /* session */
            ifnull 16
            aload 10 /* session */
            invokevirtual com.oracle.truffle.api.debug.DebuggerSession.close:()V
        end local 10 // com.oracle.truffle.api.debug.DebuggerSession session
      StackMap locals:
      StackMap stack:
        16: aload 8
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        17: astore 9
            aload 8
            ifnonnull 18
            aload 9
            astore 8
            goto 19
      StackMap locals:
      StackMap stack:
        18: aload 8
            aload 9
            if_acmpeq 19
            aload 8
            aload 9
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        19: aload 8
            athrow
        20: .line 84
      StackMap locals:
      StackMap stack:
            iload 1 /* numThreads */
            i2l
            aload 7 /* hits */
            invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
        21: .line 85
            return
        end local 7 // java.util.concurrent.atomic.AtomicInteger hits
        end local 6 // com.oracle.truffle.api.debug.Debugger debugger
        end local 5 // org.graalvm.polyglot.Context context
        end local 4 // com.oracle.truffle.api.debug.Breakpoint breakpoint
        end local 3 // org.graalvm.polyglot.Source source
        end local 2 // java.lang.String code
        end local 1 // int numThreads
        end local 0 // com.oracle.truffle.api.debug.test.ConcurrentDebuggingTest this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   22     0        this  Lcom/oracle/truffle/api/debug/test/ConcurrentDebuggingTest;
            1   22     1  numThreads  I
            5   22     2        code  Ljava/lang/String;
            6   22     3      source  Lorg/graalvm/polyglot/Source;
            7   22     4  breakpoint  Lcom/oracle/truffle/api/debug/Breakpoint;
            8   22     5     context  Lorg/graalvm/polyglot/Context;
            9   22     6    debugger  Lcom/oracle/truffle/api/debug/Debugger;
           10   22     7        hits  Ljava/util/concurrent/atomic/AtomicInteger;
           12   16    10     session  Lcom/oracle/truffle/api/debug/DebuggerSession;
      Exception table:
        from    to  target  type
          12    14      15  any
          11    17      17  any
    RuntimeVisibleAnnotations: 
      org.junit.Test()

  private static void lambda$0(com.oracle.truffle.api.debug.Breakpoint, java.util.concurrent.atomic.AtomicInteger, com.oracle.truffle.api.debug.SuspendedEvent);
    descriptor: (Lcom/oracle/truffle/api/debug/Breakpoint;Ljava/util/concurrent/atomic/AtomicInteger;Lcom/oracle/truffle/api/debug/SuspendedEvent;)V
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=4, locals=3, args_size=3
        start local 2 // com.oracle.truffle.api.debug.SuspendedEvent event
         0: .line 77
            lconst_1
            aload 2 /* event */
            invokevirtual com.oracle.truffle.api.debug.SuspendedEvent.getBreakpoints:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            i2l
            invokestatic org.junit.Assert.assertEquals:(JJ)V
         1: .line 78
            aload 0
            aload 2 /* event */
            invokevirtual com.oracle.truffle.api.debug.SuspendedEvent.getBreakpoints:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            invokestatic org.junit.Assert.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
         2: .line 79
            aload 1
            invokevirtual java.util.concurrent.atomic.AtomicInteger.incrementAndGet:()I
            pop
         3: .line 80
            return
        end local 2 // com.oracle.truffle.api.debug.SuspendedEvent event
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     2  event  Lcom/oracle/truffle/api/debug/SuspendedEvent;
}
SourceFile: "ConcurrentDebuggingTest.java"
InnerClasses:
  public final Builder = com.oracle.truffle.api.debug.Breakpoint$Builder of com.oracle.truffle.api.debug.Breakpoint
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public final Builder = org.graalvm.polyglot.Context$Builder of org.graalvm.polyglot.Context