@ ProgramNode (location: (1,0)-(9,17)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(9,17)) └── body: (length: 5) ├── @ CallNode (location: (1,0)-(1,2)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :_1 │ ├── message_loc: (1,0)-(1,2) = "_1" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ SingletonClassNode (location: (3,0)-(3,21)) │ ├── locals: [] │ ├── class_keyword_loc: (3,0)-(3,5) = "class" │ ├── operator_loc: (3,6)-(3,8) = "<<" │ ├── expression: │ │ @ CallNode (location: (3,9)-(3,12)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (3,9)-(3,12) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (3,14)-(3,16)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (3,14)-(3,16)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :_1 │ │ ├── message_loc: (3,14)-(3,16) = "_1" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── end_keyword_loc: (3,18)-(3,21) = "end" ├── @ ClassNode (location: (5,0)-(5,16)) │ ├── locals: [] │ ├── class_keyword_loc: (5,0)-(5,5) = "class" │ ├── constant_path: │ │ @ ConstantReadNode (location: (5,6)-(5,7)) │ │ └── name: :A │ ├── inheritance_operator_loc: ∅ │ ├── superclass: ∅ │ ├── body: │ │ @ StatementsNode (location: (5,9)-(5,11)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (5,9)-(5,11)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :_1 │ │ ├── message_loc: (5,9)-(5,11) = "_1" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── end_keyword_loc: (5,13)-(5,16) = "end" │ └── name: :A ├── @ DefNode (location: (7,0)-(7,19)) │ ├── name: :m │ ├── name_loc: (7,9)-(7,10) = "m" │ ├── receiver: │ │ @ SelfNode (location: (7,4)-(7,8)) │ ├── parameters: ∅ │ ├── body: │ │ @ StatementsNode (location: (7,12)-(7,14)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (7,12)-(7,14)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :_1 │ │ ├── message_loc: (7,12)-(7,14) = "_1" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (7,0)-(7,3) = "def" │ ├── operator_loc: (7,8)-(7,9) = "." │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (7,16)-(7,19) = "end" └── @ ModuleNode (location: (9,0)-(9,17)) ├── locals: [] ├── module_keyword_loc: (9,0)-(9,6) = "module" ├── constant_path: │ @ ConstantReadNode (location: (9,7)-(9,8)) │ └── name: :A ├── body: │ @ StatementsNode (location: (9,10)-(9,12)) │ └── body: (length: 1) │ └── @ CallNode (location: (9,10)-(9,12)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :_1 │ ├── message_loc: (9,10)-(9,12) = "_1" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── end_keyword_loc: (9,14)-(9,17) = "end" └── name: :A