Program (script) @4:1
├─ VariableDeclaration (var) @4:1
│  └─ VariableDeclarator @4:1
│     ├─ Identifier "shadow" [global] (var) @4:5
│     └─ StringLiteral "outer" @4:21
├─ FunctionDeclaration "shadow_in_default" @5:1
│  ├─ parameters
│  │  └─ Identifier "x" [argument:0] @5:28
│  │     └─ default
│  │        └─ Identifier "shadow" (var) @5:32
│  └─ body
│     └─ FunctionBody @6:5
│        ├─ VariableDeclaration (var) @6:5
│        │  └─ VariableDeclarator @6:5
│        │     ├─ Identifier "shadow" (var) @6:9
│        │     └─ StringLiteral "inner" @6:25
│        └─ ReturnStatement @7:5
│           └─ Identifier "x" [argument:0] @7:12
├─ FunctionDeclaration "no_conflict" @12:1
│  ├─ parameters
│  │  └─ Identifier "x" [argument:0] @12:22
│  │     └─ default
│  │        └─ NumericLiteral 1 @12:26
│  └─ body
│     └─ FunctionBody @13:5
│        ├─ VariableDeclaration (var) @13:5
│        │  └─ VariableDeclarator @13:5
│        │     ├─ Identifier "y" [variable:0] (var) @13:9
│        │     └─ NumericLiteral 2 @13:13
│        └─ ReturnStatement @14:5
│           └─ Identifier "y" [variable:0] (var) @14:12
├─ FunctionDeclaration "param_redeclared" @19:1
│  ├─ parameters
│  │  └─ Identifier "a" [argument:0] (var) @19:27
│  │     └─ default
│  │        └─ NumericLiteral 10 @19:31
│  └─ body
│     └─ FunctionBody @20:5
│        ├─ VariableDeclaration (var) @20:5
│        │  └─ VariableDeclarator @20:5
│        │     └─ Identifier "a" [argument:0] (var) @20:9
│        └─ ReturnStatement @21:5
│           └─ Identifier "a" [argument:0] (var) @21:12
├─ FunctionDeclaration "multi_shadow" @25:1
│  ├─ parameters
│  │  ├─ Identifier "x" [argument:0] @25:23
│  │  │  └─ default
│  │  │     └─ Identifier "shadow" (var) @25:27
│  │  └─ Identifier "y" [argument:1] @25:23
│  │     └─ default
│  │        └─ Identifier "shadow" (var) @25:39
│  └─ body
│     └─ FunctionBody @26:5
│        ├─ VariableDeclaration (var) @26:5
│        │  └─ VariableDeclarator @26:5
│        │     ├─ Identifier "shadow" (var) @26:9
│        │     └─ StringLiteral "inner" @26:25
│        └─ ReturnStatement @27:5
│           └─ Identifier "x" [argument:0] @27:12
├─ FunctionDeclaration "destruct_shadow" @32:1
│  ├─ parameters
│  │  └─ BindingPattern (object)
│  │     └─ entry
│  │        └─ name
│  │           └─ Identifier "x" [variable:0] @32:28
│  │     └─ default
│  │        └─ Identifier "shadow" (var) @32:34
│  └─ body
│     └─ FunctionBody @33:5
│        ├─ VariableDeclaration (var) @33:5
│        │  └─ VariableDeclarator @33:5
│        │     ├─ Identifier "shadow" (var) @33:9
│        │     └─ ObjectExpression @33:18
│        └─ ReturnStatement @34:5
│           └─ Identifier "x" [variable:0] @34:12
├─ FunctionDeclaration "arrow_in_default" @40:1
│  ├─ parameters
│  │  └─ Identifier "x" [argument:0] @40:27
│  │     └─ default
│  │        └─ CallExpression @40:45
│  │           └─ FunctionExpression "" [arrow] @40:32
│  │              └─ body
│  │                 └─ FunctionBody @40:32
│  │                    └─ ReturnStatement @40:32
│  │                       └─ Identifier "shadow" (var) @40:38
│  └─ body
│     └─ FunctionBody @41:5
│        ├─ VariableDeclaration (var) @41:5
│        │  └─ VariableDeclarator @41:5
│        │     ├─ Identifier "shadow" (var) @41:9
│        │     └─ StringLiteral "inner" @41:25
│        └─ ReturnStatement @42:5
│           └─ Identifier "x" [argument:0] @42:12
└─ FunctionDeclaration "func_decl_no_conflict" @47:1
   ├─ parameters
   │  └─ Identifier "x" [argument:0] @47:32
   │     └─ default
   │        └─ NumericLiteral 1 @47:36
   └─ body
      └─ FunctionBody @48:5
         ├─ VariableDeclaration (var) @48:5
         │  └─ VariableDeclarator @48:5
         │     ├─ Identifier "y" (var) @48:9
         │     └─ NumericLiteral 42 @48:13
         ├─ FunctionDeclaration "inner" @49:5
         │  └─ body
         │     └─ FunctionBody @49:24
         │        └─ ReturnStatement @49:24
         │           └─ Identifier "y" (var) @49:31
         └─ ReturnStatement @50:5
            └─ CallExpression @50:17
               └─ Identifier "inner" [variable:0] @50:12
