@ ProgramNode (location: (0...50))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...50))
    └── body: (length: 3)
        ├── @ CallNode (location: (0...12))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (0...1) = "f"
        │   ├── opening_loc: (1...2) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (2...11))
        │   │   └── arguments: (length: 1)
        │   │       └── @ IfNode (location: (2...11))
        │   │           ├── if_keyword_loc: ∅
        │   │           ├── predicate:
        │   │           │   @ CallNode (location: (2...3))
        │   │           │   ├── receiver: ∅
        │   │           │   ├── call_operator_loc: ∅
        │   │           │   ├── message_loc: (2...3) = "a"
        │   │           │   ├── opening_loc: ∅
        │   │           │   ├── arguments: ∅
        │   │           │   ├── closing_loc: ∅
        │   │           │   ├── block: ∅
        │   │           │   ├── flags: variable_call
        │   │           │   └── name: "a"
        │   │           ├── statements:
        │   │           │   @ StatementsNode (location: (6...9))
        │   │           │   └── body: (length: 1)
        │   │           │       └── @ StringNode (location: (6...9))
        │   │           │           ├── opening_loc: (6...7) = "\""
        │   │           │           ├── content_loc: (7...8) = "a"
        │   │           │           ├── closing_loc: (8...9) = "\""
        │   │           │           └── unescaped: "a"
        │   │           ├── consequent:
        │   │           │   @ ElseNode (location: (9...11))
        │   │           │   ├── else_keyword_loc: (9...10) = ":"
        │   │           │   ├── statements:
        │   │           │   │   @ StatementsNode (location: (10...11))
        │   │           │   │   └── body: (length: 1)
        │   │           │   │       └── @ IntegerNode (location: (10...11))
        │   │           │   │           └── flags: decimal
        │   │           │   └── end_keyword_loc: ∅
        │   │           └── end_keyword_loc: ∅
        │   ├── closing_loc: (11...12) = ")"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "f"
        ├── @ HashNode (location: (14...26))
        │   ├── opening_loc: (14...15) = "{"
        │   ├── elements: (length: 1)
        │   │   └── @ AssocNode (location: (16...24))
        │   │       ├── key:
        │   │       │   @ SymbolNode (location: (16...22))
        │   │       │   ├── opening_loc: (16...17) = "'"
        │   │       │   ├── value_loc: (17...20) = "foo"
        │   │       │   ├── closing_loc: (20...22) = "':"
        │   │       │   └── unescaped: "foo"
        │   │       ├── value:
        │   │       │   @ IntegerNode (location: (23...24))
        │   │       │   └── flags: decimal
        │   │       └── operator_loc: ∅
        │   └── closing_loc: (25...26) = "}"
        └── @ HashNode (location: (28...50))
            ├── opening_loc: (28...29) = "{"
            ├── elements: (length: 2)
            │   ├── @ AssocNode (location: (30...38))
            │   │   ├── key:
            │   │   │   @ SymbolNode (location: (30...36))
            │   │   │   ├── opening_loc: (30...31) = "'"
            │   │   │   ├── value_loc: (31...34) = "foo"
            │   │   │   ├── closing_loc: (34...36) = "':"
            │   │   │   └── unescaped: "foo"
            │   │   ├── value:
            │   │   │   @ IntegerNode (location: (37...38))
            │   │   │   └── flags: decimal
            │   │   └── operator_loc: ∅
            │   └── @ AssocNode (location: (40...49))
            │       ├── key:
            │       │   @ SymbolNode (location: (40...46))
            │       │   ├── opening_loc: (40...41) = "'"
            │       │   ├── value_loc: (41...44) = "bar"
            │       │   ├── closing_loc: (44...46) = "':"
            │       │   └── unescaped: "bar"
            │       ├── value:
            │       │   @ HashNode (location: (47...49))
            │       │   ├── opening_loc: (47...48) = "{"
            │       │   ├── elements: (length: 0)
            │       │   └── closing_loc: (48...49) = "}"
            │       └── operator_loc: ∅
            └── closing_loc: (49...50) = "}"
