Program (script) @1:1
├─ FunctionDeclaration "with_eval" [direct-eval] [uses-this] [might-need-arguments] @1:1
│  └─ body
│     └─ FunctionBody @2:5
│        ├─ VariableDeclaration (let) @2:5
│        │  └─ VariableDeclarator @2:5
│        │     ├─ Identifier "x" (let) @2:9
│        │     └─ NumericLiteral 1 @2:13
│        ├─ ExpressionStatement @3:5
│        │  └─ CallExpression @3:9
│        │     ├─ Identifier "eval" [in-eval-scope] @3:5
│        │     └─ StringLiteral "" @3:12
│        └─ ReturnStatement @4:5
│           └─ Identifier "x" (let) @4:12
├─ FunctionDeclaration "eval_in_nested_scope" [direct-eval] [uses-this] [might-need-arguments] @7:1
│  └─ body
│     └─ FunctionBody @8:5
│        ├─ VariableDeclaration (let) @8:5
│        │  └─ VariableDeclarator @8:5
│        │     ├─ Identifier "x" (let) @8:9
│        │     └─ NumericLiteral 1 @8:13
│        ├─ BlockStatement @9:5
│        │  └─ ExpressionStatement @10:9
│        │     └─ CallExpression @10:13
│        │        ├─ Identifier "eval" [in-eval-scope] @10:9
│        │        └─ StringLiteral "" @10:16
│        └─ ReturnStatement @12:5
│           └─ Identifier "x" (let) @12:12
└─ FunctionDeclaration "nested_function_unaffected" [direct-eval] [uses-this] [might-need-arguments] @15:1
   └─ body
      └─ FunctionBody @16:5
         ├─ ExpressionStatement @16:5
         │  └─ CallExpression @16:9
         │     ├─ Identifier "eval" [in-eval-scope] @16:5
         │     └─ StringLiteral "" @16:12
         ├─ FunctionDeclaration "inner" @17:5
         │  └─ body
         │     └─ FunctionBody @18:9
         │        ├─ VariableDeclaration (let) @18:9
         │        │  └─ VariableDeclarator @18:9
         │        │     ├─ Identifier "y" [variable:0] (let) @18:13
         │        │     └─ NumericLiteral 2 @18:17
         │        └─ ReturnStatement @19:9
         │           └─ Identifier "y" [variable:0] (let) @19:16
         └─ ReturnStatement @21:5
            └─ CallExpression @21:17
               └─ Identifier "inner" @21:12
