Program (script) @1:1
└─ FunctionDeclaration "destructure" @1:1
   └─ body
      └─ FunctionBody @2:5
         ├─ VariableDeclaration (let) @2:5
         │  └─ VariableDeclarator @2:5
         │     ├─ BindingPattern (array)
         │     │  ├─ entry
         │     │  │  └─ alias
         │     │  │     └─ Identifier "a" [variable:0] (let) @2:10
         │     │  └─ entry
         │     │     └─ alias
         │     │        └─ Identifier "b" [variable:1] (let) @2:13
         │     └─ ArrayExpression @2:18
         │        ├─ NumericLiteral 1 @2:19
         │        └─ NumericLiteral 2 @2:22
         ├─ VariableDeclaration (let) @3:5
         │  └─ VariableDeclarator @3:5
         │     ├─ BindingPattern (object)
         │     │  ├─ entry
         │     │  │  └─ name
         │     │  │     └─ Identifier "x" [variable:2] (let) @3:11
         │     │  └─ entry
         │     │     ├─ name
         │     │     │  └─ Identifier "y" [global] @3:14
         │     │     └─ alias
         │     │        └─ Identifier "z" [variable:3] (let) @3:17
         │     └─ ObjectExpression @3:23
         │        ├─ ObjectProperty @3:23
         │        │  ├─ StringLiteral "x" @3:25
         │        │  └─ NumericLiteral 3 @3:28
         │        └─ ObjectProperty @3:23
         │           ├─ StringLiteral "y" @3:31
         │           └─ NumericLiteral 4 @3:34
         └─ ReturnStatement @4:5
            └─ BinaryExpression (+) @4:22
               ├─ BinaryExpression (+) @4:18
               │  ├─ BinaryExpression (+) @4:14
               │  │  ├─ Identifier "a" [variable:0] (let) @4:12
               │  │  └─ Identifier "b" [variable:1] (let) @4:16
               │  └─ Identifier "x" [variable:2] (let) @4:20
               └─ Identifier "z" [variable:3] (let) @4:24
