@ ProgramNode (location: (0...211)) ├── locals: [] └── statements: @ StatementsNode (location: (0...211)) └── body: (length: 5) ├── @ BeginNode (location: (0...20)) │ ├── begin_keyword_loc: (0...5) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (6...7)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (6...7)) │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── message_loc: (6...7) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ ├── block: ∅ │ │ ├── flags: variable_call │ │ └── name: "a" │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (8...20)) │ │ ├── ensure_keyword_loc: (8...14) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (15...16)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (15...16)) │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── message_loc: (15...16) = "b" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ ├── block: ∅ │ │ │ ├── flags: variable_call │ │ │ └── name: "b" │ │ └── end_keyword_loc: (17...20) = "end" │ └── end_keyword_loc: (17...20) = "end" ├── @ BeginNode (location: (22...46)) │ ├── begin_keyword_loc: (22...27) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (29...30)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (29...30)) │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── message_loc: (29...30) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ ├── block: ∅ │ │ ├── flags: variable_call │ │ └── name: "a" │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (32...46)) │ │ ├── ensure_keyword_loc: (32...38) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (40...41)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (40...41)) │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── message_loc: (40...41) = "b" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ ├── block: ∅ │ │ │ ├── flags: variable_call │ │ │ └── name: "b" │ │ └── end_keyword_loc: (43...46) = "end" │ └── end_keyword_loc: (43...46) = "end" ├── @ BeginNode (location: (48...70)) │ ├── begin_keyword_loc: (48...53) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (54...55)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (54...55)) │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── message_loc: (54...55) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ ├── block: ∅ │ │ ├── flags: variable_call │ │ └── name: "a" │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (57...70)) │ │ ├── ensure_keyword_loc: (57...63) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (64...65)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (64...65)) │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── message_loc: (64...65) = "b" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ ├── block: ∅ │ │ │ ├── flags: variable_call │ │ │ └── name: "b" │ │ └── end_keyword_loc: (67...70) = "end" │ └── end_keyword_loc: (67...70) = "end" ├── @ BeginNode (location: (72...94)) │ ├── begin_keyword_loc: (72...77) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (78...79)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (78...79)) │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── message_loc: (78...79) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ ├── block: ∅ │ │ ├── flags: variable_call │ │ └── name: "a" │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: │ │ @ EnsureNode (location: (81...94)) │ │ ├── ensure_keyword_loc: (81...87) = "ensure" │ │ ├── statements: │ │ │ @ StatementsNode (location: (88...89)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (88...89)) │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── message_loc: (88...89) = "b" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ ├── block: ∅ │ │ │ ├── flags: variable_call │ │ │ └── name: "b" │ │ └── end_keyword_loc: (91...94) = "end" │ └── end_keyword_loc: (91...94) = "end" └── @ BeginNode (location: (96...211)) ├── begin_keyword_loc: (96...101) = "begin" ├── statements: │ @ StatementsNode (location: (102...207)) │ └── body: (length: 1) │ └── @ BeginNode (location: (102...207)) │ ├── begin_keyword_loc: (102...107) = "begin" │ ├── statements: │ │ @ StatementsNode (location: (107...203)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (107...203)) │ │ ├── receiver: │ │ │ @ SymbolNode (location: (107...109)) │ │ │ ├── opening_loc: (107...108) = ":" │ │ │ ├── value_loc: (108...109) = "s" │ │ │ ├── closing_loc: ∅ │ │ │ └── unescaped: "s" │ │ ├── call_operator_loc: (109...110) = "." │ │ ├── message_loc: (110...111) = "l" │ │ ├── opening_loc: ∅ │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (112...203)) │ │ │ └── arguments: (length: 1) │ │ │ └── @ BeginNode (location: (112...203)) │ │ │ ├── begin_keyword_loc: (112...117) = "begin" │ │ │ ├── statements: ∅ │ │ │ ├── rescue_clause: ∅ │ │ │ ├── else_clause: ∅ │ │ │ ├── ensure_clause: │ │ │ │ @ EnsureNode (location: (118...203)) │ │ │ │ ├── ensure_keyword_loc: (118...124) = "ensure" │ │ │ │ ├── statements: │ │ │ │ │ @ StatementsNode (location: (125...199)) │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ └── @ CallNode (location: (125...199)) │ │ │ │ │ ├── receiver: │ │ │ │ │ │ @ ConstantReadNode (location: (125...131)) │ │ │ │ │ │ └── name: :Module │ │ │ │ │ ├── call_operator_loc: (131...132) = "." │ │ │ │ │ ├── message_loc: (132...135) = "new" │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ ├── block: │ │ │ │ │ │ @ BlockNode (location: (136...199)) │ │ │ │ │ │ ├── locals: [] │ │ │ │ │ │ ├── parameters: ∅ │ │ │ │ │ │ ├── body: │ │ │ │ │ │ │ @ StatementsNode (location: (141...195)) │ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ │ └── @ BeginNode (location: (141...195)) │ │ │ │ │ │ │ ├── begin_keyword_loc: (141...146) = "begin" │ │ │ │ │ │ │ ├── statements: │ │ │ │ │ │ │ │ @ StatementsNode (location: (151...156)) │ │ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ │ │ └── @ BreakNode (location: (151...156)) │ │ │ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ │ │ │ └── keyword_loc: (151...156) = "break" │ │ │ │ │ │ │ ├── rescue_clause: ∅ │ │ │ │ │ │ │ ├── else_clause: ∅ │ │ │ │ │ │ │ ├── ensure_clause: │ │ │ │ │ │ │ │ @ EnsureNode (location: (161...195)) │ │ │ │ │ │ │ │ ├── ensure_keyword_loc: (161...167) = "ensure" │ │ │ │ │ │ │ │ ├── statements: │ │ │ │ │ │ │ │ │ @ StatementsNode (location: (168...189)) │ │ │ │ │ │ │ │ │ └── body: (length: 1) │ │ │ │ │ │ │ │ │ └── @ CallNode (location: (168...189)) │ │ │ │ │ │ │ │ │ ├── receiver: │ │ │ │ │ │ │ │ │ │ @ ConstantReadNode (location: (168...174)) │ │ │ │ │ │ │ │ │ │ └── name: :Module │ │ │ │ │ │ │ │ │ ├── call_operator_loc: (174...175) = "." │ │ │ │ │ │ │ │ │ ├── message_loc: (175...178) = "new" │ │ │ │ │ │ │ │ │ ├── opening_loc: ∅ │ │ │ │ │ │ │ │ │ ├── arguments: ∅ │ │ │ │ │ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ │ │ │ │ │ ├── block: │ │ │ │ │ │ │ │ │ │ @ BlockNode (location: (179...189)) │ │ │ │ │ │ │ │ │ │ ├── locals: [] │ │ │ │ │ │ │ │ │ │ ├── parameters: ∅ │ │ │ │ │ │ │ │ │ │ ├── body: ∅ │ │ │ │ │ │ │ │ │ │ ├── opening_loc: (179...181) = "do" │ │ │ │ │ │ │ │ │ │ └── closing_loc: (186...189) = "end" │ │ │ │ │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ │ │ │ │ └── name: "new" │ │ │ │ │ │ │ │ └── end_keyword_loc: (192...195) = "end" │ │ │ │ │ │ │ └── end_keyword_loc: (192...195) = "end" │ │ │ │ │ │ ├── opening_loc: (136...138) = "do" │ │ │ │ │ │ └── closing_loc: (196...199) = "end" │ │ │ │ │ ├── flags: ∅ │ │ │ │ │ └── name: "new" │ │ │ │ └── end_keyword_loc: (200...203) = "end" │ │ │ └── end_keyword_loc: (200...203) = "end" │ │ ├── closing_loc: ∅ │ │ ├── block: ∅ │ │ ├── flags: ∅ │ │ └── name: "l" │ ├── rescue_clause: ∅ │ ├── else_clause: ∅ │ ├── ensure_clause: ∅ │ └── end_keyword_loc: (204...207) = "end" ├── rescue_clause: ∅ ├── else_clause: ∅ ├── ensure_clause: ∅ └── end_keyword_loc: (208...211) = "end"