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