Program (script) @2:1
├─ FunctionDeclaration "eval_in_with" [direct-eval] [uses-this] [might-need-arguments] @2:1
│  ├─ parameters
│  │  └─ Identifier "obj" @2:23
│  └─ body
│     └─ FunctionBody @3:5
│        ├─ VariableDeclaration (let) @3:5
│        │  └─ VariableDeclarator @3:5
│        │     ├─ Identifier "a" (let) @3:9
│        │     └─ NumericLiteral 1 @3:13
│        └─ WithStatement @4:5
│           ├─ object
│           │  └─ Identifier "obj" @4:11
│           └─ body
│              └─ BlockStatement @4:16
│                 ├─ ExpressionStatement @5:9
│                 │  └─ CallExpression @5:13
│                 │     ├─ Identifier "eval" [in-eval-scope] @5:9
│                 │     └─ StringLiteral "" @5:16
│                 └─ ExpressionStatement @6:9
│                    └─ Identifier "a" (let) [in-eval-scope] @6:9
├─ FunctionDeclaration "with_after_eval" [direct-eval] [uses-this] [might-need-arguments] @11:1
│  ├─ parameters
│  │  └─ Identifier "obj" @11:26
│  └─ body
│     └─ FunctionBody @12:5
│        ├─ VariableDeclaration (let) @12:5
│        │  └─ VariableDeclarator @12:5
│        │     ├─ Identifier "b" (let) @12:9
│        │     └─ NumericLiteral 1 @12:13
│        ├─ ExpressionStatement @13:5
│        │  └─ CallExpression @13:9
│        │     ├─ Identifier "eval" [in-eval-scope] @13:5
│        │     └─ StringLiteral "" @13:12
│        └─ WithStatement @14:5
│           ├─ object
│           │  └─ Identifier "obj" @14:11
│           └─ body
│              └─ BlockStatement @14:16
│                 └─ ExpressionStatement @15:9
│                    └─ Identifier "b" (let) @15:9
└─ FunctionDeclaration "branched_poison" [direct-eval] [uses-this] [might-need-arguments] @20:1
   ├─ parameters
   │  ├─ Identifier "flag" @20:26
   │  └─ Identifier "obj" @20:26
   └─ body
      └─ FunctionBody @21:5
         ├─ VariableDeclaration (let) @21:5
         │  └─ VariableDeclarator @21:5
         │     ├─ Identifier "c" (let) @21:9
         │     └─ NumericLiteral 1 @21:13
         ├─ IfStatement @22:5
         │  ├─ test
         │  │  └─ Identifier "flag" @22:9
         │  ├─ consequent
         │  │  └─ BlockStatement @22:15
         │  │     └─ ExpressionStatement @23:9
         │  │        └─ CallExpression @23:13
         │  │           ├─ Identifier "eval" [in-eval-scope] @23:9
         │  │           └─ StringLiteral "" @23:16
         │  └─ alternate
         │     └─ BlockStatement @24:12
         │        └─ WithStatement @25:9
         │           ├─ object
         │           │  └─ Identifier "obj" @25:15
         │           └─ body
         │              └─ BlockStatement @25:20
         │                 └─ ExpressionStatement @26:13
         │                    └─ Identifier "c" (let) @26:13
         └─ ReturnStatement @29:5
            └─ Identifier "c" (let) @29:12
