public abstract class com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode extends com.oracle.truffle.js.nodes.JavaScriptNode implements com.oracle.truffle.js.nodes.function.FunctionNameHolder
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode
  super_class: com.oracle.truffle.js.nodes.JavaScriptNode
{
  protected final com.oracle.truffle.js.runtime.builtins.JSFunctionData functionData;
    descriptor: Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected final com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode;
    descriptor: Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  protected void <init>(com.oracle.truffle.js.runtime.builtins.JSFunctionData, com.oracle.truffle.js.nodes.function.FunctionRootNode);
    descriptor: (Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
        start local 1 // com.oracle.truffle.js.runtime.builtins.JSFunctionData functionData
        start local 2 // com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode
         0: .line 66
            aload 0 /* this */
            invokespecial com.oracle.truffle.js.nodes.JavaScriptNode.<init>:()V
         1: .line 67
            aload 0 /* this */
            aload 1 /* functionData */
            putfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionData:Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
         2: .line 68
            aload 0 /* this */
            aload 2 /* functionNode */
            putfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionNode:Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
         3: .line 69
            return
        end local 2 // com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode
        end local 1 // com.oracle.truffle.js.runtime.builtins.JSFunctionData functionData
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0          this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
            0    4     1  functionData  Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            0    4     2  functionNode  Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
    MethodParameters:
              Name  Flags
      functionData  
      functionNode  

  public static com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode create(com.oracle.truffle.js.runtime.builtins.JSFunctionData, com.oracle.truffle.js.nodes.function.FunctionRootNode);
    descriptor: (Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;)Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.runtime.builtins.JSFunctionData function
        start local 1 // com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode
         0: .line 72
            aload 0 /* function */
            invokevirtual com.oracle.truffle.js.runtime.builtins.JSFunctionData.needsParentFrame:()Z
            ifeq 2
         1: .line 73
            new com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$DefaultFunctionExpressionNode
            dup
            aload 0 /* function */
            aload 1 /* functionNode */
            invokespecial com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$DefaultFunctionExpressionNode.<init>:(Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;)V
            areturn
         2: .line 75
      StackMap locals:
      StackMap stack:
            new com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$AutonomousFunctionExpressionNode
            dup
            aload 0 /* function */
            aload 1 /* functionNode */
            invokespecial com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$AutonomousFunctionExpressionNode.<init>:(Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;)V
            areturn
        end local 1 // com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode
        end local 0 // com.oracle.truffle.js.runtime.builtins.JSFunctionData function
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0      function  Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            0    3     1  functionNode  Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
    MethodParameters:
              Name  Flags
      function      
      functionNode  

  public static com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode createLexicalThis(com.oracle.truffle.js.runtime.builtins.JSFunctionData, com.oracle.truffle.js.nodes.function.FunctionRootNode, com.oracle.truffle.js.nodes.JavaScriptNode);
    descriptor: (Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;Lcom/oracle/truffle/js/nodes/JavaScriptNode;)Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.runtime.builtins.JSFunctionData function
        start local 1 // com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode
        start local 2 // com.oracle.truffle.js.nodes.JavaScriptNode thisNode
         0: .line 80
            new com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$LexicalThisFunctionExpressionNode
            dup
            aload 0 /* function */
            aload 1 /* functionNode */
            aload 2 /* thisNode */
            invokespecial com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$LexicalThisFunctionExpressionNode.<init>:(Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;Lcom/oracle/truffle/js/nodes/JavaScriptNode;)V
            areturn
        end local 2 // com.oracle.truffle.js.nodes.JavaScriptNode thisNode
        end local 1 // com.oracle.truffle.js.nodes.function.FunctionRootNode functionNode
        end local 0 // com.oracle.truffle.js.runtime.builtins.JSFunctionData function
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    1     0      function  Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            0    1     1  functionNode  Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
            0    1     2      thisNode  Lcom/oracle/truffle/js/nodes/JavaScriptNode;
    MethodParameters:
              Name  Flags
      function      
      functionNode  
      thisNode      

  public static com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode createEmpty(com.oracle.truffle.js.runtime.JSContext, int, java.lang.String);
    descriptor: (Lcom/oracle/truffle/js/runtime/JSContext;ILjava/lang/String;)Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.runtime.JSContext context
        start local 1 // int length
        start local 2 // java.lang.String sourceName
         0: .line 84
            new com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$AutonomousFunctionExpressionNode
            dup
            aload 0 /* context */
            aload 0 /* context */
            invokevirtual com.oracle.truffle.js.runtime.JSContext.getEmptyFunctionCallTarget:()Lcom/oracle/truffle/api/CallTarget;
            iload 1 /* length */
            aload 2 /* sourceName */
            invokestatic com.oracle.truffle.js.runtime.builtins.JSFunctionData.create:(Lcom/oracle/truffle/js/runtime/JSContext;Lcom/oracle/truffle/api/CallTarget;ILjava/lang/String;)Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            aconst_null
            invokespecial com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$AutonomousFunctionExpressionNode.<init>:(Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;)V
            areturn
        end local 2 // java.lang.String sourceName
        end local 1 // int length
        end local 0 // com.oracle.truffle.js.runtime.JSContext context
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0     context  Lcom/oracle/truffle/js/runtime/JSContext;
            0    1     1      length  I
            0    1     2  sourceName  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      context     
      length      
      sourceName  

  public boolean hasTag(java.lang.Class<? extends com.oracle.truffle.api.instrumentation.Tag>);
    descriptor: (Ljava/lang/Class;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
        start local 1 // java.lang.Class tag
         0: .line 89
            aload 1 /* tag */
            ldc Lcom/oracle/truffle/js/nodes/instrumentation/JSTags$LiteralTag;
            if_acmpne 2
         1: .line 90
            iconst_1
            ireturn
         2: .line 91
      StackMap locals:
      StackMap stack:
            aload 1 /* tag */
            ldc Lcom/oracle/truffle/js/nodes/instrumentation/JSTags$InputNodeTag;
            if_acmpne 4
         3: .line 92
            iconst_1
            ireturn
         4: .line 93
      StackMap locals:
      StackMap stack:
            aload 1 /* tag */
            ldc Lcom/oracle/truffle/js/nodes/instrumentation/JSTags$DeclareTag;
            if_acmpne 8
         5: .line 95
            aload 0 /* this */
            ldc Lcom/oracle/truffle/api/instrumentation/StandardTags$ExpressionTag;
            invokespecial com.oracle.truffle.js.nodes.JavaScriptNode.hasTag:(Ljava/lang/Class;)Z
            ifeq 6
            iconst_0
            goto 7
      StackMap locals:
      StackMap stack:
         6: iconst_1
      StackMap locals:
      StackMap stack: int
         7: ireturn
         8: .line 97
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* tag */
            invokespecial com.oracle.truffle.js.nodes.JavaScriptNode.hasTag:(Ljava/lang/Class;)Z
            ireturn
        end local 1 // java.lang.Class tag
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
            0    9     1   tag  Ljava/lang/Class<+Lcom/oracle/truffle/api/instrumentation/Tag;>;
    Signature: (Ljava/lang/Class<+Lcom/oracle/truffle/api/instrumentation/Tag;>;)Z
    MethodParameters:
      Name  Flags
      tag   

  public java.lang.Object getNodeObject();
    descriptor: ()Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
         0: .line 103
            aload 0 /* this */
            ldc Lcom/oracle/truffle/api/instrumentation/StandardTags$ExpressionTag;
            invokespecial com.oracle.truffle.js.nodes.JavaScriptNode.hasTag:(Ljava/lang/Class;)Z
            ifeq 2
         1: .line 104
            ldc "literalType"
            getstatic com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag$Type.FunctionLiteral:Lcom/oracle/truffle/js/nodes/instrumentation/JSTags$LiteralTag$Type;
            invokevirtual com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag$Type.name:()Ljava/lang/String;
            invokestatic com.oracle.truffle.js.nodes.instrumentation.JSTags.createNodeObjectDescriptor:(Ljava/lang/String;Ljava/lang/Object;)Lcom/oracle/truffle/js/nodes/instrumentation/NodeObjectDescriptor;
            areturn
         2: .line 107
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionData:Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            invokevirtual com.oracle.truffle.js.runtime.builtins.JSFunctionData.getName:()Ljava/lang/String;
            ldc "var"
            invokestatic com.oracle.truffle.js.nodes.instrumentation.DeclareTagProvider.createDeclareNodeObject:(Ljava/lang/Object;Ljava/lang/Object;)Lcom/oracle/truffle/js/nodes/instrumentation/NodeObjectDescriptor;
            astore 1 /* descriptor */
        start local 1 // com.oracle.truffle.js.nodes.instrumentation.NodeObjectDescriptor descriptor
         3: .line 108
            aload 1 /* descriptor */
            ldc "literalType"
            getstatic com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag$Type.FunctionLiteral:Lcom/oracle/truffle/js/nodes/instrumentation/JSTags$LiteralTag$Type;
            invokevirtual com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag$Type.name:()Ljava/lang/String;
            invokevirtual com.oracle.truffle.js.nodes.instrumentation.NodeObjectDescriptor.addProperty:(Ljava/lang/String;Ljava/lang/Object;)V
         4: .line 109
            aload 1 /* descriptor */
            areturn
        end local 1 // com.oracle.truffle.js.nodes.instrumentation.NodeObjectDescriptor descriptor
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
            3    5     1  descriptor  Lcom/oracle/truffle/js/nodes/instrumentation/NodeObjectDescriptor;

  public com.oracle.truffle.api.instrumentation.InstrumentableNode materializeInstrumentableNodes(java.util.Set<java.lang.Class<? extends com.oracle.truffle.api.instrumentation.Tag>>);
    descriptor: (Ljava/util/Set;)Lcom/oracle/truffle/api/instrumentation/InstrumentableNode;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
        start local 1 // java.util.Set materializedTags
         0: .line 114
            aload 1 /* materializedTags */
            invokeinterface java.util.Set.isEmpty:()Z
            ifne 2
         1: .line 117
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionData:Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            invokevirtual com.oracle.truffle.js.runtime.builtins.JSFunctionData.materialize:()V
         2: .line 119
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            areturn
        end local 1 // java.util.Set materializedTags
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    3     0              this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
            0    3     1  materializedTags  Ljava/util/Set<Ljava/lang/Class<+Lcom/oracle/truffle/api/instrumentation/Tag;>;>;
    Signature: (Ljava/util/Set<Ljava/lang/Class<+Lcom/oracle/truffle/api/instrumentation/Tag;>;>;)Lcom/oracle/truffle/api/instrumentation/InstrumentableNode;
    MethodParameters:
                  Name  Flags
      materializedTags  

  public com.oracle.truffle.js.runtime.builtins.JSFunctionData getFunctionData();
    descriptor: ()Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
         0: .line 123
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionData:Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            areturn
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;

  public com.oracle.truffle.js.nodes.function.FunctionRootNode getFunctionNode();
    descriptor: ()Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
         0: .line 127
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 128
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionNode:Lcom/oracle/truffle/js/nodes/function/FunctionRootNode;
            areturn
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;

  public java.lang.String getFunctionName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
         0: .line 133
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionData:Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            invokevirtual com.oracle.truffle.js.runtime.builtins.JSFunctionData.getName:()Ljava/lang/String;
            areturn
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;

  public void setFunctionName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
        start local 1 // java.lang.String name
         0: .line 138
            invokestatic com.oracle.truffle.api.CompilerAsserts.neverPartOfCompilation:()V
         1: .line 139
            aload 0 /* this */
            getfield com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode.functionData:Lcom/oracle/truffle/js/runtime/builtins/JSFunctionData;
            aload 1 /* name */
            invokevirtual com.oracle.truffle.js.runtime.builtins.JSFunctionData.setName:(Ljava/lang/String;)V
         2: .line 140
            return
        end local 1 // java.lang.String name
        end local 0 // com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/js/nodes/function/JSFunctionExpressionNode;
            0    3     1  name  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      name  
}
SourceFile: "JSFunctionExpressionNode.java"
NestMembers:
  com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$AutonomousFunctionExpressionNode  com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$DefaultFunctionExpressionNode  com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$LexicalThisFunctionExpressionNode
InnerClasses:
  public final ExpressionTag = com.oracle.truffle.api.instrumentation.StandardTags$ExpressionTag of com.oracle.truffle.api.instrumentation.StandardTags
  private final AutonomousFunctionExpressionNode = com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$AutonomousFunctionExpressionNode of com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode
  private final DefaultFunctionExpressionNode = com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$DefaultFunctionExpressionNode of com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode
  private final LexicalThisFunctionExpressionNode = com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode$LexicalThisFunctionExpressionNode of com.oracle.truffle.js.nodes.function.JSFunctionExpressionNode
  public final DeclareTag = com.oracle.truffle.js.nodes.instrumentation.JSTags$DeclareTag of com.oracle.truffle.js.nodes.instrumentation.JSTags
  public final InputNodeTag = com.oracle.truffle.js.nodes.instrumentation.JSTags$InputNodeTag of com.oracle.truffle.js.nodes.instrumentation.JSTags
  public final LiteralTag = com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag of com.oracle.truffle.js.nodes.instrumentation.JSTags
  public final Type = com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag$Type of com.oracle.truffle.js.nodes.instrumentation.JSTags$LiteralTag