@ ProgramNode (location: (1,0)-(3,21)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,21)) └── body: (length: 2) ├── @ ForwardingSuperNode (location: (1,0)-(1,12)) │ └── block: │ @ BlockNode (location: (1,6)-(1,12)) │ ├── locals: [] │ ├── parameters: ∅ │ ├── body: ∅ │ ├── opening_loc: (1,6)-(1,8) = "do" │ └── closing_loc: (1,9)-(1,12) = "end" └── @ SuperNode (location: (3,0)-(3,21)) ├── keyword_loc: (3,0)-(3,5) = "super" ├── lparen_loc: ∅ ├── arguments: │ @ ArgumentsNode (location: (3,6)-(3,14)) │ ├── flags: ∅ │ └── arguments: (length: 2) │ ├── @ CallNode (location: (3,6)-(3,9)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (3,6)-(3,9) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── @ CallNode (location: (3,11)-(3,14)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (3,11)-(3,14) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── rparen_loc: ∅ └── block: @ BlockNode (location: (3,15)-(3,21)) ├── locals: [] ├── parameters: ∅ ├── body: ∅ ├── opening_loc: (3,15)-(3,17) = "do" └── closing_loc: (3,18)-(3,21) = "end"