public final class com.oracle.truffle.llvm.toolchain.launchers.BinUtil
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.llvm.toolchain.launchers.BinUtil
  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.llvm.toolchain.launchers.BinUtil this
         0: .line 42
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.oracle.truffle.llvm.toolchain.launchers.BinUtil this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/llvm/toolchain/launchers/BinUtil;

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=1
        start local 0 // java.lang.String[] args
         0: .line 44
            invokestatic com.oracle.truffle.llvm.toolchain.launchers.BinUtil.getProcessName:()Ljava/lang/String;
            astore 1 /* processName */
        start local 1 // java.lang.String processName
         1: .line 46
            aload 1 /* processName */
            ifnonnull 4
         2: .line 47
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            ldc "Error: Could not figure out process name"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         3: .line 48
            iconst_1
            invokestatic java.lang.System.exit:(I)V
         4: .line 51
      StackMap locals: java.lang.String
      StackMap stack:
            aload 1 /* processName */
            ldc "llvm-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 6
         5: .line 52
            new java.lang.StringBuilder
            dup
            ldc "llvm-"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* processName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 1 /* processName */
         6: .line 55
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.llvm.toolchain.launchers.common.Driver
            dup
            invokespecial com.oracle.truffle.llvm.toolchain.launchers.common.Driver.<init>:()V
            astore 2 /* driver */
        start local 2 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver driver
         7: .line 56
            aload 2 /* driver */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.getLLVMBinDir:()Ljava/nio/file/Path;
            aload 1 /* processName */
            invokeinterface java.nio.file.Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
            invokeinterface java.nio.file.Path.toString:()Ljava/lang/String;
            astore 3 /* targetName */
        start local 3 // java.lang.String targetName
         8: .line 58
            new java.util.ArrayList
            dup
            aload 0 /* args */
            arraylength
            iconst_1
            iadd
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 4 /* utilArgs */
        start local 4 // java.util.ArrayList utilArgs
         9: .line 59
            aload 4 /* utilArgs */
            aload 3 /* targetName */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        10: .line 60
            aload 0 /* args */
            arraylength
            ifle 12
        11: .line 61
            aload 4 /* utilArgs */
            aload 0 /* args */
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokevirtual java.util.ArrayList.addAll:(Ljava/util/Collection;)Z
            pop
        12: .line 63
      StackMap locals: com.oracle.truffle.llvm.toolchain.launchers.common.Driver java.lang.String java.util.ArrayList
      StackMap stack:
            new java.lang.ProcessBuilder
            dup
            aload 4 /* utilArgs */
            invokespecial java.lang.ProcessBuilder.<init>:(Ljava/util/List;)V
            getstatic java.lang.ProcessBuilder$Redirect.INHERIT:Ljava/lang/ProcessBuilder$Redirect;
            invokevirtual java.lang.ProcessBuilder.redirectError:(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;
            getstatic java.lang.ProcessBuilder$Redirect.INHERIT:Ljava/lang/ProcessBuilder$Redirect;
            invokevirtual java.lang.ProcessBuilder.redirectInput:(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;
            getstatic java.lang.ProcessBuilder$Redirect.INHERIT:Ljava/lang/ProcessBuilder$Redirect;
            invokevirtual java.lang.ProcessBuilder.redirectOutput:(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;
            astore 5 /* pb */
        start local 5 // java.lang.ProcessBuilder pb
        13: .line 64
            aconst_null
            astore 6 /* p */
        start local 6 // java.lang.Process p
        14: .line 66
            aload 5 /* pb */
            invokevirtual java.lang.ProcessBuilder.start:()Ljava/lang/Process;
            astore 6 /* p */
        15: .line 67
            aload 6 /* p */
            invokevirtual java.lang.Process.waitFor:()I
            pop
        16: .line 68
            aload 6 /* p */
            invokevirtual java.lang.Process.exitValue:()I
            invokestatic java.lang.System.exit:(I)V
        17: .line 69
            goto 28
      StackMap locals: java.lang.String[] java.lang.String com.oracle.truffle.llvm.toolchain.launchers.common.Driver java.lang.String java.util.ArrayList java.lang.ProcessBuilder java.lang.Process
      StackMap stack: java.io.IOException
        18: astore 7 /* e */
        start local 7 // java.io.IOException e
        19: .line 70
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "Error: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* e */
            invokevirtual java.io.IOException.getMessage:()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
        20: .line 71
            aload 2 /* driver */
            invokevirtual com.oracle.truffle.llvm.toolchain.launchers.common.Driver.printMissingToolMessage:()V
        21: .line 72
            iconst_1
            invokestatic java.lang.System.exit:(I)V
        end local 7 // java.io.IOException e
        22: goto 28
        23: .line 73
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            astore 7 /* e */
        start local 7 // java.lang.InterruptedException e
        24: .line 74
            aload 6 /* p */
            ifnull 26
        25: .line 75
            aload 6 /* p */
            invokevirtual java.lang.Process.destroyForcibly:()Ljava/lang/Process;
            pop
        26: .line 77
      StackMap locals: java.lang.InterruptedException
      StackMap stack:
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            new java.lang.StringBuilder
            dup
            ldc "Error: Subprocess interrupted: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* e */
            invokevirtual java.lang.InterruptedException.getMessage:()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
        27: .line 78
            iconst_1
            invokestatic java.lang.System.exit:(I)V
        end local 7 // java.lang.InterruptedException e
        28: .line 80
      StackMap locals:
      StackMap stack:
            return
        end local 6 // java.lang.Process p
        end local 5 // java.lang.ProcessBuilder pb
        end local 4 // java.util.ArrayList utilArgs
        end local 3 // java.lang.String targetName
        end local 2 // com.oracle.truffle.llvm.toolchain.launchers.common.Driver driver
        end local 1 // java.lang.String processName
        end local 0 // java.lang.String[] args
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   29     0         args  [Ljava/lang/String;
            1   29     1  processName  Ljava/lang/String;
            7   29     2       driver  Lcom/oracle/truffle/llvm/toolchain/launchers/common/Driver;
            8   29     3   targetName  Ljava/lang/String;
            9   29     4     utilArgs  Ljava/util/ArrayList<Ljava/lang/String;>;
           13   29     5           pb  Ljava/lang/ProcessBuilder;
           14   29     6            p  Ljava/lang/Process;
           19   22     7            e  Ljava/io/IOException;
           24   28     7            e  Ljava/lang/InterruptedException;
      Exception table:
        from    to  target  type
          14    17      18  Class java.io.IOException
          14    17      23  Class java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      args  

  private static java.lang.String getProcessName();
    descriptor: ()Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=0
         0: .line 83
            ldc "org.graalvm.launcher.executablename"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 0 /* binPathName */
        start local 0 // java.lang.String binPathName
         1: .line 85
            aload 0 /* binPathName */
            ifnonnull 7
         2: .line 86
            invokestatic org.graalvm.nativeimage.ProcessProperties.getArgumentVectorBlockSize:()I
            ifgt 4
         3: .line 87
            aconst_null
            areturn
         4: .line 89
      StackMap locals: java.lang.String
      StackMap stack:
            invokestatic org.graalvm.nativeimage.ProcessProperties.getArgumentVectorProgramName:()Ljava/lang/String;
            astore 0 /* binPathName */
         5: .line 91
            aload 0 /* binPathName */
            ifnonnull 7
         6: .line 92
            aconst_null
            areturn
         7: .line 96
      StackMap locals:
      StackMap stack:
            aload 0 /* binPathName */
            iconst_0
            anewarray java.lang.String
            invokestatic java.nio.file.Paths.get:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
            astore 1 /* p */
        start local 1 // java.nio.file.Path p
         8: .line 97
            aload 1 /* p */
            invokeinterface java.nio.file.Path.getFileName:()Ljava/nio/file/Path;
            astore 2 /* f */
        start local 2 // java.nio.file.Path f
         9: .line 99
            aload 2 /* f */
            ifnonnull 11
        10: .line 100
            aconst_null
            areturn
        11: .line 103
      StackMap locals: java.nio.file.Path java.nio.file.Path
      StackMap stack:
            aload 2 /* f */
            invokeinterface java.nio.file.Path.toString:()Ljava/lang/String;
            areturn
        end local 2 // java.nio.file.Path f
        end local 1 // java.nio.file.Path p
        end local 0 // java.lang.String binPathName
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1   12     0  binPathName  Ljava/lang/String;
            8   12     1            p  Ljava/nio/file/Path;
            9   12     2            f  Ljava/nio/file/Path;
}
SourceFile: "BinUtil.java"
InnerClasses:
  public abstract Redirect = java.lang.ProcessBuilder$Redirect of java.lang.ProcessBuilder