Program (script) @4:1
├─ VariableDeclaration (let) @4:1
│  └─ VariableDeclarator @4:1
│     ├─ Identifier "top_let" [global] (let) @4:5
│     └─ NumericLiteral 1 @4:15
├─ VariableDeclaration (const) @5:1
│  └─ VariableDeclarator @5:1
│     ├─ Identifier "top_const" [global] (const) @5:7
│     └─ NumericLiteral 2 @5:19
├─ VariableDeclaration (var) @6:1
│  └─ VariableDeclarator @6:1
│     ├─ Identifier "top_var" [global] (var) @6:5
│     └─ NumericLiteral 3 @6:15
├─ FunctionDeclaration "all_binding_types" @8:1
│  └─ body
│     └─ FunctionBody @10:5
│        ├─ VariableDeclaration (let) @10:5
│        │  └─ VariableDeclarator @10:5
│        │     ├─ Identifier "a" [variable:0] (let) @10:9
│        │     └─ NumericLiteral 1 @10:13
│        ├─ VariableDeclaration (const) @11:5
│        │  └─ VariableDeclarator @11:5
│        │     ├─ Identifier "b" [variable:1] (const) @11:11
│        │     └─ NumericLiteral 2 @11:15
│        ├─ VariableDeclaration (var) @12:5
│        │  └─ VariableDeclarator @12:5
│        │     ├─ Identifier "c" [variable:2] (var) @12:9
│        │     └─ NumericLiteral 3 @12:13
│        └─ ReturnStatement @13:5
│           └─ BinaryExpression (+) @13:18
│              ├─ BinaryExpression (+) @13:14
│              │  ├─ Identifier "a" [variable:0] (let) @13:12
│              │  └─ Identifier "b" [variable:1] (const) @13:16
│              └─ Identifier "c" [variable:2] (var) @13:20
├─ FunctionDeclaration "for_binding_forms" @17:1
│  └─ body
│     └─ FunctionBody @18:5
│        ├─ ForStatement @18:5
│        │  ├─ init
│        │  │  └─ VariableDeclaration (let) @18:10
│        │  │     └─ VariableDeclarator @18:10
│        │  │        ├─ Identifier "i" [variable:0] (let) @18:14
│        │  │        └─ NumericLiteral 0 @18:18
│        │  ├─ test
│        │  │  └─ BinaryExpression (<) @18:23
│        │  │     ├─ Identifier "i" [variable:0] (let) @18:21
│        │  │     └─ NumericLiteral 1 @18:25
│        │  ├─ update
│        │  │  └─ UpdateExpression (++, postfix) @18:29
│        │  │     └─ Identifier "i" [variable:0] (let) @18:28
│        │  └─ body
│        │     └─ BlockStatement @18:33
│        ├─ ForOfStatement @19:18
│        │  ├─ lhs
│        │  │  └─ VariableDeclaration (const) @19:10
│        │  │     └─ VariableDeclarator @19:10
│        │  │        └─ Identifier "x" [variable:1] (const) @19:16
│        │  ├─ rhs
│        │  │  └─ ArrayExpression @19:21
│        │  │     └─ NumericLiteral 1 @19:22
│        │  └─ body
│        │     └─ BlockStatement @19:26
│        │        └─ ExpressionStatement @20:9
│        │           └─ Identifier "x" [variable:1] (const) @20:9
│        ├─ ForStatement @22:5
│        │  ├─ init
│        │  │  └─ VariableDeclaration (var) @22:10
│        │  │     └─ VariableDeclarator @22:10
│        │  │        ├─ Identifier "j" [variable:2] (var) @22:14
│        │  │        └─ NumericLiteral 0 @22:18
│        │  ├─ test
│        │  │  └─ BinaryExpression (<) @22:23
│        │  │     ├─ Identifier "j" [variable:2] (var) @22:21
│        │  │     └─ NumericLiteral 1 @22:25
│        │  ├─ update
│        │  │  └─ UpdateExpression (++, postfix) @22:29
│        │  │     └─ Identifier "j" [variable:2] (var) @22:28
│        │  └─ body
│        │     └─ BlockStatement @22:33
│        └─ ExpressionStatement @23:5
│           └─ Identifier "j" [variable:2] @23:5
├─ FunctionDeclaration "destructuring_bindings" @27:1
│  └─ body
│     └─ FunctionBody @28:5
│        ├─ VariableDeclaration (let) @28:5
│        │  └─ VariableDeclarator @28:5
│        │     ├─ BindingPattern (array)
│        │     │  ├─ entry
│        │     │  │  └─ alias
│        │     │  │     └─ Identifier "a" [variable:0] (let) @28:10
│        │     │  └─ entry
│        │     │     └─ alias
│        │     │        └─ Identifier "b" [variable:1] (let) @28:13
│        │     └─ ArrayExpression @28:18
│        │        ├─ NumericLiteral 1 @28:19
│        │        └─ NumericLiteral 2 @28:22
│        ├─ VariableDeclaration (const) @29:5
│        │  └─ VariableDeclarator @29:5
│        │     ├─ BindingPattern (object)
│        │     │  ├─ entry
│        │     │  │  └─ name
│        │     │  │     └─ Identifier "c" [variable:2] (const) @29:13
│        │     │  └─ entry
│        │     │     └─ name
│        │     │        └─ Identifier "d" [variable:3] (const) @29:16
│        │     └─ ObjectExpression @29:22
│        │        ├─ ObjectProperty @29:22
│        │        │  ├─ StringLiteral "c" @29:24
│        │        │  └─ NumericLiteral 3 @29:27
│        │        └─ ObjectProperty @29:22
│        │           ├─ StringLiteral "d" @29:30
│        │           └─ NumericLiteral 4 @29:33
│        ├─ VariableDeclaration (var) @30:5
│        │  └─ VariableDeclarator @30:5
│        │     ├─ BindingPattern (array)
│        │     │  ├─ entry
│        │     │  │  └─ alias
│        │     │  │     └─ Identifier "e" [variable:4] (var) @30:10
│        │     │  └─ entry (rest)
│        │     │     └─ alias
│        │     │        └─ Identifier "f" [variable:5] (var) @30:16
│        │     └─ ArrayExpression @30:21
│        │        ├─ NumericLiteral 5 @30:22
│        │        ├─ NumericLiteral 6 @30:25
│        │        └─ NumericLiteral 7 @30:28
│        └─ ReturnStatement @31:5
│           └─ BinaryExpression (+) @31:30
│              ├─ BinaryExpression (+) @31:26
│              │  ├─ BinaryExpression (+) @31:22
│              │  │  ├─ BinaryExpression (+) @31:18
│              │  │  │  ├─ BinaryExpression (+) @31:14
│              │  │  │  │  ├─ Identifier "a" [variable:0] (let) @31:12
│              │  │  │  │  └─ Identifier "b" [variable:1] (let) @31:16
│              │  │  │  └─ Identifier "c" [variable:2] (const) @31:20
│              │  │  └─ Identifier "d" [variable:3] (const) @31:24
│              │  └─ Identifier "e" [variable:4] (var) @31:28
│              └─ MemberExpression [computed] @31:33
│                 ├─ Identifier "f" [variable:5] (var) @31:32
│                 └─ NumericLiteral 0 @31:34
└─ FunctionDeclaration "multi_declarator" @35:1
   └─ body
      └─ FunctionBody @36:5
         ├─ VariableDeclaration (let) @36:5
         │  ├─ VariableDeclarator @36:5
         │  │  ├─ Identifier "x" [variable:0] (let) @36:9
         │  │  └─ NumericLiteral 1 @36:13
         │  ├─ VariableDeclarator @36:5
         │  │  ├─ Identifier "y" [variable:1] (let) @37:9
         │  │  └─ NumericLiteral 2 @37:13
         │  └─ VariableDeclarator @36:5
         │     ├─ Identifier "z" [variable:2] (let) @38:9
         │     └─ NumericLiteral 3 @38:13
         └─ ReturnStatement @39:5
            └─ BinaryExpression (+) @39:18
               ├─ BinaryExpression (+) @39:14
               │  ├─ Identifier "x" [variable:0] (let) @39:12
               │  └─ Identifier "y" [variable:1] (let) @39:16
               └─ Identifier "z" [variable:2] (let) @39:20
