Program (script) @6:1
├─ FunctionDeclaration "clean_outer" [uses-this] @6:1
│  └─ body
│     └─ FunctionBody @7:5
│        ├─ VariableDeclaration (let) @7:5
│        │  └─ VariableDeclarator @7:5
│        │     ├─ Identifier "a" (let) @7:9
│        │     └─ NumericLiteral 1 @7:13
│        ├─ FunctionDeclaration "middle" [direct-eval] [uses-this] [might-need-arguments] @8:5
│        │  └─ body
│        │     └─ FunctionBody @9:9
│        │        ├─ VariableDeclaration (let) @9:9
│        │        │  └─ VariableDeclarator @9:9
│        │        │     ├─ Identifier "b" (let) @9:13
│        │        │     └─ NumericLiteral 2 @9:17
│        │        ├─ ExpressionStatement @10:9
│        │        │  └─ CallExpression @10:13
│        │        │     ├─ Identifier "eval" [in-eval-scope] @10:9
│        │        │     └─ StringLiteral "" @10:16
│        │        ├─ FunctionDeclaration "inner" @11:9
│        │        │  └─ body
│        │        │     └─ FunctionBody @12:13
│        │        │        ├─ VariableDeclaration (let) @12:13
│        │        │        │  └─ VariableDeclarator @12:13
│        │        │        │     ├─ Identifier "c" [variable:0] (let) @12:17
│        │        │        │     └─ NumericLiteral 3 @12:21
│        │        │        └─ ReturnStatement @13:13
│        │        │           └─ BinaryExpression (+) @13:26
│        │        │              ├─ BinaryExpression (+) @13:22
│        │        │              │  ├─ Identifier "a" (let) [in-eval-scope] @13:20
│        │        │              │  └─ Identifier "b" (let) @13:24
│        │        │              └─ Identifier "c" [variable:0] (let) @13:28
│        │        └─ ReturnStatement @15:9
│        │           └─ CallExpression @15:21
│        │              └─ Identifier "inner" @15:16
│        └─ ReturnStatement @17:5
│           └─ CallExpression @17:18
│              └─ Identifier "middle" @17:12
└─ FunctionDeclaration "eval_at_top" [direct-eval] [uses-this] [might-need-arguments] @21:1
   └─ body
      └─ FunctionBody @22:5
         ├─ VariableDeclaration (let) @22:5
         │  └─ VariableDeclarator @22:5
         │     ├─ Identifier "x" (let) @22:9
         │     └─ NumericLiteral 1 @22:13
         ├─ ExpressionStatement @23:5
         │  └─ CallExpression @23:9
         │     ├─ Identifier "eval" [in-eval-scope] @23:5
         │     └─ StringLiteral "" @23:12
         ├─ FunctionDeclaration "level1" @24:5
         │  └─ body
         │     └─ FunctionBody @25:9
         │        ├─ VariableDeclaration (let) @25:9
         │        │  └─ VariableDeclarator @25:9
         │        │     ├─ Identifier "y" (let) @25:13
         │        │     └─ NumericLiteral 2 @25:17
         │        ├─ FunctionDeclaration "level2" @26:9
         │        │  └─ body
         │        │     └─ FunctionBody @27:13
         │        │        └─ ReturnStatement @27:13
         │        │           └─ BinaryExpression (+) @27:22
         │        │              ├─ Identifier "x" (let) @27:20
         │        │              └─ Identifier "y" (let) @27:24
         │        └─ ReturnStatement @29:9
         │           └─ CallExpression @29:22
         │              └─ Identifier "level2" [variable:0] @29:16
         └─ ReturnStatement @31:5
            └─ CallExpression @31:18
               └─ Identifier "level1" @31:12
