@ ProgramNode (location: (0...68))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...68))
    └── body: (length: 2)
        ├── @ IfNode (location: (0...33))
        │   ├── if_keyword_loc: (0...2) = "if"
        │   ├── predicate:
        │   │   @ ParenthesesNode (location: (3...23))
        │   │   ├── body:
        │   │   │   @ StatementsNode (location: (4...22))
        │   │   │   └── body: (length: 1)
        │   │   │       └── @ FlipFlopNode (location: (4...22))
        │   │   │           ├── left:
        │   │   │           │   @ ParenthesesNode (location: (4...12))
        │   │   │           │   ├── body:
        │   │   │           │   │   @ StatementsNode (location: (5...11))
        │   │   │           │   │   └── body: (length: 1)
        │   │   │           │   │       └── @ CallNode (location: (5...11))
        │   │   │           │   │           ├── receiver:
        │   │   │           │   │           │   @ CallNode (location: (5...6))
        │   │   │           │   │           │   ├── receiver: ∅
        │   │   │           │   │           │   ├── call_operator_loc: ∅
        │   │   │           │   │           │   ├── message_loc: (5...6) = "i"
        │   │   │           │   │           │   ├── opening_loc: ∅
        │   │   │           │   │           │   ├── arguments: ∅
        │   │   │           │   │           │   ├── closing_loc: ∅
        │   │   │           │   │           │   ├── block: ∅
        │   │   │           │   │           │   ├── flags: variable_call
        │   │   │           │   │           │   └── name: "i"
        │   │   │           │   │           ├── call_operator_loc: ∅
        │   │   │           │   │           ├── message_loc: (7...9) = "=="
        │   │   │           │   │           ├── opening_loc: ∅
        │   │   │           │   │           ├── arguments:
        │   │   │           │   │           │   @ ArgumentsNode (location: (10...11))
        │   │   │           │   │           │   └── arguments: (length: 1)
        │   │   │           │   │           │       └── @ IntegerNode (location: (10...11))
        │   │   │           │   │           │           └── flags: decimal
        │   │   │           │   │           ├── closing_loc: ∅
        │   │   │           │   │           ├── block: ∅
        │   │   │           │   │           ├── flags: ∅
        │   │   │           │   │           └── name: "=="
        │   │   │           │   ├── opening_loc: (4...5) = "("
        │   │   │           │   └── closing_loc: (11...12) = ")"
        │   │   │           ├── right:
        │   │   │           │   @ ParenthesesNode (location: (14...22))
        │   │   │           │   ├── body:
        │   │   │           │   │   @ StatementsNode (location: (15...21))
        │   │   │           │   │   └── body: (length: 1)
        │   │   │           │   │       └── @ CallNode (location: (15...21))
        │   │   │           │   │           ├── receiver:
        │   │   │           │   │           │   @ CallNode (location: (15...16))
        │   │   │           │   │           │   ├── receiver: ∅
        │   │   │           │   │           │   ├── call_operator_loc: ∅
        │   │   │           │   │           │   ├── message_loc: (15...16) = "i"
        │   │   │           │   │           │   ├── opening_loc: ∅
        │   │   │           │   │           │   ├── arguments: ∅
        │   │   │           │   │           │   ├── closing_loc: ∅
        │   │   │           │   │           │   ├── block: ∅
        │   │   │           │   │           │   ├── flags: variable_call
        │   │   │           │   │           │   └── name: "i"
        │   │   │           │   │           ├── call_operator_loc: ∅
        │   │   │           │   │           ├── message_loc: (17...19) = "=="
        │   │   │           │   │           ├── opening_loc: ∅
        │   │   │           │   │           ├── arguments:
        │   │   │           │   │           │   @ ArgumentsNode (location: (20...21))
        │   │   │           │   │           │   └── arguments: (length: 1)
        │   │   │           │   │           │       └── @ IntegerNode (location: (20...21))
        │   │   │           │   │           │           └── flags: decimal
        │   │   │           │   │           ├── closing_loc: ∅
        │   │   │           │   │           ├── block: ∅
        │   │   │           │   │           ├── flags: ∅
        │   │   │           │   │           └── name: "=="
        │   │   │           │   ├── opening_loc: (14...15) = "("
        │   │   │           │   └── closing_loc: (21...22) = ")"
        │   │   │           ├── operator_loc: (12...14) = ".."
        │   │   │           └── flags: ∅
        │   │   ├── opening_loc: (3...4) = "("
        │   │   └── closing_loc: (22...23) = ")"
        │   ├── statements:
        │   │   @ StatementsNode (location: (26...29))
        │   │   └── body: (length: 1)
        │   │       └── @ CallNode (location: (26...29))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (26...29) = "foo"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "foo"
        │   ├── consequent: ∅
        │   └── end_keyword_loc: (30...33) = "end"
        └── @ IfNode (location: (34...68))
            ├── if_keyword_loc: (34...36) = "if"
            ├── predicate:
            │   @ ParenthesesNode (location: (37...58))
            │   ├── body:
            │   │   @ StatementsNode (location: (38...57))
            │   │   └── body: (length: 1)
            │   │       └── @ FlipFlopNode (location: (38...57))
            │   │           ├── left:
            │   │           │   @ ParenthesesNode (location: (38...46))
            │   │           │   ├── body:
            │   │           │   │   @ StatementsNode (location: (39...45))
            │   │           │   │   └── body: (length: 1)
            │   │           │   │       └── @ CallNode (location: (39...45))
            │   │           │   │           ├── receiver:
            │   │           │   │           │   @ CallNode (location: (39...40))
            │   │           │   │           │   ├── receiver: ∅
            │   │           │   │           │   ├── call_operator_loc: ∅
            │   │           │   │           │   ├── message_loc: (39...40) = "i"
            │   │           │   │           │   ├── opening_loc: ∅
            │   │           │   │           │   ├── arguments: ∅
            │   │           │   │           │   ├── closing_loc: ∅
            │   │           │   │           │   ├── block: ∅
            │   │           │   │           │   ├── flags: variable_call
            │   │           │   │           │   └── name: "i"
            │   │           │   │           ├── call_operator_loc: ∅
            │   │           │   │           ├── message_loc: (41...43) = "=="
            │   │           │   │           ├── opening_loc: ∅
            │   │           │   │           ├── arguments:
            │   │           │   │           │   @ ArgumentsNode (location: (44...45))
            │   │           │   │           │   └── arguments: (length: 1)
            │   │           │   │           │       └── @ IntegerNode (location: (44...45))
            │   │           │   │           │           └── flags: decimal
            │   │           │   │           ├── closing_loc: ∅
            │   │           │   │           ├── block: ∅
            │   │           │   │           ├── flags: ∅
            │   │           │   │           └── name: "=="
            │   │           │   ├── opening_loc: (38...39) = "("
            │   │           │   └── closing_loc: (45...46) = ")"
            │   │           ├── right:
            │   │           │   @ ParenthesesNode (location: (49...57))
            │   │           │   ├── body:
            │   │           │   │   @ StatementsNode (location: (50...56))
            │   │           │   │   └── body: (length: 1)
            │   │           │   │       └── @ CallNode (location: (50...56))
            │   │           │   │           ├── receiver:
            │   │           │   │           │   @ CallNode (location: (50...51))
            │   │           │   │           │   ├── receiver: ∅
            │   │           │   │           │   ├── call_operator_loc: ∅
            │   │           │   │           │   ├── message_loc: (50...51) = "i"
            │   │           │   │           │   ├── opening_loc: ∅
            │   │           │   │           │   ├── arguments: ∅
            │   │           │   │           │   ├── closing_loc: ∅
            │   │           │   │           │   ├── block: ∅
            │   │           │   │           │   ├── flags: variable_call
            │   │           │   │           │   └── name: "i"
            │   │           │   │           ├── call_operator_loc: ∅
            │   │           │   │           ├── message_loc: (52...54) = "=="
            │   │           │   │           ├── opening_loc: ∅
            │   │           │   │           ├── arguments:
            │   │           │   │           │   @ ArgumentsNode (location: (55...56))
            │   │           │   │           │   └── arguments: (length: 1)
            │   │           │   │           │       └── @ IntegerNode (location: (55...56))
            │   │           │   │           │           └── flags: decimal
            │   │           │   │           ├── closing_loc: ∅
            │   │           │   │           ├── block: ∅
            │   │           │   │           ├── flags: ∅
            │   │           │   │           └── name: "=="
            │   │           │   ├── opening_loc: (49...50) = "("
            │   │           │   └── closing_loc: (56...57) = ")"
            │   │           ├── operator_loc: (46...49) = "..."
            │   │           └── flags: exclude_end
            │   ├── opening_loc: (37...38) = "("
            │   └── closing_loc: (57...58) = ")"
            ├── statements:
            │   @ StatementsNode (location: (61...64))
            │   └── body: (length: 1)
            │       └── @ CallNode (location: (61...64))
            │           ├── receiver: ∅
            │           ├── call_operator_loc: ∅
            │           ├── message_loc: (61...64) = "foo"
            │           ├── opening_loc: ∅
            │           ├── arguments: ∅
            │           ├── closing_loc: ∅
            │           ├── block: ∅
            │           ├── flags: variable_call
            │           └── name: "foo"
            ├── consequent: ∅
            └── end_keyword_loc: (65...68) = "end"
