Program (script) @2:1
├─ FunctionDeclaration "shadow_let" @2:1
│  └─ body
│     └─ FunctionBody @3:5
│        ├─ VariableDeclaration (let) @3:5
│        │  └─ VariableDeclarator @3:5
│        │     ├─ Identifier "x" [variable:2] (let) @3:9
│        │     └─ NumericLiteral 1 @3:13
│        ├─ BlockStatement @4:5
│        │  ├─ VariableDeclaration (let) @5:9
│        │  │  └─ VariableDeclarator @5:9
│        │  │     ├─ Identifier "x" [variable:1] (let) @5:13
│        │  │     └─ NumericLiteral 2 @5:17
│        │  ├─ BlockStatement @6:9
│        │  │  ├─ VariableDeclaration (let) @7:13
│        │  │  │  └─ VariableDeclarator @7:13
│        │  │  │     ├─ Identifier "x" [variable:0] (let) @7:17
│        │  │  │     └─ NumericLiteral 3 @7:21
│        │  │  └─ ExpressionStatement @8:13
│        │  │     └─ Identifier "x" [variable:0] (let) @8:13
│        │  └─ ExpressionStatement @10:9
│        │     └─ Identifier "x" [variable:1] (let) @10:9
│        └─ ExpressionStatement @12:5
│           └─ Identifier "x" [variable:2] (let) @12:5
├─ FunctionDeclaration "var_and_let" @16:1
│  └─ body
│     └─ FunctionBody @17:5
│        ├─ VariableDeclaration (var) @17:5
│        │  └─ VariableDeclarator @17:5
│        │     ├─ Identifier "x" [variable:1] (var) @17:9
│        │     └─ NumericLiteral 1 @17:13
│        ├─ BlockStatement @18:5
│        │  ├─ VariableDeclaration (let) @19:9
│        │  │  └─ VariableDeclarator @19:9
│        │  │     ├─ Identifier "x" [variable:0] (let) @19:13
│        │  │     └─ NumericLiteral 2 @19:17
│        │  └─ ExpressionStatement @20:9
│        │     └─ Identifier "x" [variable:0] (let) @20:9
│        └─ ExpressionStatement @22:5
│           └─ Identifier "x" [variable:1] (var) @22:5
├─ VariableDeclaration (var) @26:1
│  └─ VariableDeclarator @26:1
│     ├─ Identifier "globalName" [global] (var) @26:5
│     └─ NumericLiteral 1 @26:18
├─ FunctionDeclaration "param_shadows_global" @27:1
│  ├─ parameters
│  │  └─ Identifier "globalName" [argument:0] @27:31
│  └─ body
│     └─ FunctionBody @28:5
│        └─ ReturnStatement @28:5
│           └─ Identifier "globalName" [argument:0] @28:12
└─ FunctionDeclaration "catch_shadow" @32:1
   └─ body
      └─ FunctionBody @33:5
         ├─ VariableDeclaration (let) @33:5
         │  └─ VariableDeclarator @33:5
         │     ├─ Identifier "e" [variable:1] (let) @33:9
         │     └─ StringLiteral "outer" @33:20
         ├─ TryStatement @34:5
         │  ├─ block
         │  │  └─ BlockStatement @34:9
         │  │     └─ ThrowStatement @35:9
         │  │        └─ StringLiteral "inner" @35:22
         │  └─ handler
         │     └─ CatchClause @36:7
         │        ├─ parameter
         │        │  └─ Identifier "e" [variable:0] @36:14
         │        └─ BlockStatement @36:17
         │           └─ ExpressionStatement @37:9
         │              └─ Identifier "e" [variable:0] @37:9
         └─ ExpressionStatement @39:5
            └─ Identifier "e" [variable:1] (let) @39:5
