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
