Program (script) @2:1 ├─ FunctionDeclaration "outer" @2:1 │ ├─ parameters │ │ └─ Identifier "obj" [argument:0] @2:16 │ └─ body │ └─ FunctionBody @3:5 │ ├─ VariableDeclaration (let) @3:5 │ │ └─ VariableDeclarator @3:5 │ │ ├─ Identifier "x" (let) @3:9 │ │ └─ NumericLiteral 1 @3:13 │ └─ WithStatement @4:5 │ ├─ object │ │ └─ Identifier "obj" [argument:0] @4:11 │ └─ body │ └─ BlockStatement @4:16 │ ├─ FunctionDeclaration "inner" @5:9 │ │ └─ body │ │ └─ FunctionBody @6:13 │ │ └─ ReturnStatement @6:13 │ │ └─ Identifier "x" (let) @6:20 │ └─ ExpressionStatement @8:9 │ └─ CallExpression @8:14 │ └─ Identifier "inner" @8:9 ├─ FunctionDeclaration "sibling_test" @13:1 │ ├─ parameters │ │ └─ Identifier "obj" [argument:0] @13:23 │ └─ body │ └─ FunctionBody @14:5 │ ├─ FunctionDeclaration "clean" @14:5 │ │ └─ body │ │ └─ FunctionBody @15:9 │ │ ├─ VariableDeclaration (let) @15:9 │ │ │ └─ VariableDeclarator @15:9 │ │ │ ├─ Identifier "y" [variable:0] (let) @15:13 │ │ │ └─ NumericLiteral 1 @15:17 │ │ └─ ReturnStatement @16:9 │ │ └─ Identifier "y" [variable:0] (let) @16:16 │ └─ WithStatement @18:5 │ ├─ object │ │ └─ Identifier "obj" [argument:0] @18:11 │ └─ body │ └─ BlockStatement @18:16 │ └─ ExpressionStatement @19:9 │ └─ CallExpression @19:14 │ └─ Identifier "clean" @19:9 ├─ FunctionDeclaration "double_with" @24:1 │ ├─ parameters │ │ ├─ Identifier "a" [argument:0] @24:22 │ │ └─ Identifier "b" @24:22 │ └─ body │ └─ FunctionBody @25:5 │ └─ WithStatement @25:5 │ ├─ object │ │ └─ Identifier "a" [argument:0] @25:11 │ └─ body │ └─ BlockStatement @25:14 │ └─ WithStatement @26:9 │ ├─ object │ │ └─ Identifier "b" @26:15 │ └─ body │ └─ BlockStatement @26:18 │ └─ ExpressionStatement @27:13 │ └─ Identifier "x" @27:13 └─ FunctionDeclaration "with_arrow" @33:1 ├─ parameters │ └─ Identifier "obj" [argument:0] @33:21 └─ body └─ FunctionBody @34:5 ├─ VariableDeclaration (let) @34:5 │ └─ VariableDeclarator @34:5 │ ├─ Identifier "z" (let) @34:9 │ └─ NumericLiteral 1 @34:13 └─ WithStatement @35:5 ├─ object │ └─ Identifier "obj" [argument:0] @35:11 └─ body └─ BlockStatement @35:16 └─ VariableDeclaration (let) @36:9 └─ VariableDeclarator @36:9 ├─ Identifier "f" [variable:0] (let) @36:13 └─ FunctionExpression "" [arrow] @36:17 └─ body └─ FunctionBody @36:17 └─ ReturnStatement @36:17 └─ Identifier "z" (let) @36:23