public class org.jruby.util.io.PosixShim
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.util.io.PosixShim
  super_class: java.lang.Object
{
  public static final int LOCK_SH;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  public static final int LOCK_EX;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  public static final int LOCK_NB;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  public static final int LOCK_UN;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 8

  public static final int SEEK_SET;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  public static final int SEEK_CUR;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  public static final int SEEK_END;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final int NATIVE_EOF;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int JAVA_EOF;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -1

  public static final org.jruby.util.io.PosixShim$WaitMacros WAIT_MACROS;
    descriptor: Lorg/jruby/util/io/PosixShim$WaitMacros;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public java.lang.Throwable error;
    descriptor: Ljava/lang/Throwable;
    flags: (0x0001) ACC_PUBLIC

  private java.lang.ThreadLocal<jnr.constants.platform.Errno> errno;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/lang/ThreadLocal<Ljnr/constants/platform/Errno;>;

  public java.lang.String errmsg;
    descriptor: Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC

  private final jnr.posix.POSIX posix;
    descriptor: Ljnr/posix/POSIX;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.jruby.Ruby runtime;
    descriptor: Lorg/jruby/Ruby;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private static final java.lang.Object _umaskLock;
    descriptor: Ljava/lang/Object;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static int _cachedUmask;
    descriptor: I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 391
            getstatic org.jruby.platform.Platform.IS_BSD:Z
            ifeq 3
         1: .line 392
            new org.jruby.util.io.PosixShim$BSDWaitMacros
            dup
            invokespecial org.jruby.util.io.PosixShim$BSDWaitMacros.<init>:()V
            putstatic org.jruby.util.io.PosixShim.WAIT_MACROS:Lorg/jruby/util/io/PosixShim$WaitMacros;
         2: .line 393
            goto 4
         3: .line 395
      StackMap locals:
      StackMap stack:
            new org.jruby.util.io.PosixShim$LinuxWaitMacros
            dup
            invokespecial org.jruby.util.io.PosixShim$LinuxWaitMacros.<init>:()V
            putstatic org.jruby.util.io.PosixShim.WAIT_MACROS:Lorg/jruby/util/io/PosixShim$WaitMacros;
         4: .line 677
      StackMap locals:
      StackMap stack:
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putstatic org.jruby.util.io.PosixShim._umaskLock:Ljava/lang/Object;
         5: .line 682
            iconst_0
            putstatic org.jruby.util.io.PosixShim._cachedUmask:I
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.jruby.Ruby);
    descriptor: (Lorg/jruby/Ruby;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.Ruby runtime
         0: .line 37
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 657
            aload 0 /* this */
            new java.lang.ThreadLocal
            dup
            invokespecial java.lang.ThreadLocal.<init>:()V
            putfield org.jruby.util.io.PosixShim.errno:Ljava/lang/ThreadLocal;
         2: .line 38
            aload 0 /* this */
            aload 1 /* runtime */
            putfield org.jruby.util.io.PosixShim.runtime:Lorg/jruby/Ruby;
         3: .line 39
            aload 0 /* this */
            aload 1 /* runtime */
            invokevirtual org.jruby.Ruby.getPosix:()Ljnr/posix/POSIX;
            putfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
         4: .line 40
            return
        end local 1 // org.jruby.Ruby runtime
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lorg/jruby/util/io/PosixShim;
            0    5     1  runtime  Lorg/jruby/Ruby;
    MethodParameters:
         Name  Flags
      runtime  

  public long lseek(org.jruby.util.io.ChannelFD, long, int);
    descriptor: (Lorg/jruby/util/io/ChannelFD;JI)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=4
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // long offset
        start local 4 // int type
         0: .line 44
            aload 0 /* this */
            invokevirtual org.jruby.util.io.PosixShim.clear:()V
         1: .line 46
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            ifnull 18
         2: .line 47
            iconst_0
            istore 5 /* adj */
        start local 5 // int adj
         3: .line 49
            iload 4 /* type */
            tableswitch { // 0 - 2
                    0: 4
                    1: 6
                    2: 8
              default: 10
          }
         4: .line 51
      StackMap locals: int
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            lload 2 /* offset */
            invokeinterface java.nio.channels.SeekableByteChannel.position:(J)Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.position:()J
         5: lreturn
         6: .line 53
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.position:()J
            iload 5 /* adj */
            i2l
            lsub
            lload 2 /* offset */
            ladd
            invokeinterface java.nio.channels.SeekableByteChannel.position:(J)Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.position:()J
         7: lreturn
         8: .line 55
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.size:()J
            lload 2 /* offset */
            ladd
            invokeinterface java.nio.channels.SeekableByteChannel.position:(J)Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.position:()J
         9: lreturn
        10: .line 57
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        11: .line 58
            ldc -1
            lreturn
        12: .line 60
      StackMap locals:
      StackMap stack: java.lang.IllegalArgumentException
            pop
        13: .line 61
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        14: .line 62
            ldc -1
            lreturn
        15: .line 63
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 6 /* ioe */
        start local 6 // java.io.IOException ioe
        16: .line 64
            aload 0 /* this */
            aload 6 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        17: .line 65
            ldc -1
            lreturn
        end local 6 // java.io.IOException ioe
        end local 5 // int adj
        18: .line 67
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            ifnull 22
        19: .line 69
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            invokeinterface jnr.enxio.channels.NativeSelectableChannel.getFD:()I
            lload 2 /* offset */
            iload 4 /* type */
            invokeinterface jnr.posix.POSIX.lseekLong:(IJI)J
            lstore 5 /* ret */
        start local 5 // long ret
        20: .line 70
            lload 5 /* ret */
            ldc -1
            lcmp
            ifne 21
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        21: .line 71
      StackMap locals: long
      StackMap stack:
            lload 5 /* ret */
            lreturn
        end local 5 // long ret
        22: .line 74
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            ifnull 25
        23: .line 83
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EPIPE:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        24: .line 84
            ldc -1
            lreturn
        25: .line 87
      StackMap locals:
      StackMap stack:
            lconst_0
            lreturn
        end local 4 // int type
        end local 2 // long offset
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   26     0    this  Lorg/jruby/util/io/PosixShim;
            0   26     1      fd  Lorg/jruby/util/io/ChannelFD;
            0   26     2  offset  J
            0   26     4    type  I
            3   18     5     adj  I
           16   18     6     ioe  Ljava/io/IOException;
           20   22     5     ret  J
      Exception table:
        from    to  target  type
           3     5      12  Class java.lang.IllegalArgumentException
           6     7      12  Class java.lang.IllegalArgumentException
           8     9      12  Class java.lang.IllegalArgumentException
          10    11      12  Class java.lang.IllegalArgumentException
           3     5      15  Class java.io.IOException
           6     7      15  Class java.io.IOException
           8     9      15  Class java.io.IOException
          10    11      15  Class java.io.IOException
    MethodParameters:
        Name  Flags
      fd      
      offset  
      type    

  public int write(org.jruby.util.io.ChannelFD, byte[], int, int, boolean);
    descriptor: (Lorg/jruby/util/io/ChannelFD;[BIIZ)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=8, args_size=6
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // byte[] bytes
        start local 3 // int offset
        start local 4 // int length
        start local 5 // boolean nonblock
         0: .line 91
            aload 0 /* this */
            invokevirtual org.jruby.util.io.PosixShim.clear:()V
         1: .line 94
            aload 2 /* bytes */
            iload 3 /* offset */
            iload 4 /* length */
            invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
            astore 6 /* tmp */
        start local 6 // java.nio.ByteBuffer tmp
         2: .line 102
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chWrite:Ljava/nio/channels/WritableByteChannel;
            ifnonnull 5
         3: .line 103
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EACCES:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         4: .line 104
            iconst_m1
            ireturn
         5: .line 106
      StackMap locals: java.nio.ByteBuffer
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chWrite:Ljava/nio/channels/WritableByteChannel;
            aload 6 /* tmp */
            invokeinterface java.nio.channels.WritableByteChannel.write:(Ljava/nio/ByteBuffer;)I
            istore 7 /* written */
        start local 7 // int written
         6: .line 108
            iload 7 /* written */
            ifne 10
            iload 4 /* length */
            ifle 10
         7: .line 110
            iload 5 /* nonblock */
            ifeq 10
         8: .line 111
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EAGAIN:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         9: .line 112
            iconst_m1
            ireturn
        10: .line 116
      StackMap locals: int
      StackMap stack:
            iload 7 /* written */
        11: ireturn
        end local 7 // int written
        12: .line 117
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD byte[] int int int java.nio.ByteBuffer
      StackMap stack: java.io.IOException
            astore 7 /* ioe */
        start local 7 // java.io.IOException ioe
        13: .line 118
            aload 0 /* this */
            aload 7 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        14: .line 119
            aload 0 /* this */
            aload 7 /* ioe */
            putfield org.jruby.util.io.PosixShim.error:Ljava/lang/Throwable;
        15: .line 120
            iconst_m1
            ireturn
        end local 7 // java.io.IOException ioe
        end local 6 // java.nio.ByteBuffer tmp
        end local 5 // boolean nonblock
        end local 4 // int length
        end local 3 // int offset
        end local 2 // byte[] bytes
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   16     0      this  Lorg/jruby/util/io/PosixShim;
            0   16     1        fd  Lorg/jruby/util/io/ChannelFD;
            0   16     2     bytes  [B
            0   16     3    offset  I
            0   16     4    length  I
            0   16     5  nonblock  Z
            2   16     6       tmp  Ljava/nio/ByteBuffer;
            6   12     7   written  I
           13   16     7       ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2     4      12  Class java.io.IOException
           5     9      12  Class java.io.IOException
          10    11      12  Class java.io.IOException
    MethodParameters:
          Name  Flags
      fd        
      bytes     
      offset    
      length    
      nonblock  

  public int read(org.jruby.util.io.ChannelFD, byte[], int, int, boolean);
    descriptor: (Lorg/jruby/util/io/ChannelFD;[BIIZ)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=10, args_size=6
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // byte[] target
        start local 3 // int offset
        start local 4 // int length
        start local 5 // boolean nonblock
         0: .line 128
            aload 0 /* this */
            invokevirtual org.jruby.util.io.PosixShim.clear:()V
         1: .line 131
            iload 5 /* nonblock */
            ifeq 12
         2: .line 134
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            ifnonnull 12
         3: .line 137
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            ifnull 9
         4: .line 138
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            invokevirtual java.nio.channels.FileChannel.position:()J
            lstore 6 /* position */
        start local 6 // long position
         5: .line 139
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            invokevirtual java.nio.channels.FileChannel.size:()J
            lstore 8 /* size */
        start local 8 // long size
         6: .line 140
            lload 6 /* position */
            ldc -1
            lcmp
            ifeq 7
            lload 8 /* size */
            ldc -1
            lcmp
            ifeq 7
            lload 6 /* position */
            lload 8 /* size */
            lcmp
            iflt 12
         7: .line 143
      StackMap locals: long long
      StackMap stack:
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EAGAIN:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         8: .line 144
            iconst_m1
            ireturn
        end local 8 // long size
        end local 6 // long position
         9: .line 146
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            ifnull 10
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.isNativeFile:Z
            ifne 12
        10: .line 149
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EAGAIN:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        11: .line 150
            iconst_m1
            ireturn
        12: .line 156
      StackMap locals:
      StackMap stack:
            aload 2 /* target */
            iload 3 /* offset */
            iload 4 /* length */
            invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
            astore 6 /* buffer */
        start local 6 // java.nio.ByteBuffer buffer
        13: .line 157
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chRead:Ljava/nio/channels/ReadableByteChannel;
            aload 6 /* buffer */
            invokeinterface java.nio.channels.ReadableByteChannel.read:(Ljava/nio/ByteBuffer;)I
            istore 7 /* read */
        start local 7 // int read
        14: .line 159
            iload 5 /* nonblock */
            ifeq 23
        15: .line 160
            iload 7 /* read */
            iconst_m1
            if_icmpne 18
        16: .line 161
            iconst_0
            istore 7 /* read */
        17: .line 162
            goto 24
      StackMap locals: java.nio.ByteBuffer int
      StackMap stack:
        18: iload 7 /* read */
            ifne 21
        19: .line 163
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EAGAIN:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        20: .line 164
            iconst_m1
            ireturn
        21: .line 166
      StackMap locals:
      StackMap stack:
            iload 7 /* read */
        22: ireturn
        23: .line 170
      StackMap locals:
      StackMap stack:
            iload 7 /* read */
            iconst_m1
            if_icmpne 24
            iconst_0
            istore 7 /* read */
        24: .line 173
      StackMap locals:
      StackMap stack:
            iload 7 /* read */
        25: ireturn
        end local 7 // int read
        end local 6 // java.nio.ByteBuffer buffer
        26: .line 174
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD byte[] int int int
      StackMap stack: java.io.IOException
            astore 6 /* ioe */
        start local 6 // java.io.IOException ioe
        27: .line 175
            aload 0 /* this */
            aload 6 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        28: .line 176
            iconst_m1
            ireturn
        end local 6 // java.io.IOException ioe
        end local 5 // boolean nonblock
        end local 4 // int length
        end local 3 // int offset
        end local 2 // byte[] target
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   29     0      this  Lorg/jruby/util/io/PosixShim;
            0   29     1        fd  Lorg/jruby/util/io/ChannelFD;
            0   29     2    target  [B
            0   29     3    offset  I
            0   29     4    length  I
            0   29     5  nonblock  Z
            5    9     6  position  J
            6    9     8      size  J
           13   26     6    buffer  Ljava/nio/ByteBuffer;
           14   26     7      read  I
           27   29     6       ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     8      26  Class java.io.IOException
           9    11      26  Class java.io.IOException
          12    20      26  Class java.io.IOException
          21    22      26  Class java.io.IOException
          23    25      26  Class java.io.IOException
    MethodParameters:
          Name  Flags
      fd        
      target    
      offset    
      length    
      nonblock  

  public int flock(org.jruby.util.io.ChannelFD, int);
    descriptor: (Lorg/jruby/util/io/ChannelFD;I)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // int lockMode
         0: .line 185
            aload 0 /* this */
            invokevirtual org.jruby.util.io.PosixShim.clear:()V
         1: .line 187
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.realFileno:I
            istore 3 /* real_fd */
        start local 3 // int real_fd
         2: .line 189
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.isNative:()Z
            ifeq 8
            iload 3 /* real_fd */
            iconst_m1
            if_icmpeq 8
            iload 3 /* real_fd */
            ldc 100000
            if_icmpge 8
            getstatic org.jruby.platform.Platform.IS_SOLARIS:Z
            ifne 8
         3: .line 192
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            iload 3 /* real_fd */
            iload 2 /* lockMode */
            invokeinterface jnr.posix.POSIX.flock:(II)I
            istore 4 /* result */
        start local 4 // int result
         4: .line 193
            iload 4 /* result */
            ifge 7
         5: .line 194
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         6: .line 195
            iconst_m1
            ireturn
         7: .line 197
      StackMap locals: int int
      StackMap stack:
            iconst_0
            ireturn
        end local 4 // int result
         8: .line 200
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            ifnull 37
         9: .line 201
            aload 0 /* this */
            aload 1 /* fd */
            iload 2 /* lockMode */
            invokevirtual org.jruby.util.io.PosixShim.checkSharedExclusive:(Lorg/jruby/util/io/ChannelFD;I)I
            istore 4 /* ret */
        start local 4 // int ret
        10: .line 202
            iload 4 /* ret */
            ifge 11
            iload 4 /* ret */
            ireturn
        11: .line 204
      StackMap locals: int
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.nio.channels.FileLock
            iload 2 /* lockMode */
            invokestatic org.jruby.util.io.PosixShim.lockStateChanges:(Ljava/nio/channels/FileLock;I)Z
            ifne 12
            iconst_0
            ireturn
        12: .line 207
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            dup
            astore 5
            monitorenter
        13: .line 209
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.nio.channels.FileLock
            iload 2 /* lockMode */
            invokestatic org.jruby.util.io.PosixShim.lockStateChanges:(Ljava/nio/channels/FileLock;I)Z
            ifne 15
            aload 5
            monitorexit
        14: iconst_0
            ireturn
        15: .line 211
      StackMap locals: java.nio.channels.FileChannel
      StackMap stack:
            iload 2 /* lockMode */
            tableswitch { // 1 - 12
                    1: 22
                    2: 18
                    3: 26
                    4: 26
                    5: 24
                    6: 20
                    7: 26
                    8: 16
                    9: 26
                   10: 26
                   11: 26
                   12: 16
              default: 26
          }
        16: .line 214
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* fd */
            invokevirtual org.jruby.util.io.PosixShim.unlock:(Lorg/jruby/util/io/ChannelFD;)I
            aload 5
            monitorexit
        17: ireturn
        18: .line 216
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* fd */
            iconst_1
            invokevirtual org.jruby.util.io.PosixShim.lock:(Lorg/jruby/util/io/ChannelFD;Z)I
            aload 5
            monitorexit
        19: ireturn
        20: .line 218
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* fd */
            iconst_1
            invokevirtual org.jruby.util.io.PosixShim.tryLock:(Lorg/jruby/util/io/ChannelFD;Z)I
            aload 5
            monitorexit
        21: ireturn
        22: .line 220
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* fd */
            iconst_0
            invokevirtual org.jruby.util.io.PosixShim.lock:(Lorg/jruby/util/io/ChannelFD;Z)I
            aload 5
            monitorexit
        23: ireturn
        24: .line 222
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* fd */
            iconst_0
            invokevirtual org.jruby.util.io.PosixShim.tryLock:(Lorg/jruby/util/io/ChannelFD;Z)I
            aload 5
            monitorexit
        25: ireturn
        26: .line 207
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        27: goto 36
      StackMap locals:
      StackMap stack: java.lang.Throwable
        28: aload 5
            monitorexit
        29: athrow
        30: .line 225
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD int int int
      StackMap stack: java.io.IOException
            astore 5 /* ioe */
        start local 5 // java.io.IOException ioe
        31: .line 226
            aload 0 /* this */
            aload 5 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        32: .line 227
            iconst_m1
            ireturn
        end local 5 // java.io.IOException ioe
        33: .line 228
      StackMap locals:
      StackMap stack: java.nio.channels.OverlappingFileLockException
            pop
        34: .line 229
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        35: .line 230
            aload 0 /* this */
            ldc "overlapping file locks"
            putfield org.jruby.util.io.PosixShim.errmsg:Ljava/lang/String;
        36: .line 232
      StackMap locals:
      StackMap stack:
            iload 2 /* lockMode */
            invokestatic org.jruby.util.io.PosixShim.lockFailedReturn:(I)I
            ireturn
        end local 4 // int ret
        37: .line 236
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        38: .line 237
            aload 0 /* this */
            ldc "stream is not a file"
            putfield org.jruby.util.io.PosixShim.errmsg:Ljava/lang/String;
        39: .line 238
            iconst_m1
            ireturn
        end local 3 // int real_fd
        end local 2 // int lockMode
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   40     0      this  Lorg/jruby/util/io/PosixShim;
            0   40     1        fd  Lorg/jruby/util/io/ChannelFD;
            0   40     2  lockMode  I
            2   40     3   real_fd  I
            4    8     4    result  I
           10   37     4       ret  I
           31   33     5       ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          13    14      28  any
          15    17      28  any
          18    19      28  any
          20    21      28  any
          22    23      28  any
          24    25      28  any
          26    27      28  any
          28    29      28  any
          12    14      30  Class java.io.IOException
          15    17      30  Class java.io.IOException
          18    19      30  Class java.io.IOException
          20    21      30  Class java.io.IOException
          22    23      30  Class java.io.IOException
          24    25      30  Class java.io.IOException
          26    30      30  Class java.io.IOException
          12    14      33  Class java.nio.channels.OverlappingFileLockException
          15    17      33  Class java.nio.channels.OverlappingFileLockException
          18    19      33  Class java.nio.channels.OverlappingFileLockException
          20    21      33  Class java.nio.channels.OverlappingFileLockException
          22    23      33  Class java.nio.channels.OverlappingFileLockException
          24    25      33  Class java.nio.channels.OverlappingFileLockException
          26    30      33  Class java.nio.channels.OverlappingFileLockException
    MethodParameters:
          Name  Flags
      fd        
      lockMode  

  public int dup2(org.jruby.util.io.ChannelFD, org.jruby.util.io.ChannelFD);
    descriptor: (Lorg/jruby/util/io/ChannelFD;Lorg/jruby/util/io/ChannelFD;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD filedes
        start local 2 // org.jruby.util.io.ChannelFD filedes2
         0: .line 243
            aload 2 /* filedes2 */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            aload 1 /* filedes */
            invokevirtual org.jruby.util.io.ChannelFD.dup2From:(Ljnr/posix/POSIX;Lorg/jruby/util/io/ChannelFD;)I
            ireturn
        end local 2 // org.jruby.util.io.ChannelFD filedes2
        end local 1 // org.jruby.util.io.ChannelFD filedes
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/jruby/util/io/PosixShim;
            0    1     1   filedes  Lorg/jruby/util/io/ChannelFD;
            0    1     2  filedes2  Lorg/jruby/util/io/ChannelFD;
    MethodParameters:
          Name  Flags
      filedes   
      filedes2  

  public int close(org.jruby.util.io.ChannelFD);
    descriptor: (Lorg/jruby/util/io/ChannelFD;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
         0: .line 247
            aload 0 /* this */
            aload 1 /* fd */
            invokevirtual org.jruby.util.io.PosixShim.close:(Ljava/io/Closeable;)I
            ireturn
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/io/PosixShim;
            0    1     1    fd  Lorg/jruby/util/io/ChannelFD;
    MethodParameters:
      Name  Flags
      fd    

  public int close(java.io.Closeable);
    descriptor: (Ljava/io/Closeable;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // java.io.Closeable closeable
         0: .line 251
            aload 0 /* this */
            invokevirtual org.jruby.util.io.PosixShim.clear:()V
         1: .line 254
            aload 1 /* closeable */
            invokeinterface java.io.Closeable.close:()V
         2: .line 255
            iconst_0
            ireturn
         3: .line 256
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 2 /* ioe */
        start local 2 // java.io.IOException ioe
         4: .line 257
            aload 2 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            astore 3 /* errno */
        start local 3 // jnr.constants.platform.Errno errno
         5: .line 258
            aload 3 /* errno */
            ifnonnull 7
         6: .line 259
            new java.lang.RuntimeException
            dup
            new java.lang.StringBuilder
            dup
            ldc "unknown IOException: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* ioe */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 261
      StackMap locals: java.io.IOException jnr.constants.platform.Errno
      StackMap stack:
            aload 0 /* this */
            aload 3 /* errno */
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         8: .line 262
            iconst_m1
            ireturn
        end local 3 // jnr.constants.platform.Errno errno
        end local 2 // java.io.IOException ioe
        end local 1 // java.io.Closeable closeable
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    9     0       this  Lorg/jruby/util/io/PosixShim;
            0    9     1  closeable  Ljava/io/Closeable;
            4    9     2        ioe  Ljava/io/IOException;
            5    9     3      errno  Ljnr/constants/platform/Errno;
      Exception table:
        from    to  target  type
           1     2       3  Class java.io.IOException
    MethodParameters:
           Name  Flags
      closeable  

  public java.nio.channels.Channel[] pipe();
    descriptor: ()[Ljava/nio/channels/Channel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=1
        start local 0 // org.jruby.util.io.PosixShim this
         0: .line 267
            aload 0 /* this */
            invokevirtual org.jruby.util.io.PosixShim.clear:()V
         1: .line 269
            invokestatic java.nio.channels.Pipe.open:()Ljava/nio/channels/Pipe;
            astore 1 /* pipe */
        start local 1 // java.nio.channels.Pipe pipe
         2: .line 270
            aload 1 /* pipe */
            invokevirtual java.nio.channels.Pipe.source:()Ljava/nio/channels/Pipe$SourceChannel;
            astore 2 /* source */
        start local 2 // java.nio.channels.Channel source
         3: aload 1 /* pipe */
            invokevirtual java.nio.channels.Pipe.sink:()Ljava/nio/channels/Pipe$SinkChannel;
            astore 3 /* sink */
        start local 3 // java.nio.channels.Channel sink
         4: .line 272
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.isNative:()Z
            ifeq 9
            getstatic org.jruby.platform.Platform.IS_WINDOWS:Z
            ifne 9
         5: .line 274
            aload 2 /* source */
            invokestatic org.jruby.util.io.FilenoUtil.filenoFrom:(Ljava/nio/channels/Channel;)I
            istore 4 /* read */
        start local 4 // int read
         6: .line 275
            aload 3 /* sink */
            invokestatic org.jruby.util.io.FilenoUtil.filenoFrom:(Ljava/nio/channels/Channel;)I
            istore 5 /* write */
        start local 5 // int write
         7: .line 276
            aload 0 /* this */
            iload 4 /* read */
            iconst_1
            invokevirtual org.jruby.util.io.PosixShim.setCloexec:(IZ)I
            pop
         8: .line 277
            aload 0 /* this */
            iload 5 /* write */
            iconst_1
            invokevirtual org.jruby.util.io.PosixShim.setCloexec:(IZ)I
            pop
        end local 5 // int write
        end local 4 // int read
         9: .line 280
      StackMap locals: java.nio.channels.Pipe java.nio.channels.Channel java.nio.channels.Channel
      StackMap stack:
            iconst_2
            anewarray java.nio.channels.Channel
            dup
            iconst_0
            aload 2 /* source */
            aastore
            dup
            iconst_1
            aload 3 /* sink */
            aastore
        10: areturn
        end local 3 // java.nio.channels.Channel sink
        end local 2 // java.nio.channels.Channel source
        end local 1 // java.nio.channels.Pipe pipe
        11: .line 281
      StackMap locals: org.jruby.util.io.PosixShim
      StackMap stack: java.io.IOException
            astore 1 /* ioe */
        start local 1 // java.io.IOException ioe
        12: .line 282
            aload 0 /* this */
            aload 1 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        13: .line 283
            aconst_null
            areturn
        end local 1 // java.io.IOException ioe
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   14     0    this  Lorg/jruby/util/io/PosixShim;
            2   11     1    pipe  Ljava/nio/channels/Pipe;
            3   11     2  source  Ljava/nio/channels/Channel;
            4   11     3    sink  Ljava/nio/channels/Channel;
            6    9     4    read  I
            7    9     5   write  I
           12   14     1     ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1    10      11  Class java.io.IOException

  public jnr.constants.platform.Errno getErrno();
    descriptor: ()Ljnr/constants/platform/Errno;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.io.PosixShim this
         0: .line 291
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.errno:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast jnr.constants.platform.Errno
            areturn
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/io/PosixShim;

  public void setErrno(jnr.constants.platform.Errno);
    descriptor: (Ljnr/constants/platform/Errno;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // jnr.constants.platform.Errno errno
         0: .line 295
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.errno:Ljava/lang/ThreadLocal;
            aload 1 /* errno */
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         1: .line 296
            return
        end local 1 // jnr.constants.platform.Errno errno
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lorg/jruby/util/io/PosixShim;
            0    2     1  errno  Ljnr/constants/platform/Errno;
    MethodParameters:
       Name  Flags
      errno  

  public int setCloexec(int, boolean);
    descriptor: (IZ)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // int fd
        start local 2 // boolean cloexec
         0: .line 400
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            iload 1 /* fd */
            getstatic jnr.constants.platform.Fcntl.F_GETFD:Ljnr/constants/platform/Fcntl;
            invokeinterface jnr.posix.POSIX.fcntl:(ILjnr/constants/platform/Fcntl;)I
            istore 3 /* ret */
        start local 3 // int ret
         1: .line 401
            iload 3 /* ret */
            iconst_m1
            if_icmpne 4
         2: .line 402
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         3: .line 403
            iconst_m1
            ireturn
         4: .line 406
      StackMap locals: int
      StackMap stack:
            iload 2 /* cloexec */
            ifeq 5
            iload 3 /* ret */
            iconst_1
            iand
            iconst_1
            if_icmpeq 6
         5: .line 407
      StackMap locals:
      StackMap stack:
            iload 2 /* cloexec */
            ifne 7
            iload 3 /* ret */
            iconst_1
            iand
            ifne 7
         6: .line 408
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         7: .line 410
      StackMap locals:
      StackMap stack:
            iload 2 /* cloexec */
            ifeq 9
         8: .line 411
            iload 3 /* ret */
            iconst_1
            ior
            goto 10
         9: .line 412
      StackMap locals:
      StackMap stack:
            iload 3 /* ret */
            bipush -2
            iand
        10: .line 410
      StackMap locals:
      StackMap stack: int
            istore 3 /* ret */
        11: .line 413
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            iload 1 /* fd */
            getstatic jnr.constants.platform.Fcntl.F_SETFD:Ljnr/constants/platform/Fcntl;
            iload 3 /* ret */
            invokeinterface jnr.posix.POSIX.fcntlInt:(ILjnr/constants/platform/Fcntl;I)I
            istore 3 /* ret */
        12: .line 414
            iload 3 /* ret */
            iconst_m1
            if_icmpne 13
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        13: .line 415
      StackMap locals:
      StackMap stack:
            iload 3 /* ret */
            ireturn
        end local 3 // int ret
        end local 2 // boolean cloexec
        end local 1 // int fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   14     0     this  Lorg/jruby/util/io/PosixShim;
            0   14     1       fd  I
            0   14     2  cloexec  Z
            1   14     3      ret  I
    MethodParameters:
         Name  Flags
      fd       
      cloexec  

  public int fcntlSetFD(int, int);
    descriptor: (II)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // int fd
        start local 2 // int flags
         0: .line 419
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            iload 1 /* fd */
            getstatic jnr.constants.platform.Fcntl.F_SETFD:Ljnr/constants/platform/Fcntl;
            iload 2 /* flags */
            invokeinterface jnr.posix.POSIX.fcntlInt:(ILjnr/constants/platform/Fcntl;I)I
            istore 3 /* ret */
        start local 3 // int ret
         1: .line 420
            iload 3 /* ret */
            iconst_m1
            if_icmpne 2
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         2: .line 421
      StackMap locals: int
      StackMap stack:
            iload 3 /* ret */
            ireturn
        end local 3 // int ret
        end local 2 // int flags
        end local 1 // int fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0   this  Lorg/jruby/util/io/PosixShim;
            0    3     1     fd  I
            0    3     2  flags  I
            1    3     3    ret  I
    MethodParameters:
       Name  Flags
      fd     
      flags  

  public int fcntlGetFD(int);
    descriptor: (I)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // int fd
         0: .line 425
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            iload 1 /* fd */
            getstatic jnr.constants.platform.Fcntl.F_GETFD:Ljnr/constants/platform/Fcntl;
            invokeinterface jnr.posix.POSIX.fcntl:(ILjnr/constants/platform/Fcntl;)I
            istore 2 /* ret */
        start local 2 // int ret
         1: .line 426
            iload 2 /* ret */
            iconst_m1
            if_icmpne 3
         2: .line 427
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         3: .line 429
      StackMap locals: int
      StackMap stack:
            iload 2 /* ret */
            ireturn
        end local 2 // int ret
        end local 1 // int fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/jruby/util/io/PosixShim;
            0    4     1    fd  I
            1    4     2   ret  I
    MethodParameters:
      Name  Flags
      fd    

  public java.nio.channels.Channel open(java.lang.String, java.lang.String, int, int);
    descriptor: (Ljava/lang/String;Ljava/lang/String;II)Ljava/nio/channels/Channel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=5
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // java.lang.String cwd
        start local 2 // java.lang.String path
        start local 3 // int flags
        start local 4 // int perm
         0: .line 433
            getstatic org.jruby.platform.Platform.IS_WINDOWS:Z
            ifeq 2
            aload 2 /* path */
            ldc "/dev/null"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 1
            aload 2 /* path */
            ldc "nul"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 434
      StackMap locals:
      StackMap stack:
            ldc "NUL:"
            astore 2 /* path */
         2: .line 438
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.runtime:Lorg/jruby/Ruby;
            aload 1 /* cwd */
            aload 2 /* path */
            invokestatic org.jruby.util.JRubyFile.createResource:(Lorg/jruby/Ruby;Ljava/lang/String;Ljava/lang/String;)Lorg/jruby/util/FileResource;
            iload 3 /* flags */
            iload 4 /* perm */
            invokeinterface org.jruby.util.FileResource.openChannel:(II)Ljava/nio/channels/Channel;
         3: areturn
         4: .line 439
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException$FileExists
            pop
         5: .line 440
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EEXIST:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
            goto 20
         6: .line 441
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException$FileIsDirectory
            pop
         7: .line 442
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EISDIR:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
            goto 20
         8: .line 443
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException$FileIsNotDirectory
            pop
         9: .line 444
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.ENOTDIR:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
            goto 20
        10: .line 445
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException$NotFound
            pop
        11: .line 446
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.ENOENT:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
            goto 20
        12: .line 447
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException$PermissionDenied
            pop
        13: .line 448
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EACCES:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
            goto 20
        14: .line 449
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException$TooManySymlinks
            pop
        15: .line 450
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.ELOOP:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
            goto 20
        16: .line 451
      StackMap locals:
      StackMap stack: org.jruby.util.ResourceException
            astore 5 /* ex */
        start local 5 // org.jruby.util.ResourceException ex
        17: .line 452
            aload 5 /* ex */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.util.ResourceException.newRaiseException:(Lorg/jruby/Ruby;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 5 // org.jruby.util.ResourceException ex
        18: .line 453
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 5 /* ex */
        start local 5 // java.io.IOException ex
        19: .line 454
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.runtime:Lorg/jruby/Ruby;
            aload 5 /* ex */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 5 // java.io.IOException ex
        20: .line 456
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 4 // int perm
        end local 3 // int flags
        end local 2 // java.lang.String path
        end local 1 // java.lang.String cwd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   21     0   this  Lorg/jruby/util/io/PosixShim;
            0   21     1    cwd  Ljava/lang/String;
            0   21     2   path  Ljava/lang/String;
            0   21     3  flags  I
            0   21     4   perm  I
           17   18     5     ex  Lorg/jruby/util/ResourceException;
           19   20     5     ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2     3       4  Class org.jruby.util.ResourceException$FileExists
           2     3       6  Class org.jruby.util.ResourceException$FileIsDirectory
           2     3       8  Class org.jruby.util.ResourceException$FileIsNotDirectory
           2     3      10  Class org.jruby.util.ResourceException$NotFound
           2     3      12  Class org.jruby.util.ResourceException$PermissionDenied
           2     3      14  Class org.jruby.util.ResourceException$TooManySymlinks
           2     3      16  Class org.jruby.util.ResourceException
           2     3      18  Class java.io.IOException
    MethodParameters:
       Name  Flags
      cwd    
      path   
      flags  
      perm   

  public java.nio.channels.Channel open(java.lang.String, java.lang.String, org.jruby.util.io.ModeFlags, int);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Lorg/jruby/util/io/ModeFlags;I)Ljava/nio/channels/Channel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // java.lang.String cwd
        start local 2 // java.lang.String path
        start local 3 // org.jruby.util.io.ModeFlags flags
        start local 4 // int perm
         0: .line 461
            aload 0 /* this */
            aload 1 /* cwd */
            aload 2 /* path */
            aload 3 /* flags */
            iload 4 /* perm */
            invokevirtual org.jruby.util.io.PosixShim.open:(Ljava/lang/String;Ljava/lang/String;Lorg/jruby/util/io/ModeFlags;I)Ljava/nio/channels/Channel;
            areturn
        end local 4 // int perm
        end local 3 // org.jruby.util.io.ModeFlags flags
        end local 2 // java.lang.String path
        end local 1 // java.lang.String cwd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/jruby/util/io/PosixShim;
            0    1     1    cwd  Ljava/lang/String;
            0    1     2   path  Ljava/lang/String;
            0    1     3  flags  Lorg/jruby/util/io/ModeFlags;
            0    1     4   perm  I
    MethodParameters:
       Name  Flags
      cwd    
      path   
      flags  
      perm   

  public java.nio.channels.Channel open(java.lang.String, java.lang.String, org.jruby.util.io.ModeFlags, int, java.lang.ClassLoader);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Lorg/jruby/util/io/ModeFlags;ILjava/lang/ClassLoader;)Ljava/nio/channels/Channel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=6
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // java.lang.String cwd
        start local 2 // java.lang.String path
        start local 3 // org.jruby.util.io.ModeFlags flags
        start local 4 // int perm
        start local 5 // java.lang.ClassLoader classLoader
         0: .line 466
            aload 2 /* path */
            ldc "classpath:/"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 3
            aload 5 /* classLoader */
            ifnull 3
         1: .line 467
            aload 2 /* path */
            ldc "classpath:/"
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 2 /* path */
         2: .line 468
            aload 5 /* classLoader */
            aload 2 /* path */
            invokevirtual java.lang.ClassLoader.getResourceAsStream:(Ljava/lang/String;)Ljava/io/InputStream;
            invokestatic java.nio.channels.Channels.newChannel:(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
            areturn
         3: .line 471
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* cwd */
            aload 2 /* path */
            aload 3 /* flags */
            iload 4 /* perm */
            invokevirtual org.jruby.util.io.PosixShim.open:(Ljava/lang/String;Ljava/lang/String;Lorg/jruby/util/io/ModeFlags;I)Ljava/nio/channels/Channel;
            areturn
        end local 5 // java.lang.ClassLoader classLoader
        end local 4 // int perm
        end local 3 // org.jruby.util.io.ModeFlags flags
        end local 2 // java.lang.String path
        end local 1 // java.lang.String cwd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Lorg/jruby/util/io/PosixShim;
            0    4     1          cwd  Ljava/lang/String;
            0    4     2         path  Ljava/lang/String;
            0    4     3        flags  Lorg/jruby/util/io/ModeFlags;
            0    4     4         perm  I
            0    4     5  classLoader  Ljava/lang/ClassLoader;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
             Name  Flags
      cwd          
      path         
      flags        
      perm         
      classLoader  

  public static int umask(jnr.posix.POSIX);
    descriptor: (Ljnr/posix/POSIX;)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // jnr.posix.POSIX posix
         0: .line 483
            getstatic org.jruby.util.io.PosixShim._umaskLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 484
            aload 0 /* posix */
            getstatic org.jruby.util.io.PosixShim._cachedUmask:I
            invokeinterface jnr.posix.POSIX.umask:(I)I
            istore 2 /* umask */
        start local 2 // int umask
         2: .line 485
            getstatic org.jruby.util.io.PosixShim._cachedUmask:I
            iload 2 /* umask */
            if_icmpeq 5
         3: .line 486
            aload 0 /* posix */
            iload 2 /* umask */
            invokeinterface jnr.posix.POSIX.umask:(I)I
            pop
         4: .line 487
            iload 2 /* umask */
            putstatic org.jruby.util.io.PosixShim._cachedUmask:I
         5: .line 489
      StackMap locals: java.lang.Object int
      StackMap stack:
            iload 2 /* umask */
            aload 1
            monitorexit
         6: ireturn
        end local 2 // int umask
         7: .line 483
      StackMap locals: jnr.posix.POSIX java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         8: athrow
        end local 0 // jnr.posix.POSIX posix
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    9     0  posix  Ljnr/posix/POSIX;
            2    7     2  umask  I
      Exception table:
        from    to  target  type
           1     6       7  any
           7     8       7  any
    MethodParameters:
       Name  Flags
      posix  

  public static int umask(jnr.posix.POSIX, int);
    descriptor: (Ljnr/posix/POSIX;I)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // jnr.posix.POSIX posix
        start local 1 // int newMask
         0: .line 495
            getstatic org.jruby.util.io.PosixShim._umaskLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 496
            aload 0 /* posix */
            iload 1 /* newMask */
            invokeinterface jnr.posix.POSIX.umask:(I)I
            istore 2 /* oldMask */
        start local 2 // int oldMask
         2: .line 497
            iload 1 /* newMask */
            putstatic org.jruby.util.io.PosixShim._cachedUmask:I
         3: .line 495
            aload 3
            monitorexit
         4: goto 7
        end local 2 // int oldMask
      StackMap locals: jnr.posix.POSIX int top java.lang.Object
      StackMap stack: java.lang.Throwable
         5: aload 3
            monitorexit
         6: athrow
        start local 2 // int oldMask
         7: .line 499
      StackMap locals: jnr.posix.POSIX int int
      StackMap stack:
            iload 2 /* oldMask */
            ireturn
        end local 2 // int oldMask
        end local 1 // int newMask
        end local 0 // jnr.posix.POSIX posix
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0    posix  Ljnr/posix/POSIX;
            0    8     1  newMask  I
            2    5     2  oldMask  I
            7    8     2  oldMask  I
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any
    MethodParameters:
         Name  Flags
      posix    
      newMask  

  public int ftruncate(org.jruby.util.io.ChannelFD, long);
    descriptor: (Lorg/jruby/util/io/ChannelFD;J)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // long pos
         0: .line 503
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            ifnull 4
         1: .line 504
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            invokeinterface jnr.enxio.channels.NativeSelectableChannel.getFD:()I
            lload 2 /* pos */
            invokeinterface jnr.posix.POSIX.ftruncate:(IJ)I
            istore 4 /* ret */
        start local 4 // int ret
         2: .line 505
            iload 4 /* ret */
            iconst_m1
            if_icmpne 3
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         3: .line 506
      StackMap locals: int
      StackMap stack:
            iload 4 /* ret */
            ireturn
        end local 4 // int ret
         4: .line 507
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            ifnull 10
         5: .line 509
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            lload 2 /* pos */
            invokevirtual java.nio.channels.FileChannel.truncate:(J)Ljava/nio/channels/FileChannel;
            pop
         6: .line 510
            goto 12
      StackMap locals:
      StackMap stack: java.io.IOException
         7: astore 4 /* ioe */
        start local 4 // java.io.IOException ioe
         8: .line 511
            aload 0 /* this */
            aload 4 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         9: .line 512
            iconst_m1
            ireturn
        end local 4 // java.io.IOException ioe
        10: .line 515
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        11: .line 516
            iconst_m1
            ireturn
        12: .line 518
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // long pos
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   13     0  this  Lorg/jruby/util/io/PosixShim;
            0   13     1    fd  Lorg/jruby/util/io/ChannelFD;
            0   13     2   pos  J
            2    4     4   ret  I
            8   10     4   ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           5     6       7  Class java.io.IOException
    MethodParameters:
      Name  Flags
      fd    
      pos   

  public long size(org.jruby.util.io.ChannelFD);
    descriptor: (Lorg/jruby/util/io/ChannelFD;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
         0: .line 522
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            ifnull 7
         1: .line 523
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.allocateStat:()Ljnr/posix/FileStat;
            astore 2 /* stat */
        start local 2 // jnr.posix.FileStat stat
         2: .line 524
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chNative:Ljnr/enxio/channels/NativeSelectableChannel;
            invokeinterface jnr.enxio.channels.NativeSelectableChannel.getFD:()I
            aload 2 /* stat */
            invokeinterface jnr.posix.POSIX.fstat:(ILjnr/posix/FileStat;)I
            istore 3 /* ret */
        start local 3 // int ret
         3: .line 525
            iload 3 /* ret */
            iconst_m1
            if_icmpne 6
         4: .line 526
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.PosixShim.posix:Ljnr/posix/POSIX;
            invokeinterface jnr.posix.POSIX.errno:()I
            i2l
            invokestatic jnr.constants.platform.Errno.valueOf:(J)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         5: .line 527
            ldc -1
            lreturn
         6: .line 529
      StackMap locals: jnr.posix.FileStat int
      StackMap stack:
            aload 2 /* stat */
            invokeinterface jnr.posix.FileStat.st_size:()J
            lreturn
        end local 3 // int ret
        end local 2 // jnr.posix.FileStat stat
         7: .line 530
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            ifnull 13
         8: .line 532
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSeek:Ljava/nio/channels/SeekableByteChannel;
            invokeinterface java.nio.channels.SeekableByteChannel.size:()J
         9: lreturn
        10: .line 533
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 2 /* ioe */
        start local 2 // java.io.IOException ioe
        11: .line 534
            aload 0 /* this */
            aload 2 /* ioe */
            invokestatic org.jruby.runtime.Helpers.errnoFromException:(Ljava/lang/Throwable;)Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        12: .line 535
            ldc -1
            lreturn
        end local 2 // java.io.IOException ioe
        13: .line 539
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
        14: .line 540
            ldc -1
            lreturn
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Lorg/jruby/util/io/PosixShim;
            0   15     1    fd  Lorg/jruby/util/io/ChannelFD;
            2    7     2  stat  Ljnr/posix/FileStat;
            3    7     3   ret  I
           11   13     2   ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           8     9      10  Class java.io.IOException
    MethodParameters:
      Name  Flags
      fd    

  private void clear();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.util.io.PosixShim this
         0: .line 545
            aload 0 /* this */
            aconst_null
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         1: .line 546
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.io.PosixShim.errmsg:Ljava/lang/String;
         2: .line 547
            return
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/jruby/util/io/PosixShim;

  private int checkSharedExclusive(org.jruby.util.io.ChannelFD, int);
    descriptor: (Lorg/jruby/util/io/ChannelFD;I)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // int lockMode
         0: .line 559
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chWrite:Ljava/nio/channels/WritableByteChannel;
            ifnonnull 4
            iload 2 /* lockMode */
            iconst_2
            iand
            ifle 4
         1: .line 560
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         2: .line 561
            aload 0 /* this */
            ldc "cannot acquire exclusive lock on File not opened for write"
            putfield org.jruby.util.io.PosixShim.errmsg:Ljava/lang/String;
         3: .line 562
            iconst_m1
            ireturn
         4: .line 567
      StackMap locals:
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chRead:Ljava/nio/channels/ReadableByteChannel;
            ifnonnull 8
            iload 2 /* lockMode */
            iconst_1
            iand
            ifle 8
         5: .line 568
            aload 0 /* this */
            getstatic jnr.constants.platform.Errno.EINVAL:Ljnr/constants/platform/Errno;
            invokevirtual org.jruby.util.io.PosixShim.setErrno:(Ljnr/constants/platform/Errno;)V
         6: .line 569
            aload 0 /* this */
            ldc "cannot acquire shared lock on File not opened for read"
            putfield org.jruby.util.io.PosixShim.errmsg:Ljava/lang/String;
         7: .line 570
            iconst_m1
            ireturn
         8: .line 573
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // int lockMode
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Lorg/jruby/util/io/PosixShim;
            0    9     1        fd  Lorg/jruby/util/io/ChannelFD;
            0    9     2  lockMode  I
    MethodParameters:
          Name  Flags
      fd        
      lockMode  

  private static int lockFailedReturn(int);
    descriptor: (I)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // int lockMode
         0: .line 577
            iload 0 /* lockMode */
            iconst_2
            iand
            ifne 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_m1
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 0 // int lockMode
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0  lockMode  I
    MethodParameters:
          Name  Flags
      lockMode  

  private static boolean lockStateChanges(java.nio.channels.FileLock, int);
    descriptor: (Ljava/nio/channels/FileLock;I)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.nio.channels.FileLock lock
        start local 1 // int lockMode
         0: .line 581
            aload 0 /* lock */
            ifnonnull 4
         1: .line 583
            iload 1 /* lockMode */
            bipush 15
            iand
            tableswitch { // 8 - 12
                    8: 2
                    9: 3
                   10: 3
                   11: 3
                   12: 2
              default: 3
          }
         2: .line 586
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         3: .line 588
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
         4: .line 592
      StackMap locals:
      StackMap stack:
            iload 1 /* lockMode */
            bipush 15
            iand
            tableswitch { // 1 - 12
                    1: 7
                    2: 6
                    3: 10
                    4: 10
                    5: 7
                    6: 6
                    7: 10
                    8: 5
                    9: 10
                   10: 10
                   11: 10
                   12: 5
              default: 10
          }
         5: .line 595
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
         6: .line 598
      StackMap locals:
      StackMap stack:
            aload 0 /* lock */
            invokevirtual java.nio.channels.FileLock.isShared:()Z
            ireturn
         7: .line 601
      StackMap locals:
      StackMap stack:
            aload 0 /* lock */
            invokevirtual java.nio.channels.FileLock.isShared:()Z
            ifeq 8
            iconst_0
            goto 9
      StackMap locals:
      StackMap stack:
         8: iconst_1
      StackMap locals:
      StackMap stack: int
         9: ireturn
        10: .line 603
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // int lockMode
        end local 0 // java.nio.channels.FileLock lock
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      lock  Ljava/nio/channels/FileLock;
            0   11     1  lockMode  I
    MethodParameters:
          Name  Flags
      lock      
      lockMode  

  private int unlock(org.jruby.util.io.ChannelFD);
    descriptor: (Lorg/jruby/util/io/ChannelFD;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=3, args_size=2
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
         0: .line 609
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.nio.channels.FileLock
            astore 2 /* fileLock */
        start local 2 // java.nio.channels.FileLock fileLock
         1: .line 611
            aload 2 /* fileLock */
            ifnull 5
         2: .line 612
            aload 2 /* fileLock */
            invokevirtual java.nio.channels.FileLock.release:()V
         3: .line 613
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         4: .line 615
            iconst_0
            ireturn
         5: .line 617
      StackMap locals: java.nio.channels.FileLock
      StackMap stack:
            iconst_m1
            ireturn
        end local 2 // java.nio.channels.FileLock fileLock
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lorg/jruby/util/io/PosixShim;
            0    6     1        fd  Lorg/jruby/util/io/ChannelFD;
            1    6     2  fileLock  Ljava/nio/channels/FileLock;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      fd    

  private int lock(org.jruby.util.io.ChannelFD, boolean);
    descriptor: (Lorg/jruby/util/io/ChannelFD;Z)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // boolean exclusive
         0: .line 621
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.nio.channels.FileLock
            astore 3 /* fileLock */
        start local 3 // java.nio.channels.FileLock fileLock
         1: .line 623
            aload 3 /* fileLock */
            ifnull 2
            aload 3 /* fileLock */
            invokevirtual java.nio.channels.FileLock.release:()V
         2: .line 625
      StackMap locals: java.nio.channels.FileLock
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            lconst_0
            ldc 9223372036854775807
            iload 2 /* exclusive */
            ifeq 3
            iconst_0
            goto 4
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD int java.nio.channels.FileLock
      StackMap stack: java.nio.channels.FileChannel long long
         3: iconst_1
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD int java.nio.channels.FileLock
      StackMap stack: java.nio.channels.FileChannel long long int
         4: invokevirtual java.nio.channels.FileChannel.lock:(JJZ)Ljava/nio/channels/FileLock;
            astore 3 /* fileLock */
         5: .line 627
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            aload 3 /* fileLock */
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         6: .line 629
            aload 3 /* fileLock */
            ifnull 8
         7: .line 630
            iconst_0
            ireturn
         8: .line 633
      StackMap locals:
      StackMap stack:
            iload 2 /* exclusive */
            ifeq 9
            iconst_2
            goto 10
      StackMap locals:
      StackMap stack:
         9: iconst_1
      StackMap locals:
      StackMap stack: int
        10: invokestatic org.jruby.util.io.PosixShim.lockFailedReturn:(I)I
            ireturn
        end local 3 // java.nio.channels.FileLock fileLock
        end local 2 // boolean exclusive
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0       this  Lorg/jruby/util/io/PosixShim;
            0   11     1         fd  Lorg/jruby/util/io/ChannelFD;
            0   11     2  exclusive  Z
            1   11     3   fileLock  Ljava/nio/channels/FileLock;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      fd         
      exclusive  

  private int tryLock(org.jruby.util.io.ChannelFD, boolean);
    descriptor: (Lorg/jruby/util/io/ChannelFD;Z)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.jruby.util.io.PosixShim this
        start local 1 // org.jruby.util.io.ChannelFD fd
        start local 2 // boolean exclusive
         0: .line 637
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast java.nio.channels.FileLock
            astore 3 /* fileLock */
        start local 3 // java.nio.channels.FileLock fileLock
         1: .line 639
            aload 3 /* fileLock */
            ifnull 2
            aload 3 /* fileLock */
            invokevirtual java.nio.channels.FileLock.release:()V
         2: .line 641
      StackMap locals: java.nio.channels.FileLock
      StackMap stack:
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.chFile:Ljava/nio/channels/FileChannel;
            lconst_0
            ldc 9223372036854775807
            iload 2 /* exclusive */
            ifeq 3
            iconst_0
            goto 4
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD int java.nio.channels.FileLock
      StackMap stack: java.nio.channels.FileChannel long long
         3: iconst_1
      StackMap locals: org.jruby.util.io.PosixShim org.jruby.util.io.ChannelFD int java.nio.channels.FileLock
      StackMap stack: java.nio.channels.FileChannel long long int
         4: invokevirtual java.nio.channels.FileChannel.tryLock:(JJZ)Ljava/nio/channels/FileLock;
            astore 3 /* fileLock */
         5: .line 643
            aload 1 /* fd */
            getfield org.jruby.util.io.ChannelFD.currentLock:Ljava/lang/ThreadLocal;
            aload 3 /* fileLock */
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         6: .line 645
            aload 3 /* fileLock */
            ifnull 8
         7: .line 646
            iconst_0
            ireturn
         8: .line 649
      StackMap locals:
      StackMap stack:
            iload 2 /* exclusive */
            ifeq 9
            iconst_2
            goto 10
      StackMap locals:
      StackMap stack:
         9: iconst_1
      StackMap locals:
      StackMap stack: int
        10: invokestatic org.jruby.util.io.PosixShim.lockFailedReturn:(I)I
            ireturn
        end local 3 // java.nio.channels.FileLock fileLock
        end local 2 // boolean exclusive
        end local 1 // org.jruby.util.io.ChannelFD fd
        end local 0 // org.jruby.util.io.PosixShim this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0       this  Lorg/jruby/util/io/PosixShim;
            0   11     1         fd  Lorg/jruby/util/io/ChannelFD;
            0   11     2  exclusive  Z
            1   11     3   fileLock  Ljava/nio/channels/FileLock;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      fd         
      exclusive  
}
SourceFile: "PosixShim.java"
NestMembers:
  org.jruby.util.io.PosixShim$BSDWaitMacros  org.jruby.util.io.PosixShim$LinuxWaitMacros  org.jruby.util.io.PosixShim$WaitMacros
InnerClasses:
  public abstract SinkChannel = java.nio.channels.Pipe$SinkChannel of java.nio.channels.Pipe
  public abstract SourceChannel = java.nio.channels.Pipe$SourceChannel of java.nio.channels.Pipe
  public FileExists = org.jruby.util.ResourceException$FileExists of org.jruby.util.ResourceException
  public FileIsDirectory = org.jruby.util.ResourceException$FileIsDirectory of org.jruby.util.ResourceException
  public FileIsNotDirectory = org.jruby.util.ResourceException$FileIsNotDirectory of org.jruby.util.ResourceException
  public NotFound = org.jruby.util.ResourceException$NotFound of org.jruby.util.ResourceException
  public PermissionDenied = org.jruby.util.ResourceException$PermissionDenied of org.jruby.util.ResourceException
  public TooManySymlinks = org.jruby.util.ResourceException$TooManySymlinks of org.jruby.util.ResourceException
  public BSDWaitMacros = org.jruby.util.io.PosixShim$BSDWaitMacros of org.jruby.util.io.PosixShim
  public LinuxWaitMacros = org.jruby.util.io.PosixShim$LinuxWaitMacros of org.jruby.util.io.PosixShim
  public abstract WaitMacros = org.jruby.util.io.PosixShim$WaitMacros of org.jruby.util.io.PosixShim