public class com.oracle.truffle.nfi.NFILanguage extends com.oracle.truffle.api.TruffleLanguage<com.oracle.truffle.nfi.NFIContext>
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.nfi.NFILanguage
  super_class: com.oracle.truffle.api.TruffleLanguage
{
  public static final java.lang.String MIME_TYPE;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "application/x-native"

  private final com.oracle.truffle.api.Assumption singleContextAssumption;
    descriptor: Lcom/oracle/truffle/api/Assumption;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 55
            ldc Lcom/oracle/truffle/nfi/NFILanguage;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.oracle.truffle.nfi.NFILanguage.$assertionsDisabled:Z
         3: .line 57
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.nfi.NFILanguage this
         0: .line 55
            aload 0 /* this */
            invokespecial com.oracle.truffle.api.TruffleLanguage.<init>:()V
         1: .line 59
            aload 0 /* this */
            invokestatic com.oracle.truffle.api.Truffle.getRuntime:()Lcom/oracle/truffle/api/TruffleRuntime;
            ldc "NFI single context"
            invokeinterface com.oracle.truffle.api.TruffleRuntime.createAssumption:(Ljava/lang/String;)Lcom/oracle/truffle/api/Assumption;
            putfield com.oracle.truffle.nfi.NFILanguage.singleContextAssumption:Lcom/oracle/truffle/api/Assumption;
         2: .line 55
            return
        end local 0 // com.oracle.truffle.nfi.NFILanguage this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/nfi/NFILanguage;

  protected com.oracle.truffle.nfi.NFIContext createContext(com.oracle.truffle.api.TruffleLanguage$Env);
    descriptor: (Lcom/oracle/truffle/api/TruffleLanguage$Env;)Lcom/oracle/truffle/nfi/NFIContext;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.nfi.NFILanguage this
        start local 1 // com.oracle.truffle.api.TruffleLanguage$Env env
         0: .line 63
            new com.oracle.truffle.nfi.NFIContext
            dup
            aload 1 /* env */
            invokespecial com.oracle.truffle.nfi.NFIContext.<init>:(Lcom/oracle/truffle/api/TruffleLanguage$Env;)V
            areturn
        end local 1 // com.oracle.truffle.api.TruffleLanguage$Env env
        end local 0 // com.oracle.truffle.nfi.NFILanguage this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/nfi/NFILanguage;
            0    1     1   env  Lcom/oracle/truffle/api/TruffleLanguage$Env;
    MethodParameters:
      Name  Flags
      env   

  protected boolean patchContext(com.oracle.truffle.nfi.NFIContext, com.oracle.truffle.api.TruffleLanguage$Env);
    descriptor: (Lcom/oracle/truffle/nfi/NFIContext;Lcom/oracle/truffle/api/TruffleLanguage$Env;)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.NFILanguage this
        start local 1 // com.oracle.truffle.nfi.NFIContext context
        start local 2 // com.oracle.truffle.api.TruffleLanguage$Env newEnv
         0: .line 68
            aload 1 /* context */
            aload 2 /* newEnv */
            invokevirtual com.oracle.truffle.nfi.NFIContext.patch:(Lcom/oracle/truffle/api/TruffleLanguage$Env;)V
         1: .line 69
            iconst_1
            ireturn
        end local 2 // com.oracle.truffle.api.TruffleLanguage$Env newEnv
        end local 1 // com.oracle.truffle.nfi.NFIContext context
        end local 0 // com.oracle.truffle.nfi.NFILanguage this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lcom/oracle/truffle/nfi/NFILanguage;
            0    2     1  context  Lcom/oracle/truffle/nfi/NFIContext;
            0    2     2   newEnv  Lcom/oracle/truffle/api/TruffleLanguage$Env;
    MethodParameters:
         Name  Flags
      context  
      newEnv   

  protected void initializeMultipleContexts();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.nfi.NFILanguage this
         0: .line 74
            aload 0 /* this */
            invokespecial com.oracle.truffle.api.TruffleLanguage.initializeMultipleContexts:()V
         1: .line 75
            aload 0 /* this */
            getfield com.oracle.truffle.nfi.NFILanguage.singleContextAssumption:Lcom/oracle/truffle/api/Assumption;
            invokeinterface com.oracle.truffle.api.Assumption.invalidate:()V
         2: .line 76
            return
        end local 0 // com.oracle.truffle.nfi.NFILanguage this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/nfi/NFILanguage;

  static com.oracle.truffle.nfi.NFILanguage getCurrentLanguage();
    descriptor: ()Lcom/oracle/truffle/nfi/NFILanguage;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 79
            ldc "getCurrentLanguage"
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:(Ljava/lang/String;)V
         1: .line 80
            ldc Lcom/oracle/truffle/nfi/NFILanguage;
            invokestatic com.oracle.truffle.nfi.NFILanguage.getCurrentLanguage:(Ljava/lang/Class;)Lcom/oracle/truffle/api/TruffleLanguage;
            checkcast com.oracle.truffle.nfi.NFILanguage
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static com.oracle.truffle.api.Assumption getSingleContextAssumption();
    descriptor: ()Lcom/oracle/truffle/api/Assumption;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 84
            invokestatic com.oracle.truffle.nfi.NFILanguage.getCurrentLanguage:()Lcom/oracle/truffle/nfi/NFILanguage;
            getfield com.oracle.truffle.nfi.NFILanguage.singleContextAssumption:Lcom/oracle/truffle/api/Assumption;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  protected com.oracle.truffle.api.CallTarget parse(com.oracle.truffle.api.TruffleLanguage$ParsingRequest);
    descriptor: (Lcom/oracle/truffle/api/TruffleLanguage$ParsingRequest;)Lcom/oracle/truffle/api/CallTarget;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=8, args_size=2
        start local 0 // com.oracle.truffle.nfi.NFILanguage this
        start local 1 // com.oracle.truffle.api.TruffleLanguage$ParsingRequest request
         0: .line 89
            aload 1 /* request */
            invokevirtual com.oracle.truffle.api.TruffleLanguage$ParsingRequest.getSource:()Lcom/oracle/truffle/api/source/Source;
            invokevirtual com.oracle.truffle.api.source.Source.getCharacters:()Ljava/lang/CharSequence;
            astore 2 /* nfiSource */
        start local 2 // java.lang.CharSequence nfiSource
         1: .line 90
            aload 2 /* nfiSource */
            invokestatic com.oracle.truffle.nfi.Parser.parseNFISource:(Ljava/lang/CharSequence;)Lcom/oracle/truffle/nfi/NativeSource;
            astore 3 /* source */
        start local 3 // com.oracle.truffle.nfi.NativeSource source
         2: .line 93
            aload 3 /* source */
            invokevirtual com.oracle.truffle.nfi.NativeSource.isDefaultBackend:()Z
            ifeq 5
         3: .line 94
            ldc "native"
            astore 4 /* backendId */
        start local 4 // java.lang.String backendId
         4: .line 95
            goto 6
        end local 4 // java.lang.String backendId
         5: .line 96
      StackMap locals: java.lang.CharSequence com.oracle.truffle.nfi.NativeSource
      StackMap stack:
            aload 3 /* source */
            invokevirtual com.oracle.truffle.nfi.NativeSource.getNFIBackendId:()Ljava/lang/String;
            astore 4 /* backendId */
        start local 4 // java.lang.String backendId
         6: .line 99
      StackMap locals: java.lang.String
      StackMap stack:
            aload 3 /* source */
            invokevirtual com.oracle.truffle.nfi.NativeSource.getContent:()Lcom/oracle/truffle/nfi/NativeSource$Content;
            astore 5 /* c */
        start local 5 // com.oracle.truffle.nfi.NativeSource$Content c
         7: .line 100
            getstatic com.oracle.truffle.nfi.NFILanguage.$assertionsDisabled:Z
            ifne 8
            aload 5 /* c */
            ifnonnull 8
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
         8: .line 101
      StackMap locals: com.oracle.truffle.nfi.NativeSource$Content
      StackMap stack:
            aload 5 /* c */
            instanceof com.oracle.truffle.nfi.NativeSource$ParsedLibrary
            ifeq 11
         9: .line 102
            aload 5 /* c */
            checkcast com.oracle.truffle.nfi.NativeSource$ParsedLibrary
            astore 6 /* lib */
        start local 6 // com.oracle.truffle.nfi.NativeSource$ParsedLibrary lib
        10: .line 103
            invokestatic com.oracle.truffle.api.Truffle.getRuntime:()Lcom/oracle/truffle/api/TruffleRuntime;
            new com.oracle.truffle.nfi.NFIRootNode
            dup
            aload 0 /* this */
            aload 6 /* lib */
            aload 4 /* backendId */
            invokespecial com.oracle.truffle.nfi.NFIRootNode.<init>:(Lcom/oracle/truffle/nfi/NFILanguage;Lcom/oracle/truffle/nfi/NativeSource$ParsedLibrary;Ljava/lang/String;)V
            invokeinterface com.oracle.truffle.api.TruffleRuntime.createCallTarget:(Lcom/oracle/truffle/api/nodes/RootNode;)Lcom/oracle/truffle/api/RootCallTarget;
            areturn
        end local 6 // com.oracle.truffle.nfi.NativeSource$ParsedLibrary lib
        11: .line 105
      StackMap locals:
      StackMap stack:
            aload 5 /* c */
            checkcast com.oracle.truffle.nfi.NativeSource$ParsedSignature
            astore 6 /* sig */
        start local 6 // com.oracle.truffle.nfi.NativeSource$ParsedSignature sig
        12: .line 106
            new com.oracle.truffle.nfi.SignatureRootNode
            dup
            aload 0 /* this */
            aload 4 /* backendId */
            aload 6 /* sig */
            invokevirtual com.oracle.truffle.nfi.NativeSource$ParsedSignature.getBuildSignatureNode:()Lcom/oracle/truffle/nfi/SignatureRootNode$BuildSignatureNode;
            invokespecial com.oracle.truffle.nfi.SignatureRootNode.<init>:(Lcom/oracle/truffle/nfi/NFILanguage;Ljava/lang/String;Lcom/oracle/truffle/nfi/SignatureRootNode$BuildSignatureNode;)V
            astore 7 /* buildSignature */
        start local 7 // com.oracle.truffle.api.nodes.RootNode buildSignature
        13: .line 107
            invokestatic com.oracle.truffle.api.Truffle.getRuntime:()Lcom/oracle/truffle/api/TruffleRuntime;
            aload 7 /* buildSignature */
            invokeinterface com.oracle.truffle.api.TruffleRuntime.createCallTarget:(Lcom/oracle/truffle/api/nodes/RootNode;)Lcom/oracle/truffle/api/RootCallTarget;
            areturn
        end local 7 // com.oracle.truffle.api.nodes.RootNode buildSignature
        end local 6 // com.oracle.truffle.nfi.NativeSource$ParsedSignature sig
        end local 5 // com.oracle.truffle.nfi.NativeSource$Content c
        end local 4 // java.lang.String backendId
        end local 3 // com.oracle.truffle.nfi.NativeSource source
        end local 2 // java.lang.CharSequence nfiSource
        end local 1 // com.oracle.truffle.api.TruffleLanguage$ParsingRequest request
        end local 0 // com.oracle.truffle.nfi.NFILanguage this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   14     0            this  Lcom/oracle/truffle/nfi/NFILanguage;
            0   14     1         request  Lcom/oracle/truffle/api/TruffleLanguage$ParsingRequest;
            1   14     2       nfiSource  Ljava/lang/CharSequence;
            2   14     3          source  Lcom/oracle/truffle/nfi/NativeSource;
            4    5     4       backendId  Ljava/lang/String;
            6   14     4       backendId  Ljava/lang/String;
            7   14     5               c  Lcom/oracle/truffle/nfi/NativeSource$Content;
           10   11     6             lib  Lcom/oracle/truffle/nfi/NativeSource$ParsedLibrary;
           12   14     6             sig  Lcom/oracle/truffle/nfi/NativeSource$ParsedSignature;
           13   14     7  buildSignature  Lcom/oracle/truffle/api/nodes/RootNode;
    Exceptions:
      throws java.lang.Exception
    MethodParameters:
         Name  Flags
      request  

  protected boolean isThreadAccessAllowed(java.lang.Thread, boolean);
    descriptor: (Ljava/lang/Thread;Z)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=3, args_size=3
        start local 0 // com.oracle.truffle.nfi.NFILanguage this
        start local 1 // java.lang.Thread thread
        start local 2 // boolean singleThreaded
         0: .line 113
            iconst_1
            ireturn
        end local 2 // boolean singleThreaded
        end local 1 // java.lang.Thread thread
        end local 0 // com.oracle.truffle.nfi.NFILanguage this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0            this  Lcom/oracle/truffle/nfi/NFILanguage;
            0    1     1          thread  Ljava/lang/Thread;
            0    1     2  singleThreaded  Z
    MethodParameters:
                Name  Flags
      thread          
      singleThreaded  

  protected java.lang.Object createContext(com.oracle.truffle.api.TruffleLanguage$Env);
    descriptor: (Lcom/oracle/truffle/api/TruffleLanguage$Env;)Ljava/lang/Object;
    flags: (0x1044) ACC_PROTECTED, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            invokevirtual com.oracle.truffle.nfi.NFILanguage.createContext:(Lcom/oracle/truffle/api/TruffleLanguage$Env;)Lcom/oracle/truffle/nfi/NFIContext;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  protected boolean patchContext(java.lang.Object, com.oracle.truffle.api.TruffleLanguage$Env);
    descriptor: (Ljava/lang/Object;Lcom/oracle/truffle/api/TruffleLanguage$Env;)Z
    flags: (0x1044) ACC_PROTECTED, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=3, locals=3, args_size=3
         0: .line 1
            aload 0
            aload 1
            checkcast com.oracle.truffle.nfi.NFIContext
            aload 2
            invokevirtual com.oracle.truffle.nfi.NFILanguage.patchContext:(Lcom/oracle/truffle/nfi/NFIContext;Lcom/oracle/truffle/api/TruffleLanguage$Env;)Z
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
Signature: Lcom/oracle/truffle/api/TruffleLanguage<Lcom/oracle/truffle/nfi/NFIContext;>;
SourceFile: "NFILanguage.java"
InnerClasses:
  public final ContextPolicy = com.oracle.truffle.api.TruffleLanguage$ContextPolicy of com.oracle.truffle.api.TruffleLanguage
  public final Env = com.oracle.truffle.api.TruffleLanguage$Env of com.oracle.truffle.api.TruffleLanguage
  public final ParsingRequest = com.oracle.truffle.api.TruffleLanguage$ParsingRequest of com.oracle.truffle.api.TruffleLanguage
  public abstract Registration = com.oracle.truffle.api.TruffleLanguage$Registration of com.oracle.truffle.api.TruffleLanguage
  abstract Content = com.oracle.truffle.nfi.NativeSource$Content of com.oracle.truffle.nfi.NativeSource
  final ParsedLibrary = com.oracle.truffle.nfi.NativeSource$ParsedLibrary of com.oracle.truffle.nfi.NativeSource
  final ParsedSignature = com.oracle.truffle.nfi.NativeSource$ParsedSignature of com.oracle.truffle.nfi.NativeSource
  abstract BuildSignatureNode = com.oracle.truffle.nfi.SignatureRootNode$BuildSignatureNode of com.oracle.truffle.nfi.SignatureRootNode
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.TruffleLanguage$Registration(id = "nfi", name = "TruffleNFI", version = "0.1", characterMimeTypes = {"application/x-native"}, internal = true, contextPolicy = com.oracle.truffle.api.TruffleLanguage$ContextPolicy.SHARED:Lcom/oracle/truffle/api/TruffleLanguage$ContextPolicy;)