Program (script) @1:1
├─ FunctionDeclaration "level0" @1:1
│  ├─ parameters
│  │  └─ Identifier "a" @1:17
│  └─ body
│     └─ FunctionBody @2:5
│        ├─ VariableDeclaration (let) @2:5
│        │  └─ VariableDeclarator @2:5
│        │     ├─ Identifier "x" (let) @2:9
│        │     └─ NumericLiteral 1 @2:13
│        ├─ FunctionDeclaration "level1" @3:5
│        │  ├─ parameters
│        │  │  └─ Identifier "b" @3:21
│        │  └─ body
│        │     └─ FunctionBody @4:9
│        │        ├─ VariableDeclaration (let) @4:9
│        │        │  └─ VariableDeclarator @4:9
│        │        │     ├─ Identifier "y" (let) @4:13
│        │        │     └─ NumericLiteral 2 @4:17
│        │        ├─ FunctionDeclaration "level2" @5:9
│        │        │  ├─ parameters
│        │        │  │  └─ Identifier "c" [argument:0] @5:25
│        │        │  └─ body
│        │        │     └─ FunctionBody @6:13
│        │        │        └─ ReturnStatement @6:13
│        │        │           └─ BinaryExpression (+) @6:34
│        │        │              ├─ BinaryExpression (+) @6:30
│        │        │              │  ├─ BinaryExpression (+) @6:26
│        │        │              │  │  ├─ BinaryExpression (+) @6:22
│        │        │              │  │  │  ├─ Identifier "a" @6:20
│        │        │              │  │  │  └─ Identifier "x" (let) @6:24
│        │        │              │  │  └─ Identifier "b" @6:28
│        │        │              │  └─ Identifier "y" (let) @6:32
│        │        │              └─ Identifier "c" [argument:0] @6:36
│        │        └─ ReturnStatement @8:9
│        │           └─ CallExpression @8:22
│        │              ├─ Identifier "level2" [variable:0] @8:16
│        │              └─ NumericLiteral 3 @8:23
│        └─ ReturnStatement @10:5
│           └─ CallExpression @10:18
│              ├─ Identifier "level1" [variable:0] @10:12
│              └─ NumericLiteral 2 @10:19
└─ FunctionDeclaration "closure_over_var" @13:1
   └─ body
      └─ FunctionBody @14:5
         ├─ VariableDeclaration (var) @14:5
         │  └─ VariableDeclarator @14:5
         │     ├─ Identifier "counter" (var) @14:9
         │     └─ NumericLiteral 0 @14:19
         ├─ FunctionDeclaration "increment" @15:5
         │  └─ body
         │     └─ FunctionBody @16:9
         │        ├─ ExpressionStatement @16:9
         │        │  └─ AssignmentExpression (=) @16:17
         │        │     ├─ Identifier "counter" (var) @16:9
         │        │     └─ BinaryExpression (+) @16:27
         │        │        ├─ Identifier "counter" (var) @16:19
         │        │        └─ NumericLiteral 1 @16:29
         │        └─ ReturnStatement @17:9
         │           └─ Identifier "counter" (var) @17:16
         └─ ReturnStatement @19:5
            └─ Identifier "increment" [variable:0] @19:12
