Program (script) @1:1
├─ FunctionDeclaration "control" @1:1
│  ├─ parameters
│  │  └─ Identifier "x" [argument:0] @1:18
│  └─ body
│     └─ FunctionBody @2:5
│        └─ IfStatement @2:5
│           ├─ test
│           │  └─ BinaryExpression (>) @2:11
│           │     ├─ Identifier "x" [argument:0] @2:9
│           │     └─ NumericLiteral 0 @2:13
│           ├─ consequent
│           │  └─ BlockStatement @2:16
│           │     └─ ReturnStatement @3:9
│           │        └─ Identifier "x" [argument:0] @3:16
│           └─ alternate
│              └─ BlockStatement @4:12
│                 └─ ReturnStatement @5:9
│                    └─ UnaryExpression (-) @5:16
│                       └─ Identifier "x" [argument:0] @5:17
└─ FunctionDeclaration "loops" @9:1
   ├─ parameters
   │  └─ Identifier "n" [argument:0] @9:16
   └─ body
      └─ FunctionBody @10:5
         ├─ VariableDeclaration (let) @10:5
         │  └─ VariableDeclarator @10:5
         │     ├─ Identifier "sum" [variable:1] (let) @10:9
         │     └─ NumericLiteral 0 @10:15
         ├─ ForStatement @11:5
         │  ├─ init
         │  │  └─ VariableDeclaration (let) @11:10
         │  │     └─ VariableDeclarator @11:10
         │  │        ├─ Identifier "i" [variable:0] (let) @11:14
         │  │        └─ NumericLiteral 0 @11:18
         │  ├─ test
         │  │  └─ BinaryExpression (<) @11:23
         │  │     ├─ Identifier "i" [variable:0] (let) @11:21
         │  │     └─ Identifier "n" [argument:0] @11:25
         │  ├─ update
         │  │  └─ UpdateExpression (++, postfix) @11:29
         │  │     └─ Identifier "i" [variable:0] (let) @11:28
         │  └─ body
         │     └─ BlockStatement @11:33
         │        └─ ExpressionStatement @12:9
         │           └─ AssignmentExpression (+=) @12:13
         │              ├─ Identifier "sum" [variable:1] (let) @12:9
         │              └─ Identifier "i" [variable:0] (let) @12:16
         ├─ WhileStatement @14:5
         │  ├─ test
         │  │  └─ BinaryExpression (>) @14:16
         │  │     ├─ Identifier "sum" [variable:1] (let) @14:12
         │  │     └─ NumericLiteral 100 @14:18
         │  └─ body
         │     └─ BlockStatement @14:23
         │        └─ ExpressionStatement @15:9
         │           └─ AssignmentExpression (-=) @15:13
         │              ├─ Identifier "sum" [variable:1] (let) @15:9
         │              └─ NumericLiteral 10 @15:16
         └─ ReturnStatement @17:5
            └─ Identifier "sum" [variable:1] (let) @17:12
