Program (script) @1:1
└─ FunctionDeclaration "outer" [uses-this] @1:1
   └─ body
      └─ FunctionBody @2:5
         ├─ VariableDeclaration (let) @2:5
         │  └─ VariableDeclarator @2:5
         │     ├─ Identifier "x" (let) @2:9
         │     └─ NumericLiteral 1 @2:13
         ├─ FunctionDeclaration "middle" [direct-eval] [uses-this] [might-need-arguments] @3:5
         │  └─ body
         │     └─ FunctionBody @4:9
         │        ├─ ExpressionStatement @4:9
         │        │  └─ CallExpression @4:13
         │        │     ├─ Identifier "eval" [in-eval-scope] @4:9
         │        │     └─ StringLiteral "" @4:16
         │        ├─ FunctionDeclaration "inner" @5:9
         │        │  └─ body
         │        │     └─ FunctionBody @6:13
         │        │        ├─ VariableDeclaration (let) @6:13
         │        │        │  └─ VariableDeclarator @6:13
         │        │        │     ├─ Identifier "y" [variable:0] (let) @6:17
         │        │        │     └─ NumericLiteral 2 @6:21
         │        │        └─ ReturnStatement @7:13
         │        │           └─ BinaryExpression (+) @7:22
         │        │              ├─ Identifier "x" (let) [in-eval-scope] @7:20
         │        │              └─ Identifier "y" [variable:0] (let) @7:24
         │        └─ ReturnStatement @9:9
         │           └─ CallExpression @9:21
         │              └─ Identifier "inner" @9:16
         └─ ReturnStatement @11:5
            └─ CallExpression @11:18
               └─ Identifier "middle" @11:12
