Program (script) @2:1 ├─ FunctionDeclaration "forin_array_pattern" @2:1 │ └─ body │ └─ FunctionBody @3:5 │ ├─ VariableDeclaration (var) @3:5 │ │ ├─ VariableDeclarator @3:5 │ │ │ └─ Identifier "a" [variable:0] (var) @3:9 │ │ └─ VariableDeclarator @3:5 │ │ └─ Identifier "b" [variable:1] (var) @3:12 │ └─ ForInStatement @4:17 │ ├─ lhs │ │ └─ BindingPattern (array) │ │ ├─ entry │ │ │ └─ alias │ │ │ └─ Identifier "a" [variable:0] (var) @4:11 │ │ └─ entry │ │ └─ alias │ │ └─ Identifier "b" [variable:1] (var) @4:14 │ ├─ rhs │ │ └─ ObjectExpression @4:20 │ │ └─ ObjectProperty @4:20 │ │ ├─ StringLiteral "xy" @4:22 │ │ └─ NumericLiteral 1 @4:26 │ └─ body │ └─ BlockStatement @4:31 ├─ FunctionDeclaration "forin_object_pattern" @8:1 │ └─ body │ └─ FunctionBody @9:5 │ ├─ VariableDeclaration (var) @9:5 │ │ ├─ VariableDeclarator @9:5 │ │ │ └─ Identifier "x" [variable:0] (var) @9:9 │ │ └─ VariableDeclarator @9:5 │ │ └─ Identifier "y" [variable:1] (var) @9:12 │ └─ ForInStatement @10:19 │ ├─ lhs │ │ └─ BindingPattern (object) │ │ ├─ entry │ │ │ └─ name │ │ │ └─ Identifier "x" [variable:0] (var) @10:12 │ │ └─ entry │ │ └─ name │ │ └─ Identifier "y" [variable:1] (var) @10:15 │ ├─ rhs │ │ └─ ObjectExpression @10:22 │ │ └─ ObjectProperty @10:22 │ │ ├─ StringLiteral "ab" @10:24 │ │ └─ NumericLiteral 1 @10:28 │ └─ body │ └─ BlockStatement @10:33 ├─ FunctionDeclaration "forof_array_pattern" @14:1 │ └─ body │ └─ FunctionBody @15:5 │ ├─ VariableDeclaration (var) @15:5 │ │ ├─ VariableDeclarator @15:5 │ │ │ └─ Identifier "a" [variable:0] (var) @15:9 │ │ └─ VariableDeclarator @15:5 │ │ └─ Identifier "b" [variable:1] (var) @15:12 │ └─ ForOfStatement @16:17 │ ├─ lhs │ │ └─ BindingPattern (array) │ │ ├─ entry │ │ │ └─ alias │ │ │ └─ Identifier "a" [variable:0] (var) @16:11 │ │ └─ entry │ │ └─ alias │ │ └─ Identifier "b" [variable:1] (var) @16:14 │ ├─ rhs │ │ └─ ArrayExpression @16:20 │ │ └─ ArrayExpression @16:21 │ │ ├─ NumericLiteral 1 @16:22 │ │ └─ NumericLiteral 2 @16:25 │ └─ body │ └─ BlockStatement @16:30 ├─ FunctionDeclaration "forof_object_pattern" @20:1 │ └─ body │ └─ FunctionBody @21:5 │ ├─ VariableDeclaration (var) @21:5 │ │ ├─ VariableDeclarator @21:5 │ │ │ └─ Identifier "x" [variable:0] (var) @21:9 │ │ └─ VariableDeclarator @21:5 │ │ └─ Identifier "y" [variable:1] (var) @21:12 │ └─ ForOfStatement @22:19 │ ├─ lhs │ │ └─ BindingPattern (object) │ │ ├─ entry │ │ │ └─ name │ │ │ └─ Identifier "x" [variable:0] (var) @22:12 │ │ └─ entry │ │ └─ name │ │ └─ Identifier "y" [variable:1] (var) @22:15 │ ├─ rhs │ │ └─ ArrayExpression @22:22 │ │ └─ ObjectExpression @22:23 │ │ ├─ ObjectProperty @22:23 │ │ │ ├─ StringLiteral "x" @22:25 │ │ │ └─ NumericLiteral 1 @22:28 │ │ └─ ObjectProperty @22:23 │ │ ├─ StringLiteral "y" @22:31 │ │ └─ NumericLiteral 2 @22:34 │ └─ body │ └─ BlockStatement @22:40 ├─ FunctionDeclaration "forin_member_lhs" @26:1 │ └─ body │ └─ FunctionBody @27:5 │ ├─ VariableDeclaration (var) @27:5 │ │ └─ VariableDeclarator @27:5 │ │ ├─ Identifier "obj" [variable:0] (var) @27:9 │ │ └─ ObjectExpression @27:15 │ └─ ForInStatement @28:18 │ ├─ lhs │ │ └─ MemberExpression @28:13 │ │ ├─ Identifier "obj" [variable:0] (var) @28:10 │ │ └─ Identifier "key" @28:14 │ ├─ rhs │ │ └─ ObjectExpression @28:21 │ │ └─ ObjectProperty @28:21 │ │ ├─ StringLiteral "a" @28:23 │ │ └─ NumericLiteral 1 @28:26 │ └─ body │ └─ BlockStatement @28:31 └─ FunctionDeclaration "forof_member_lhs" @32:1 └─ body └─ FunctionBody @33:5 ├─ VariableDeclaration (var) @33:5 │ └─ VariableDeclarator @33:5 │ ├─ Identifier "obj" [variable:0] (var) @33:9 │ └─ ObjectExpression @33:15 └─ ForOfStatement @34:18 ├─ lhs │ └─ MemberExpression @34:13 │ ├─ Identifier "obj" [variable:0] (var) @34:10 │ └─ Identifier "key" @34:14 ├─ rhs │ └─ ArrayExpression @34:21 │ ├─ NumericLiteral 1 @34:22 │ └─ NumericLiteral 2 @34:25 └─ body └─ BlockStatement @34:29