public class com.oracle.truffle.llvm.toolchain.launchers.common.Driver
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.llvm.toolchain.launchers.common.Driver
  super_class: java.lang.Object
{
  protected final java.lang.String exe;
    descriptor: Ljava/lang/String;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final boolean isBundledTool;
    descriptor: Z
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  private static final boolean hasJreDir;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 85
            ldc "java.specification.version"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            ldc "1."
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            putstatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.hasJreDir:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.lang.String, boolean);
    descriptor: (Ljava/lang/String;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.lang.String exe
        start local 2 // boolean inLLVMDir
         0: .line 48
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 49
            aload 0 /* this */
            iload 2 /* inLLVMDir */
            ifeq 2
            aload 0 /* this */
            aload 1 /* exe */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getLLVMExecutable:(Ljava/lang/String;)Ljava/nio/file/Path;
            invokeinterface java.nio.file.Path.toString:()Ljava/lang/String;
            goto 3
      StackMap locals: com.oracle.truffle.llvm.toolchain.launchers.common.Driver java.lang.String int
      StackMap stack: com.oracle.truffle.llvm.toolchain.launchers.common.Driver
         2: aload 1 /* exe */
      StackMap locals: com.oracle.truffle.llvm.toolchain.launchers.common.Driver java.lang.String int
      StackMap stack: com.oracle.truffle.llvm.toolchain.launchers.common.Driver java.lang.String
         3: putfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.exe:Ljava/lang/String;
         4: .line 50
            aload 0 /* this */
            iload 2 /* inLLVMDir */
            putfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.isBundledTool:Z
         5: .line 51
            return
        end local 2 // boolean inLLVMDir
        end local 1 // java.lang.String exe
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    6     0       this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    6     1        exe  Ljava/lang/String;
            0    6     2  inLLVMDir  Z
    MethodParameters:
           Name  Flags
      exe        
      inLLVMDir  

  public void <init>(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.lang.String exe
         0: .line 54
            aload 0 /* this */
            aload 1 /* exe */
            iconst_1
            invokespecial com.oracle.truffle.llvm.toolchain.launchers.common.Driver.<init>:(Ljava/lang/String;Z)V
         1: .line 55
            return
        end local 1 // java.lang.String exe
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    2     1   exe  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      exe   

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
         0: .line 57
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 58
            aload 0 /* this */
            aconst_null
            putfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.exe:Ljava/lang/String;
         2: .line 59
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.isBundledTool:Z
         3: .line 60
            return
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;

  private static java.nio.file.Path getRuntimeDir();
    descriptor: ()Ljava/nio/file/Path;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 88
            invokestatic org.graalvm.home.HomeFinder.getInstance:()Lorg/graalvm/home/HomeFinder;
            invokevirtual org.graalvm.home.HomeFinder.getHomeFolder:()Ljava/nio/file/Path;
            astore 0 /* runtimeDir */
        start local 0 // java.nio.file.Path runtimeDir
         1: .line 89
            aload 0 /* runtimeDir */
            ifnonnull 3
         2: .line 90
            new java.lang.IllegalStateException
            dup
            ldc "Could not find GraalVM home"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 92
      StackMap locals: java.nio.file.Path
      StackMap stack:
            getstatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.hasJreDir:Z
            ifeq 5
         4: .line 93
            aload 0 /* runtimeDir */
            ldc "jre"
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            astore 0 /* runtimeDir */
         5: .line 95
      StackMap locals:
      StackMap stack:
            aload 0 /* runtimeDir */
            areturn
        end local 0 // java.nio.file.Path runtimeDir
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            1    6     0  runtimeDir  Ljava/nio/file/Path;

  public java.nio.file.Path getLLVMBinDir();
    descriptor: ()Ljava/nio/file/Path;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
         0: .line 99
            ldc "llvm.bin.dir"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 1 /* property */
        start local 1 // java.lang.String property
         1: .line 100
            aload 1 /* property */
            ifnull 3
         2: .line 101
            aload 1 /* property */
            iconst_0
            anewarray java.lang.String
            invokestatic java.nio.file.Paths.get:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
            areturn
         3: .line 105
      StackMap locals: java.lang.String
      StackMap stack:
            invokestatic org.graalvm.home.HomeFinder.getInstance:()Lorg/graalvm/home/HomeFinder;
            invokevirtual org.graalvm.home.HomeFinder.getLanguageHomes:()Ljava/util/Map;
            ldc "llvm-toolchain"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.nio.file.Path
            astore 2 /* toolchainHome */
        start local 2 // java.nio.file.Path toolchainHome
         4: .line 106
            aload 2 /* toolchainHome */
            ifnull 6
         5: .line 107
            aload 2 /* toolchainHome */
            ldc "bin"
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            areturn
         6: .line 110
      StackMap locals: java.nio.file.Path
      StackMap stack:
            invokestatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getRuntimeDir:()Ljava/nio/file/Path;
            ldc "lib"
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            ldc "llvm"
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            ldc "bin"
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            areturn
        end local 2 // java.nio.file.Path toolchainHome
        end local 1 // java.lang.String property
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            1    7     1       property  Ljava/lang/String;
            4    7     2  toolchainHome  Ljava/nio/file/Path;

  public java.nio.file.Path getSulongHome();
    descriptor: ()Ljava/nio/file/Path;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
         0: .line 114
            invokestatic org.graalvm.home.HomeFinder.getInstance:()Lorg/graalvm/home/HomeFinder;
            invokevirtual org.graalvm.home.HomeFinder.getLanguageHomes:()Ljava/util/Map;
            ldc "llvm"
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.nio.file.Path
            astore 1 /* sulongHome */
        start local 1 // java.nio.file.Path sulongHome
         1: .line 115
            aload 1 /* sulongHome */
            ifnull 3
         2: .line 116
            aload 1 /* sulongHome */
            areturn
         3: .line 119
      StackMap locals: java.nio.file.Path
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            ldc "Could not find the llvm home"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.nio.file.Path sulongHome
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            1    4     1  sulongHome  Ljava/nio/file/Path;

  private static java.lang.String getVersion();
    descriptor: ()Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=0
         0: .line 123
            invokestatic org.graalvm.home.Version.getCurrent:()Lorg/graalvm/home/Version;
            astore 0 /* version */
        start local 0 // org.graalvm.home.Version version
         1: .line 124
            aload 0 /* version */
            invokevirtual org.graalvm.home.Version.isSnapshot:()Z
            ifeq 3
         2: .line 125
            ldc "Development Build"
            areturn
         3: .line 127
      StackMap locals: org.graalvm.home.Version
      StackMap stack:
            aload 0 /* version */
            invokevirtual org.graalvm.home.Version.toString:()Ljava/lang/String;
            areturn
        end local 0 // org.graalvm.home.Version version
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            1    4     0  version  Lorg/graalvm/home/Version;

  public void runDriver(java.util.List<java.lang.String>, java.util.List<java.lang.String>, boolean, boolean, );
    descriptor: (Ljava/util/List;Ljava/util/List;ZZZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=6
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.util.List sulongArgs
        start local 2 // java.util.List userArgs
        start local 3 // boolean verbose
        start local 4 // boolean help
        start local 5 // boolean earlyExit
         0: .line 132
            aload 0 /* this */
            aload 1 /* sulongArgs */
            aload 2 /* userArgs */
            iload 3 /* verbose */
            iload 4 /* help */
            iload 5 /* earlyExit */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.runDriverExit:(Ljava/util/List;Ljava/util/List;ZZZ)V
         1: .line 133
            return
        end local 5 // boolean earlyExit
        end local 4 // boolean help
        end local 3 // boolean verbose
        end local 2 // java.util.List userArgs
        end local 1 // java.util.List sulongArgs
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    2     1  sulongArgs  Ljava/util/List<Ljava/lang/String;>;
            0    2     2    userArgs  Ljava/util/List<Ljava/lang/String;>;
            0    2     3     verbose  Z
            0    2     4        help  Z
            0    2     5   earlyExit  Z
    Signature: (Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Ljava/lang/String;>;ZZZ)V
    MethodParameters:
            Name  Flags
      sulongArgs  
      userArgs    
      verbose     
      help        
      earlyExit   

  public final void runDriverExit(java.util.List<java.lang.String>, java.util.List<java.lang.String>, boolean, boolean, );
    descriptor: (Ljava/util/List;Ljava/util/List;ZZZ)V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=6, locals=7, args_size=6
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.util.List sulongArgs
        start local 2 // java.util.List userArgs
        start local 3 // boolean verbose
        start local 4 // boolean help
        start local 5 // boolean earlyExit
         0: .line 137
            aload 0 /* this */
            aload 1 /* sulongArgs */
            aload 2 /* userArgs */
            iload 3 /* verbose */
            iload 4 /* help */
            iload 5 /* earlyExit */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.runDriverReturn:(Ljava/util/List;Ljava/util/List;ZZZ)I
            invokestatic java.lang.System.exit:(I)V
         1: .line 138
            goto 7
      StackMap locals:
      StackMap stack: java.io.IOException
         2: pop
         3: .line 139
            iconst_1
            invokestatic java.lang.System.exit:(I)V
            goto 7
         4: .line 140
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 6 /* e */
        start local 6 // java.lang.Exception e
         5: .line 141
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "Exception: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 6 /* e */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         6: .line 142
            iconst_1
            invokestatic java.lang.System.exit:(I)V
        end local 6 // java.lang.Exception e
         7: .line 144
      StackMap locals:
      StackMap stack:
            return
        end local 5 // boolean earlyExit
        end local 4 // boolean help
        end local 3 // boolean verbose
        end local 2 // java.util.List userArgs
        end local 1 // java.util.List sulongArgs
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0        this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    8     1  sulongArgs  Ljava/util/List<Ljava/lang/String;>;
            0    8     2    userArgs  Ljava/util/List<Ljava/lang/String;>;
            0    8     3     verbose  Z
            0    8     4        help  Z
            0    8     5   earlyExit  Z
            5    7     6           e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.IOException
           0     1       4  Class java.lang.Exception
    Signature: (Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Ljava/lang/String;>;ZZZ)V
    MethodParameters:
            Name  Flags
      sulongArgs  
      userArgs    
      verbose     
      help        
      earlyExit   

  public final int runDriverReturn(java.util.List<java.lang.String>, java.util.List<java.lang.String>, boolean, boolean, );
    descriptor: (Ljava/util/List;Ljava/util/List;ZZZ)I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=5, locals=10, args_size=6
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.util.List sulongArgs
        start local 2 // java.util.List userArgs
        start local 3 // boolean verbose
        start local 4 // boolean help
        start local 5 // boolean earlyExit
         0: .line 147
            new java.util.ArrayList
            dup
            aload 1 /* sulongArgs */
            invokeinterface java.util.List.size:()I
            aload 2 /* userArgs */
            invokeinterface java.util.List.size:()I
            iadd
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 6 /* toolArgs */
        start local 6 // java.util.ArrayList toolArgs
         1: .line 149
            aload 6 /* toolArgs */
            aload 1 /* sulongArgs */
            invokevirtual java.util.ArrayList.addAll:(Ljava/util/Collection;)Z
            pop
         2: .line 151
            aload 6 /* toolArgs */
            aload 2 /* userArgs */
            invokevirtual java.util.ArrayList.addAll:(Ljava/util/Collection;)Z
            pop
         3: .line 152
            aload 0 /* this */
            iload 3 /* verbose */
            iload 4 /* help */
            iload 5 /* earlyExit */
            aload 6 /* toolArgs */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.printInfos:(ZZZLjava/util/ArrayList;)V
         4: .line 153
            iload 5 /* earlyExit */
            ifeq 6
         5: .line 154
            iconst_0
            ireturn
         6: .line 156
      StackMap locals: java.util.ArrayList
      StackMap stack:
            new java.lang.ProcessBuilder
            dup
            aload 6 /* toolArgs */
            invokespecial java.lang.ProcessBuilder.<init>:(Ljava/util/List;)V
            astore 7 /* pb */
        start local 7 // java.lang.ProcessBuilder pb
         7: .line 157
            iload 3 /* verbose */
            ifeq 10
         8: .line 159
            aload 7 /* pb */
            invokestatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.setupRedirectsDefault:(Ljava/lang/ProcessBuilder;)Ljava/lang/ProcessBuilder;
            pop
         9: .line 160
            goto 11
        10: .line 161
      StackMap locals: java.lang.ProcessBuilder
      StackMap stack:
            aload 0 /* this */
            aload 7 /* pb */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.setupRedirects:(Ljava/lang/ProcessBuilder;)Ljava/lang/ProcessBuilder;
            pop
        11: .line 163
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 8 /* p */
        start local 8 // java.lang.Process p
        12: .line 166
            aload 7 /* pb */
            invokevirtual java.lang.ProcessBuilder.start:()Ljava/lang/Process;
            astore 8 /* p */
        13: .line 167
            iload 3 /* verbose */
            ifne 15
        14: .line 169
            aload 0 /* this */
            aload 8 /* p */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            aload 8 /* p */
            invokevirtual java.lang.Process.getOutputStream:()Ljava/io/OutputStream;
            aload 8 /* p */
            invokevirtual java.lang.Process.getErrorStream:()Ljava/io/InputStream;
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.processIO:(Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/InputStream;)V
        15: .line 172
      StackMap locals: java.lang.Process
      StackMap stack:
            aload 8 /* p */
            invokevirtual java.lang.Process.waitFor:()I
            pop
        16: .line 174
            aload 8 /* p */
            invokevirtual java.lang.Process.exitValue:()I
        17: ireturn
        18: .line 175
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 9 /* ioe */
        start local 9 // java.io.IOException ioe
        19: .line 177
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.isBundledTool:Z
            ifeq 21
        20: .line 178
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.printMissingToolMessage:()V
        21: .line 180
      StackMap locals: java.io.IOException
      StackMap stack:
            aload 9 /* ioe */
            athrow
        end local 9 // java.io.IOException ioe
        22: .line 181
      StackMap locals: com.oracle.truffle.llvm.toolchain.launchers.common.Driver java.util.List java.util.List int int int java.util.ArrayList java.lang.ProcessBuilder java.lang.Process
      StackMap stack: java.lang.Exception
            astore 9 /* e */
        start local 9 // java.lang.Exception e
        23: .line 182
            aload 8 /* p */
            ifnull 25
        24: .line 183
            aload 8 /* p */
            invokevirtual java.lang.Process.destroyForcibly:()Ljava/lang/Process;
            pop
        25: .line 185
      StackMap locals: java.lang.Exception
      StackMap stack:
            aload 9 /* e */
            athrow
        end local 9 // java.lang.Exception e
        end local 8 // java.lang.Process p
        end local 7 // java.lang.ProcessBuilder pb
        end local 6 // java.util.ArrayList toolArgs
        end local 5 // boolean earlyExit
        end local 4 // boolean help
        end local 3 // boolean verbose
        end local 2 // java.util.List userArgs
        end local 1 // java.util.List sulongArgs
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   26     0        this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0   26     1  sulongArgs  Ljava/util/List<Ljava/lang/String;>;
            0   26     2    userArgs  Ljava/util/List<Ljava/lang/String;>;
            0   26     3     verbose  Z
            0   26     4        help  Z
            0   26     5   earlyExit  Z
            1   26     6    toolArgs  Ljava/util/ArrayList<Ljava/lang/String;>;
            7   26     7          pb  Ljava/lang/ProcessBuilder;
           12   26     8           p  Ljava/lang/Process;
           19   22     9         ioe  Ljava/io/IOException;
           23   26     9           e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
          12    17      18  Class java.io.IOException
          12    17      22  Class java.lang.Exception
    Exceptions:
      throws java.lang.Exception
    Signature: (Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Ljava/lang/String;>;ZZZ)I
    MethodParameters:
            Name  Flags
      sulongArgs  
      userArgs    
      verbose     
      help        
      earlyExit   

  protected void processIO(java.io.InputStream, java.io.OutputStream, java.io.InputStream);
    descriptor: (Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/io/InputStream;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=0, locals=4, args_size=4
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.io.InputStream inputStream
        start local 2 // java.io.OutputStream outputStream
        start local 3 // java.io.InputStream errorStream
         0: .line 195
            return
        end local 3 // java.io.InputStream errorStream
        end local 2 // java.io.OutputStream outputStream
        end local 1 // java.io.InputStream inputStream
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    1     0          this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    1     1   inputStream  Ljava/io/InputStream;
            0    1     2  outputStream  Ljava/io/OutputStream;
            0    1     3   errorStream  Ljava/io/InputStream;
    MethodParameters:
              Name  Flags
      inputStream   
      outputStream  
      errorStream   

  protected java.lang.ProcessBuilder setupRedirects(java.lang.ProcessBuilder);
    descriptor: (Ljava/lang/ProcessBuilder;)Ljava/lang/ProcessBuilder;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.lang.ProcessBuilder pb
         0: .line 198
            aload 1 /* pb */
            invokestatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.setupRedirectsDefault:(Ljava/lang/ProcessBuilder;)Ljava/lang/ProcessBuilder;
            areturn
        end local 1 // java.lang.ProcessBuilder pb
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    1     1    pb  Ljava/lang/ProcessBuilder;
    MethodParameters:
      Name  Flags
      pb    

  private static java.lang.ProcessBuilder setupRedirectsDefault(java.lang.ProcessBuilder);
    descriptor: (Ljava/lang/ProcessBuilder;)Ljava/lang/ProcessBuilder;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.lang.ProcessBuilder pb
         0: .line 202
            aload 0 /* pb */
            invokevirtual java.lang.ProcessBuilder.inheritIO:()Ljava/lang/ProcessBuilder;
            areturn
        end local 0 // java.lang.ProcessBuilder pb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0    pb  Ljava/lang/ProcessBuilder;
    MethodParameters:
      Name  Flags
      pb    

  public void printMissingToolMessage();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
         0: .line 206
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "Tool execution failed. Are you sure the toolchain is available at "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getLLVMBinDir:()Ljava/nio/file/Path;
            invokeinterface java.nio.file.Path.getParent:()Ljava/nio/file/Path;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         1: .line 207
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            ldc "You can install it via GraalVM updater: `gu install llvm-toolchain`"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         2: .line 208
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            invokevirtual java.io.PrintStream.println:()V
         3: .line 209
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            ldc "More infos: https://www.graalvm.org/docs/reference-manual/languages/llvm/"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         4: .line 210
            return
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;

  private void printInfos(boolean, boolean, boolean, java.util.ArrayList<java.lang.String>);
    descriptor: (ZZZLjava/util/ArrayList;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // boolean verbose
        start local 2 // boolean help
        start local 3 // boolean earlyExit
        start local 4 // java.util.ArrayList toolArgs
         0: .line 213
            iload 2 /* help */
            ifeq 9
         1: .line 214
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "##################################################"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         2: .line 215
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "This it the the GraalVM wrapper script for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getTool:()Ljava/nio/file/Path;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         3: .line 216
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            invokevirtual java.io.PrintStream.println:()V
         4: .line 217
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "Its purpose is to make it easy to compile native projects to be used with"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         5: .line 218
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "GraalVM's LLVM IR engine (bin/lli)."
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         6: .line 219
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "More infos: https://www.graalvm.org/docs/reference-manual/languages/llvm/"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         7: .line 220
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "Wrapped executable: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.exe:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         8: .line 221
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "GraalVM version: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            invokestatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getVersion:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         9: .line 223
      StackMap locals:
      StackMap stack:
            iload 1 /* verbose */
            ifeq 13
        10: .line 224
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "GraalVM wrapper script for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getTool:()Ljava/nio/file/Path;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        11: .line 225
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "GraalVM version: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            invokestatic com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getVersion:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        12: .line 226
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "running: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " "
            aload 4 /* toolArgs */
            invokestatic java.lang.String.join:(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        13: .line 228
      StackMap locals:
      StackMap stack:
            iload 2 /* help */
            ifeq 18
        14: .line 229
            iload 3 /* earlyExit */
            ifne 17
        15: .line 230
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            invokevirtual java.io.PrintStream.println:()V
        16: .line 231
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "The following is the output of the wrapped tool:"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        17: .line 233
      StackMap locals:
      StackMap stack:
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "##################################################"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        18: .line 235
      StackMap locals:
      StackMap stack:
            return
        end local 4 // java.util.ArrayList toolArgs
        end local 3 // boolean earlyExit
        end local 2 // boolean help
        end local 1 // boolean verbose
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   19     0       this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0   19     1    verbose  Z
            0   19     2       help  Z
            0   19     3  earlyExit  Z
            0   19     4   toolArgs  Ljava/util/ArrayList<Ljava/lang/String;>;
    Signature: (ZZZLjava/util/ArrayList<Ljava/lang/String;>;)V
    MethodParameters:
           Name  Flags
      verbose    
      help       
      earlyExit  
      toolArgs   

  private java.nio.file.Path getTool();
    descriptor: ()Ljava/nio/file/Path;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
         0: .line 238
            aload 0 /* this */
            getfield com.oracle.truffle.llvm.toolchain.launchers.common.Driver.exe:Ljava/lang/String;
            iconst_0
            anewarray java.lang.String
            invokestatic java.nio.file.Paths.get:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
            invokeinterface java.nio.file.Path.getFileName:()Ljava/nio/file/Path;
            areturn
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;

  public java.nio.file.Path getLLVMExecutable(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/nio/file/Path;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
        start local 1 // java.lang.String tool
         0: .line 242
            aload 0 /* this */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getLLVMBinDir:()Ljava/nio/file/Path;
            aload 1 /* tool */
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            areturn
        end local 1 // java.lang.String tool
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            0    1     1  tool  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      tool  
}
SourceFile: "Driver.java"
NestMembers:
  com.oracle.truffle.llvm.toolchain.launchers.common.Driver$OS
InnerClasses:
  public final OS = com.oracle.truffle.llvm.toolchain.launchers.common.Driver$OS of com.oracle.truffle.llvm.toolchain.launchers.common.Driver