@ ProgramNode (location: (1,0)-(1,23)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(1,23)) └── body: (length: 1) └── @ WhileNode (location: (1,0)-(1,23)) ├── flags: ∅ ├── keyword_loc: (1,0)-(1,5) = "while" ├── closing_loc: (1,20)-(1,23) = "end" ├── predicate: │ @ CallNode (location: (1,6)-(1,16)) │ ├── flags: ∅ │ ├── receiver: │ │ @ ParenthesesNode (location: (1,10)-(1,16)) │ │ ├── body: │ │ │ @ StatementsNode (location: (1,11)-(1,15)) │ │ │ └── body: (length: 1) │ │ │ └── @ TrueNode (location: (1,11)-(1,15)) │ │ ├── opening_loc: (1,10)-(1,11) = "(" │ │ └── closing_loc: (1,15)-(1,16) = ")" │ ├── call_operator_loc: ∅ │ ├── name: :! │ ├── message_loc: (1,6)-(1,9) = "not" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ └── statements: ∅