Program (script) @1:1 ├─ FunctionDeclaration "try_catch" @1:1 │ └─ body │ └─ FunctionBody @2:5 │ ├─ VariableDeclaration (let) @2:5 │ │ └─ VariableDeclarator @2:5 │ │ ├─ Identifier "x" [variable:2] (let) @2:9 │ │ └─ NumericLiteral 1 @2:13 │ └─ TryStatement @3:5 │ ├─ block │ │ └─ BlockStatement @3:9 │ │ ├─ VariableDeclaration (let) @4:9 │ │ │ └─ VariableDeclarator @4:9 │ │ │ ├─ Identifier "y" [variable:0] (let) @4:13 │ │ │ └─ NumericLiteral 2 @4:17 │ │ └─ ReturnStatement @5:9 │ │ └─ BinaryExpression (+) @5:18 │ │ ├─ Identifier "x" [variable:2] (let) @5:16 │ │ └─ Identifier "y" [variable:0] (let) @5:20 │ └─ handler │ └─ CatchClause @6:7 │ ├─ parameter │ │ └─ Identifier "e" [variable:1] @6:14 │ └─ BlockStatement @6:17 │ └─ ReturnStatement @7:9 │ └─ Identifier "e" [variable:1] @7:16 ├─ FunctionDeclaration "catch_parameter" @11:1 │ └─ body │ └─ FunctionBody @12:5 │ └─ TryStatement @12:5 │ ├─ block │ │ └─ BlockStatement @12:9 │ │ └─ ThrowStatement @13:9 │ │ └─ NumericLiteral 1 @13:15 │ └─ handler │ └─ CatchClause @14:7 │ ├─ parameter │ │ └─ Identifier "err" [variable:1] @14:14 │ └─ BlockStatement @14:19 │ ├─ VariableDeclaration (let) @15:9 │ │ └─ VariableDeclarator @15:9 │ │ ├─ Identifier "msg" [variable:0] (let) @15:13 │ │ └─ Identifier "err" [variable:1] @15:19 │ └─ ReturnStatement @16:9 │ └─ Identifier "msg" [variable:0] (let) @16:16 └─ FunctionDeclaration "try_catch_finally" @20:1 └─ body └─ FunctionBody @21:5 ├─ VariableDeclaration (let) @21:5 │ └─ VariableDeclarator @21:5 │ ├─ Identifier "result" [variable:1] (let) @21:9 │ └─ NumericLiteral 0 @21:18 ├─ TryStatement @22:5 │ ├─ block │ │ └─ BlockStatement @22:9 │ │ └─ ExpressionStatement @23:9 │ │ └─ AssignmentExpression (=) @23:16 │ │ ├─ Identifier "result" [variable:1] (let) @23:9 │ │ └─ NumericLiteral 1 @23:18 │ ├─ handler │ │ └─ CatchClause @24:7 │ │ ├─ parameter │ │ │ └─ Identifier "e" [variable:0] @24:14 │ │ └─ BlockStatement @24:17 │ │ └─ ExpressionStatement @25:9 │ │ └─ AssignmentExpression (=) @25:16 │ │ ├─ Identifier "result" [variable:1] (let) @25:9 │ │ └─ NumericLiteral 2 @25:18 │ └─ finalizer │ └─ BlockStatement @26:15 │ └─ ExpressionStatement @27:9 │ └─ AssignmentExpression (=) @27:16 │ ├─ Identifier "result" [variable:1] (let) @27:9 │ └─ BinaryExpression (+) @27:25 │ ├─ Identifier "result" [variable:1] (let) @27:18 │ └─ NumericLiteral 10 @27:27 └─ ReturnStatement @29:5 └─ Identifier "result" [variable:1] (let) @29:12