@ ProgramNode (location: (0...159))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...159))
    └── body: (length: 11)
        ├── @ ForwardingSuperNode (location: (0...5))
        │   └── block: ∅
        ├── @ SuperNode (location: (6...13))
        │   ├── keyword_loc: (6...11) = "super"
        │   ├── lparen_loc: (11...12) = "("
        │   ├── arguments: ∅
        │   ├── rparen_loc: (12...13) = ")"
        │   └── block: ∅
        ├── @ SuperNode (location: (14...22))
        │   ├── keyword_loc: (14...19) = "super"
        │   ├── lparen_loc: (19...20) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (20...21))
        │   │   └── arguments: (length: 1)
        │   │       └── @ CallNode (location: (20...21))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (20...21) = "a"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "a"
        │   ├── rparen_loc: (21...22) = ")"
        │   └── block: ∅
        ├── @ SuperNode (location: (23...34))
        │   ├── keyword_loc: (23...28) = "super"
        │   ├── lparen_loc: (28...29) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (29...33))
        │   │   └── arguments: (length: 2)
        │   │       ├── @ CallNode (location: (29...30))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (29...30) = "a"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "a"
        │   │       └── @ CallNode (location: (32...33))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (32...33) = "b"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "b"
        │   ├── rparen_loc: (33...34) = ")"
        │   └── block: ∅
        ├── @ SuperNode (location: (35...48))
        │   ├── keyword_loc: (35...40) = "super"
        │   ├── lparen_loc: (40...41) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (41...47))
        │   │   └── arguments: (length: 1)
        │   │       └── @ BlockArgumentNode (location: (41...47))
        │   │           ├── expression:
        │   │           │   @ CallNode (location: (42...47))
        │   │           │   ├── receiver: ∅
        │   │           │   ├── call_operator_loc: ∅
        │   │           │   ├── message_loc: (42...47) = "block"
        │   │           │   ├── opening_loc: ∅
        │   │           │   ├── arguments: ∅
        │   │           │   ├── closing_loc: ∅
        │   │           │   ├── block: ∅
        │   │           │   ├── flags: variable_call
        │   │           │   └── name: "block"
        │   │           └── operator_loc: (41...42) = "&"
        │   ├── rparen_loc: (47...48) = ")"
        │   └── block: ∅
        ├── @ SuperNode (location: (49...65))
        │   ├── keyword_loc: (49...54) = "super"
        │   ├── lparen_loc: (54...55) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (55...64))
        │   │   └── arguments: (length: 2)
        │   │       ├── @ CallNode (location: (55...56))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (55...56) = "a"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "a"
        │   │       └── @ BlockArgumentNode (location: (58...64))
        │   │           ├── expression:
        │   │           │   @ CallNode (location: (59...64))
        │   │           │   ├── receiver: ∅
        │   │           │   ├── call_operator_loc: ∅
        │   │           │   ├── message_loc: (59...64) = "block"
        │   │           │   ├── opening_loc: ∅
        │   │           │   ├── arguments: ∅
        │   │           │   ├── closing_loc: ∅
        │   │           │   ├── block: ∅
        │   │           │   ├── flags: variable_call
        │   │           │   └── name: "block"
        │   │           └── operator_loc: (58...59) = "&"
        │   ├── rparen_loc: (64...65) = ")"
        │   └── block: ∅
        ├── @ SuperNode (location: (66...84))
        │   ├── keyword_loc: (66...71) = "super"
        │   ├── lparen_loc: (71...72) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (72...83))
        │   │   └── arguments: (length: 1)
        │   │       └── @ CallNode (location: (72...83))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (72...73) = "a"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block:
        │   │           │   @ BlockNode (location: (74...83))
        │   │           │   ├── locals: []
        │   │           │   ├── parameters: ∅
        │   │           │   ├── body:
        │   │           │   │   @ StatementsNode (location: (78...81))
        │   │           │   │   └── body: (length: 1)
        │   │           │   │       └── @ CallNode (location: (78...81))
        │   │           │   │           ├── receiver: ∅
        │   │           │   │           ├── call_operator_loc: ∅
        │   │           │   │           ├── message_loc: (78...81) = "foo"
        │   │           │   │           ├── opening_loc: ∅
        │   │           │   │           ├── arguments: ∅
        │   │           │   │           ├── closing_loc: ∅
        │   │           │   │           ├── block: ∅
        │   │           │   │           ├── flags: variable_call
        │   │           │   │           └── name: "foo"
        │   │           │   ├── opening_loc: (74...75) = "{"
        │   │           │   └── closing_loc: (82...83) = "}"
        │   │           ├── flags: ∅
        │   │           └── name: "a"
        │   ├── rparen_loc: (83...84) = ")"
        │   └── block: ∅
        ├── @ ForwardingSuperNode (location: (85...100))
        │   └── block:
        │       @ BlockNode (location: (91...100))
        │       ├── locals: []
        │       ├── parameters: ∅
        │       ├── body:
        │       │   @ StatementsNode (location: (95...98))
        │       │   └── body: (length: 1)
        │       │       └── @ CallNode (location: (95...98))
        │       │           ├── receiver: ∅
        │       │           ├── call_operator_loc: ∅
        │       │           ├── message_loc: (95...98) = "foo"
        │       │           ├── opening_loc: ∅
        │       │           ├── arguments: ∅
        │       │           ├── closing_loc: ∅
        │       │           ├── block: ∅
        │       │           ├── flags: variable_call
        │       │           └── name: "foo"
        │       ├── opening_loc: (91...92) = "{"
        │       └── closing_loc: (99...100) = "}"
        ├── @ SuperNode (location: (101...119))
        │   ├── keyword_loc: (101...106) = "super"
        │   ├── lparen_loc: (106...107) = "("
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (107...108))
        │   │   └── arguments: (length: 1)
        │   │       └── @ CallNode (location: (107...108))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (107...108) = "a"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "a"
        │   ├── rparen_loc: (108...109) = ")"
        │   └── block:
        │       @ BlockNode (location: (110...119))
        │       ├── locals: []
        │       ├── parameters: ∅
        │       ├── body:
        │       │   @ StatementsNode (location: (114...117))
        │       │   └── body: (length: 1)
        │       │       └── @ CallNode (location: (114...117))
        │       │           ├── receiver: ∅
        │       │           ├── call_operator_loc: ∅
        │       │           ├── message_loc: (114...117) = "foo"
        │       │           ├── opening_loc: ∅
        │       │           ├── arguments: ∅
        │       │           ├── closing_loc: ∅
        │       │           ├── block: ∅
        │       │           ├── flags: variable_call
        │       │           └── name: "foo"
        │       ├── opening_loc: (110...111) = "{"
        │       └── closing_loc: (118...119) = "}"
        ├── @ SuperNode (location: (120...137))
        │   ├── keyword_loc: (120...125) = "super"
        │   ├── lparen_loc: (125...126) = "("
        │   ├── arguments: ∅
        │   ├── rparen_loc: (126...127) = ")"
        │   └── block:
        │       @ BlockNode (location: (128...137))
        │       ├── locals: []
        │       ├── parameters: ∅
        │       ├── body:
        │       │   @ StatementsNode (location: (132...135))
        │       │   └── body: (length: 1)
        │       │       └── @ CallNode (location: (132...135))
        │       │           ├── receiver: ∅
        │       │           ├── call_operator_loc: ∅
        │       │           ├── message_loc: (132...135) = "foo"
        │       │           ├── opening_loc: ∅
        │       │           ├── arguments: ∅
        │       │           ├── closing_loc: ∅
        │       │           ├── block: ∅
        │       │           ├── flags: variable_call
        │       │           └── name: "foo"
        │       ├── opening_loc: (128...129) = "{"
        │       └── closing_loc: (136...137) = "}"
        └── @ SuperNode (location: (138...159))
            ├── keyword_loc: (138...143) = "super"
            ├── lparen_loc: (143...144) = "("
            ├── arguments:
            │   @ ArgumentsNode (location: (144...148))
            │   └── arguments: (length: 2)
            │       ├── @ CallNode (location: (144...145))
            │       │   ├── receiver: ∅
            │       │   ├── call_operator_loc: ∅
            │       │   ├── message_loc: (144...145) = "a"
            │       │   ├── opening_loc: ∅
            │       │   ├── arguments: ∅
            │       │   ├── closing_loc: ∅
            │       │   ├── block: ∅
            │       │   ├── flags: variable_call
            │       │   └── name: "a"
            │       └── @ CallNode (location: (147...148))
            │           ├── receiver: ∅
            │           ├── call_operator_loc: ∅
            │           ├── message_loc: (147...148) = "b"
            │           ├── opening_loc: ∅
            │           ├── arguments: ∅
            │           ├── closing_loc: ∅
            │           ├── block: ∅
            │           ├── flags: variable_call
            │           └── name: "b"
            ├── rparen_loc: (148...149) = ")"
            └── block:
                @ BlockNode (location: (150...159))
                ├── locals: []
                ├── parameters: ∅
                ├── body:
                │   @ StatementsNode (location: (154...157))
                │   └── body: (length: 1)
                │       └── @ CallNode (location: (154...157))
                │           ├── receiver: ∅
                │           ├── call_operator_loc: ∅
                │           ├── message_loc: (154...157) = "foo"
                │           ├── opening_loc: ∅
                │           ├── arguments: ∅
                │           ├── closing_loc: ∅
                │           ├── block: ∅
                │           ├── flags: variable_call
                │           └── name: "foo"
                ├── opening_loc: (150...151) = "{"
                └── closing_loc: (158...159) = "}"
