@ ProgramNode (location: (1,0)-(3,25)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(3,25)) └── body: (length: 2) ├── @ HashNode (location: (1,0)-(1,10)) │ ├── opening_loc: (1,0)-(1,1) = "{" │ ├── elements: (length: 1) │ │ └── @ AssocNode (location: (1,2)-(1,8)) │ │ ├── key: │ │ │ @ IntegerNode (location: (1,2)-(1,3)) │ │ │ ├── flags: decimal │ │ │ └── value: 1 │ │ ├── value: │ │ │ @ IntegerNode (location: (1,7)-(1,8)) │ │ │ ├── flags: decimal │ │ │ └── value: 2 │ │ └── operator_loc: (1,4)-(1,6) = "=>" │ └── closing_loc: (1,9)-(1,10) = "}" └── @ HashNode (location: (3,0)-(3,25)) ├── opening_loc: (3,0)-(3,1) = "{" ├── elements: (length: 2) │ ├── @ AssocNode (location: (3,2)-(3,8)) │ │ ├── key: │ │ │ @ IntegerNode (location: (3,2)-(3,3)) │ │ │ ├── flags: decimal │ │ │ └── value: 1 │ │ ├── value: │ │ │ @ IntegerNode (location: (3,7)-(3,8)) │ │ │ ├── flags: decimal │ │ │ └── value: 2 │ │ └── operator_loc: (3,4)-(3,6) = "=>" │ └── @ AssocNode (location: (3,10)-(3,23)) │ ├── key: │ │ @ SymbolNode (location: (3,10)-(3,14)) │ │ ├── flags: forced_us_ascii_encoding │ │ ├── opening_loc: (3,10)-(3,11) = ":" │ │ ├── value_loc: (3,11)-(3,14) = "foo" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "foo" │ ├── value: │ │ @ StringNode (location: (3,18)-(3,23)) │ │ ├── flags: ∅ │ │ ├── opening_loc: (3,18)-(3,19) = "\"" │ │ ├── content_loc: (3,19)-(3,22) = "bar" │ │ ├── closing_loc: (3,22)-(3,23) = "\"" │ │ └── unescaped: "bar" │ └── operator_loc: (3,15)-(3,17) = "=>" └── closing_loc: (3,24)-(3,25) = "}"