@ ProgramNode (location: (0...511))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...511))
    └── body: (length: 30)
        ├── @ ArrayNode (location: (0...4))
        │   ├── elements: (length: 1)
        │   │   └── @ SplatNode (location: (1...3))
        │   │       ├── operator_loc: (1...2) = "*"
        │   │       └── expression:
        │   │           @ CallNode (location: (2...3))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (2...3) = "a"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "a"
        │   ├── opening_loc: (0...1) = "["
        │   └── closing_loc: (3...4) = "]"
        ├── @ CallNode (location: (6...29))
        │   ├── receiver:
        │   │   @ CallNode (location: (6...9))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (6...9) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (9...19) = "[bar, baz]"
        │   ├── opening_loc: (9...10) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (10...29))
        │   │   └── arguments: (length: 3)
        │   │       ├── @ CallNode (location: (10...13))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (10...13) = "bar"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "bar"
        │   │       ├── @ CallNode (location: (15...18))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (15...18) = "baz"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "baz"
        │   │       └── @ ArrayNode (location: (22...29))
        │   │           ├── elements: (length: 3)
        │   │           │   ├── @ IntegerNode (location: (22...23))
        │   │           │   │   └── flags: decimal
        │   │           │   ├── @ IntegerNode (location: (25...26))
        │   │           │   │   └── flags: decimal
        │   │           │   └── @ IntegerNode (location: (28...29))
        │   │           │       └── flags: decimal
        │   │           ├── opening_loc: ∅
        │   │           └── closing_loc: ∅
        │   ├── closing_loc: (18...19) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]="
        ├── @ ArrayNode (location: (31...44))
        │   ├── elements: (length: 1)
        │   │   └── @ KeywordHashNode (location: (32...43))
        │   │       └── elements: (length: 1)
        │   │           └── @ AssocNode (location: (32...43))
        │   │               ├── key:
        │   │               │   @ SymbolNode (location: (32...34))
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── value_loc: (32...33) = "a"
        │   │               │   ├── closing_loc: (33...34) = ":"
        │   │               │   └── unescaped: "a"
        │   │               ├── value:
        │   │               │   @ ArrayNode (location: (35...43))
        │   │               │   ├── elements: (length: 2)
        │   │               │   │   ├── @ SymbolNode (location: (36...38))
        │   │               │   │   │   ├── opening_loc: (36...37) = ":"
        │   │               │   │   │   ├── value_loc: (37...38) = "b"
        │   │               │   │   │   ├── closing_loc: ∅
        │   │               │   │   │   └── unescaped: "b"
        │   │               │   │   └── @ SymbolNode (location: (40...42))
        │   │               │   │       ├── opening_loc: (40...41) = ":"
        │   │               │   │       ├── value_loc: (41...42) = "c"
        │   │               │   │       ├── closing_loc: ∅
        │   │               │   │       └── unescaped: "c"
        │   │               │   ├── opening_loc: (35...36) = "["
        │   │               │   └── closing_loc: (42...43) = "]"
        │   │               └── operator_loc: ∅
        │   ├── opening_loc: (31...32) = "["
        │   └── closing_loc: (43...44) = "]"
        ├── @ ArrayNode (location: (48...71))
        │   ├── elements: (length: 5)
        │   │   ├── @ SymbolNode (location: (49...51))
        │   │   │   ├── opening_loc: (49...50) = ":"
        │   │   │   ├── value_loc: (50...51) = "a"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a"
        │   │   ├── @ SymbolNode (location: (53...55))
        │   │   │   ├── opening_loc: (53...54) = ":"
        │   │   │   ├── value_loc: (54...55) = "b"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "b"
        │   │   ├── @ SymbolNode (location: (57...59))
        │   │   │   ├── opening_loc: (57...58) = ":"
        │   │   │   ├── value_loc: (58...59) = "c"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "c"
        │   │   ├── @ IntegerNode (location: (60...61))
        │   │   │   └── flags: decimal
        │   │   └── @ SymbolNode (location: (66...68))
        │   │       ├── opening_loc: (66...67) = ":"
        │   │       ├── value_loc: (67...68) = "d"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "d"
        │   ├── opening_loc: (48...49) = "["
        │   └── closing_loc: (70...71) = "]"
        ├── @ ArrayNode (location: (74...98))
        │   ├── elements: (length: 5)
        │   │   ├── @ SymbolNode (location: (75...77))
        │   │   │   ├── opening_loc: (75...76) = ":"
        │   │   │   ├── value_loc: (76...77) = "a"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "a"
        │   │   ├── @ SymbolNode (location: (79...81))
        │   │   │   ├── opening_loc: (79...80) = ":"
        │   │   │   ├── value_loc: (80...81) = "b"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "b"
        │   │   ├── @ SymbolNode (location: (83...85))
        │   │   │   ├── opening_loc: (83...84) = ":"
        │   │   │   ├── value_loc: (84...85) = "c"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "c"
        │   │   ├── @ IntegerNode (location: (86...87))
        │   │   │   └── flags: decimal
        │   │   └── @ SymbolNode (location: (92...94))
        │   │       ├── opening_loc: (92...93) = ":"
        │   │       ├── value_loc: (93...94) = "d"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "d"
        │   ├── opening_loc: (74...75) = "["
        │   └── closing_loc: (97...98) = "]"
        ├── @ ArrayNode (location: (100...112))
        │   ├── elements: (length: 1)
        │   │   └── @ KeywordHashNode (location: (101...111))
        │   │       └── elements: (length: 1)
        │   │           └── @ AssocNode (location: (101...111))
        │   │               ├── key:
        │   │               │   @ CallNode (location: (101...104))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (101...104) = "foo"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "foo"
        │   │               ├── value:
        │   │               │   @ CallNode (location: (108...111))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (108...111) = "bar"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "bar"
        │   │               └── operator_loc: (105...107) = "=>"
        │   ├── opening_loc: (100...101) = "["
        │   └── closing_loc: (111...112) = "]"
        ├── @ CallNode (location: (114...133))
        │   ├── receiver:
        │   │   @ CallNode (location: (114...122))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (114...117))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (114...117) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (117...122) = "[bar]"
        │   │   ├── opening_loc: (117...118) = "["
        │   │   ├── arguments:
        │   │   │   @ ArgumentsNode (location: (118...121))
        │   │   │   └── arguments: (length: 1)
        │   │   │       └── @ CallNode (location: (118...121))
        │   │   │           ├── receiver: ∅
        │   │   │           ├── call_operator_loc: ∅
        │   │   │           ├── message_loc: (118...121) = "bar"
        │   │   │           ├── opening_loc: ∅
        │   │   │           ├── arguments: ∅
        │   │   │           ├── closing_loc: ∅
        │   │   │           ├── block: ∅
        │   │   │           ├── flags: variable_call
        │   │   │           └── name: "bar"
        │   │   ├── closing_loc: (121...122) = "]"
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "[]"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (122...127) = "[baz]"
        │   ├── opening_loc: (122...123) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (123...133))
        │   │   └── arguments: (length: 2)
        │   │       ├── @ CallNode (location: (123...126))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (123...126) = "baz"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "baz"
        │   │       └── @ CallNode (location: (130...133))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (130...133) = "qux"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "qux"
        │   ├── closing_loc: (126...127) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]="
        ├── @ CallNode (location: (135...148))
        │   ├── receiver:
        │   │   @ CallNode (location: (135...143))
        │   │   ├── receiver:
        │   │   │   @ CallNode (location: (135...138))
        │   │   │   ├── receiver: ∅
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (135...138) = "foo"
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── arguments: ∅
        │   │   │   ├── closing_loc: ∅
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: variable_call
        │   │   │   └── name: "foo"
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (138...143) = "[bar]"
        │   │   ├── opening_loc: (138...139) = "["
        │   │   ├── arguments:
        │   │   │   @ ArgumentsNode (location: (139...142))
        │   │   │   └── arguments: (length: 1)
        │   │   │       └── @ CallNode (location: (139...142))
        │   │   │           ├── receiver: ∅
        │   │   │           ├── call_operator_loc: ∅
        │   │   │           ├── message_loc: (139...142) = "bar"
        │   │   │           ├── opening_loc: ∅
        │   │   │           ├── arguments: ∅
        │   │   │           ├── closing_loc: ∅
        │   │   │           ├── block: ∅
        │   │   │           ├── flags: variable_call
        │   │   │           └── name: "bar"
        │   │   ├── closing_loc: (142...143) = "]"
        │   │   ├── block: ∅
        │   │   ├── flags: ∅
        │   │   └── name: "[]"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (143...148) = "[baz]"
        │   ├── opening_loc: (143...144) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (144...147))
        │   │   └── arguments: (length: 1)
        │   │       └── @ CallNode (location: (144...147))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (144...147) = "baz"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "baz"
        │   ├── closing_loc: (147...148) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]"
        ├── @ ArrayNode (location: (150...153))
        │   ├── elements: (length: 0)
        │   ├── opening_loc: (150...151) = "["
        │   └── closing_loc: (152...153) = "]"
        ├── @ CallNode (location: (155...168))
        │   ├── receiver:
        │   │   @ CallNode (location: (155...158))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (155...158) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (158...168) = "[bar, baz]"
        │   ├── opening_loc: (158...159) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (159...167))
        │   │   └── arguments: (length: 2)
        │   │       ├── @ CallNode (location: (159...162))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (159...162) = "bar"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "bar"
        │   │       └── @ CallNode (location: (164...167))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (164...167) = "baz"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "baz"
        │   ├── closing_loc: (167...168) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]"
        ├── @ CallNode (location: (170...189))
        │   ├── receiver:
        │   │   @ CallNode (location: (170...173))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (170...173) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (173...183) = "[bar, baz]"
        │   ├── opening_loc: (173...174) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (174...189))
        │   │   └── arguments: (length: 3)
        │   │       ├── @ CallNode (location: (174...177))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (174...177) = "bar"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "bar"
        │   │       ├── @ CallNode (location: (179...182))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (179...182) = "baz"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "baz"
        │   │       └── @ CallNode (location: (186...189))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (186...189) = "qux"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "qux"
        │   ├── closing_loc: (182...183) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]="
        ├── @ MultiWriteNode (location: (191...212))
        │   ├── targets: (length: 2)
        │   │   ├── @ CallNode (location: (191...197))
        │   │   │   ├── receiver:
        │   │   │   │   @ CallNode (location: (191...194))
        │   │   │   │   ├── receiver: ∅
        │   │   │   │   ├── call_operator_loc: ∅
        │   │   │   │   ├── message_loc: (191...194) = "foo"
        │   │   │   │   ├── opening_loc: ∅
        │   │   │   │   ├── arguments: ∅
        │   │   │   │   ├── closing_loc: ∅
        │   │   │   │   ├── block: ∅
        │   │   │   │   ├── flags: variable_call
        │   │   │   │   └── name: "foo"
        │   │   │   ├── call_operator_loc: ∅
        │   │   │   ├── message_loc: (194...197) = "[0]"
        │   │   │   ├── opening_loc: (194...195) = "["
        │   │   │   ├── arguments:
        │   │   │   │   @ ArgumentsNode (location: (195...196))
        │   │   │   │   └── arguments: (length: 1)
        │   │   │   │       └── @ IntegerNode (location: (195...196))
        │   │   │   │           └── flags: decimal
        │   │   │   ├── closing_loc: (196...197) = "]"
        │   │   │   ├── block: ∅
        │   │   │   ├── flags: ∅
        │   │   │   └── name: "[]="
        │   │   └── @ CallNode (location: (199...205))
        │   │       ├── receiver:
        │   │       │   @ CallNode (location: (199...202))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (199...202) = "bar"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "bar"
        │   │       ├── call_operator_loc: ∅
        │   │       ├── message_loc: (202...205) = "[0]"
        │   │       ├── opening_loc: (202...203) = "["
        │   │       ├── arguments:
        │   │       │   @ ArgumentsNode (location: (203...204))
        │   │       │   └── arguments: (length: 1)
        │   │       │       └── @ IntegerNode (location: (203...204))
        │   │       │           └── flags: decimal
        │   │       ├── closing_loc: (204...205) = "]"
        │   │       ├── block: ∅
        │   │       ├── flags: ∅
        │   │       └── name: "[]="
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (206...207) = "="
        │   └── value:
        │       @ ArrayNode (location: (208...212))
        │       ├── elements: (length: 2)
        │       │   ├── @ IntegerNode (location: (208...209))
        │       │   │   └── flags: decimal
        │       │   └── @ IntegerNode (location: (211...212))
        │       │       └── flags: decimal
        │       ├── opening_loc: ∅
        │       └── closing_loc: ∅
        ├── @ CallNode (location: (214...233))
        │   ├── receiver:
        │   │   @ CallNode (location: (214...217))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (214...217) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (217...233) = "[bar[baz] = qux]"
        │   ├── opening_loc: (217...218) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (218...232))
        │   │   └── arguments: (length: 1)
        │   │       └── @ CallNode (location: (218...232))
        │   │           ├── receiver:
        │   │           │   @ CallNode (location: (218...221))
        │   │           │   ├── receiver: ∅
        │   │           │   ├── call_operator_loc: ∅
        │   │           │   ├── message_loc: (218...221) = "bar"
        │   │           │   ├── opening_loc: ∅
        │   │           │   ├── arguments: ∅
        │   │           │   ├── closing_loc: ∅
        │   │           │   ├── block: ∅
        │   │           │   ├── flags: variable_call
        │   │           │   └── name: "bar"
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (221...226) = "[baz]"
        │   │           ├── opening_loc: (221...222) = "["
        │   │           ├── arguments:
        │   │           │   @ ArgumentsNode (location: (222...232))
        │   │           │   └── arguments: (length: 2)
        │   │           │       ├── @ CallNode (location: (222...225))
        │   │           │       │   ├── receiver: ∅
        │   │           │       │   ├── call_operator_loc: ∅
        │   │           │       │   ├── message_loc: (222...225) = "baz"
        │   │           │       │   ├── opening_loc: ∅
        │   │           │       │   ├── arguments: ∅
        │   │           │       │   ├── closing_loc: ∅
        │   │           │       │   ├── block: ∅
        │   │           │       │   ├── flags: variable_call
        │   │           │       │   └── name: "baz"
        │   │           │       └── @ CallNode (location: (229...232))
        │   │           │           ├── receiver: ∅
        │   │           │           ├── call_operator_loc: ∅
        │   │           │           ├── message_loc: (229...232) = "qux"
        │   │           │           ├── opening_loc: ∅
        │   │           │           ├── arguments: ∅
        │   │           │           ├── closing_loc: ∅
        │   │           │           ├── block: ∅
        │   │           │           ├── flags: variable_call
        │   │           │           └── name: "qux"
        │   │           ├── closing_loc: (225...226) = "]"
        │   │           ├── block: ∅
        │   │           ├── flags: ∅
        │   │           └── name: "[]="
        │   ├── closing_loc: (232...233) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]"
        ├── @ CallNode (location: (235...243))
        │   ├── receiver:
        │   │   @ CallNode (location: (235...238))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (235...238) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (238...243) = "[bar]"
        │   ├── opening_loc: (238...239) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (239...242))
        │   │   └── arguments: (length: 1)
        │   │       └── @ CallNode (location: (239...242))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (239...242) = "bar"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "bar"
        │   ├── closing_loc: (242...243) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]"
        ├── @ CallNode (location: (245...259))
        │   ├── receiver:
        │   │   @ CallNode (location: (245...248))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (245...248) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "foo"
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (248...253) = "[bar]"
        │   ├── opening_loc: (248...249) = "["
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (249...259))
        │   │   └── arguments: (length: 2)
        │   │       ├── @ CallNode (location: (249...252))
        │   │       │   ├── receiver: ∅
        │   │       │   ├── call_operator_loc: ∅
        │   │       │   ├── message_loc: (249...252) = "bar"
        │   │       │   ├── opening_loc: ∅
        │   │       │   ├── arguments: ∅
        │   │       │   ├── closing_loc: ∅
        │   │       │   ├── block: ∅
        │   │       │   ├── flags: variable_call
        │   │       │   └── name: "bar"
        │   │       └── @ CallNode (location: (256...259))
        │   │           ├── receiver: ∅
        │   │           ├── call_operator_loc: ∅
        │   │           ├── message_loc: (256...259) = "baz"
        │   │           ├── opening_loc: ∅
        │   │           ├── arguments: ∅
        │   │           ├── closing_loc: ∅
        │   │           ├── block: ∅
        │   │           ├── flags: variable_call
        │   │           └── name: "baz"
        │   ├── closing_loc: (252...253) = "]"
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "[]="
        ├── @ ArrayNode (location: (261...267))
        │   ├── elements: (length: 1)
        │   │   └── @ KeywordHashNode (location: (262...266))
        │   │       └── elements: (length: 1)
        │   │           └── @ AssocSplatNode (location: (262...266))
        │   │               ├── value:
        │   │               │   @ HashNode (location: (264...266))
        │   │               │   ├── opening_loc: (264...265) = "{"
        │   │               │   ├── elements: (length: 0)
        │   │               │   └── closing_loc: (265...266) = "}"
        │   │               └── operator_loc: (262...264) = "**"
        │   ├── opening_loc: (261...262) = "["
        │   └── closing_loc: (266...267) = "]"
        ├── @ ArrayNode (location: (269...275))
        │   ├── elements: (length: 1)
        │   │   └── @ KeywordHashNode (location: (270...274))
        │   │       └── elements: (length: 1)
        │   │           └── @ AssocSplatNode (location: (270...274))
        │   │               ├── value:
        │   │               │   @ CallNode (location: (272...274))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (272...274) = "kw"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "kw"
        │   │               └── operator_loc: (270...272) = "**"
        │   ├── opening_loc: (269...270) = "["
        │   └── closing_loc: (274...275) = "]"
        ├── @ ArrayNode (location: (277...286))
        │   ├── elements: (length: 2)
        │   │   ├── @ IntegerNode (location: (278...279))
        │   │   │   └── flags: decimal
        │   │   └── @ KeywordHashNode (location: (281...285))
        │   │       └── elements: (length: 1)
        │   │           └── @ AssocSplatNode (location: (281...285))
        │   │               ├── value:
        │   │               │   @ CallNode (location: (283...285))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (283...285) = "kw"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "kw"
        │   │               └── operator_loc: (281...283) = "**"
        │   ├── opening_loc: (277...278) = "["
        │   └── closing_loc: (285...286) = "]"
        ├── @ ArrayNode (location: (288...309))
        │   ├── elements: (length: 2)
        │   │   ├── @ IntegerNode (location: (289...290))
        │   │   │   └── flags: decimal
        │   │   └── @ KeywordHashNode (location: (292...308))
        │   │       └── elements: (length: 3)
        │   │           ├── @ AssocSplatNode (location: (292...296))
        │   │           │   ├── value:
        │   │           │   │   @ CallNode (location: (294...296))
        │   │           │   │   ├── receiver: ∅
        │   │           │   │   ├── call_operator_loc: ∅
        │   │           │   │   ├── message_loc: (294...296) = "kw"
        │   │           │   │   ├── opening_loc: ∅
        │   │           │   │   ├── arguments: ∅
        │   │           │   │   ├── closing_loc: ∅
        │   │           │   │   ├── block: ∅
        │   │           │   │   ├── flags: variable_call
        │   │           │   │   └── name: "kw"
        │   │           │   └── operator_loc: (292...294) = "**"
        │   │           ├── @ AssocSplatNode (location: (298...302))
        │   │           │   ├── value:
        │   │           │   │   @ HashNode (location: (300...302))
        │   │           │   │   ├── opening_loc: (300...301) = "{"
        │   │           │   │   ├── elements: (length: 0)
        │   │           │   │   └── closing_loc: (301...302) = "}"
        │   │           │   └── operator_loc: (298...300) = "**"
        │   │           └── @ AssocSplatNode (location: (304...308))
        │   │               ├── value:
        │   │               │   @ CallNode (location: (306...308))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (306...308) = "kw"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "kw"
        │   │               └── operator_loc: (304...306) = "**"
        │   ├── opening_loc: (288...289) = "["
        │   └── closing_loc: (308...309) = "]"
        ├── @ ArrayNode (location: (311...328))
        │   ├── elements: (length: 1)
        │   │   └── @ KeywordHashNode (location: (315...325))
        │   │       └── elements: (length: 1)
        │   │           └── @ AssocNode (location: (315...325))
        │   │               ├── key:
        │   │               │   @ CallNode (location: (315...318))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (315...318) = "foo"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "foo"
        │   │               ├── value:
        │   │               │   @ CallNode (location: (322...325))
        │   │               │   ├── receiver: ∅
        │   │               │   ├── call_operator_loc: ∅
        │   │               │   ├── message_loc: (322...325) = "bar"
        │   │               │   ├── opening_loc: ∅
        │   │               │   ├── arguments: ∅
        │   │               │   ├── closing_loc: ∅
        │   │               │   ├── block: ∅
        │   │               │   ├── flags: variable_call
        │   │               │   └── name: "bar"
        │   │               └── operator_loc: (319...321) = "=>"
        │   ├── opening_loc: (311...312) = "["
        │   └── closing_loc: (327...328) = "]"
        ├── @ ArrayNode (location: (331...348))
        │   ├── elements: (length: 3)
        │   │   ├── @ SymbolNode (location: (334...337))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── value_loc: (334...337) = "one"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "one"
        │   │   ├── @ SymbolNode (location: (338...341))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── value_loc: (338...341) = "two"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "two"
        │   │   └── @ SymbolNode (location: (342...347))
        │   │       ├── opening_loc: ∅
        │   │       ├── value_loc: (342...347) = "three"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "three"
        │   ├── opening_loc: (331...334) = "%i#"
        │   └── closing_loc: (347...348) = "#"
        ├── @ ArrayNode (location: (350...367))
        │   ├── elements: (length: 3)
        │   │   ├── @ StringNode (location: (353...356))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (353...356) = "one"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "one"
        │   │   ├── @ StringNode (location: (357...360))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (357...360) = "two"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "two"
        │   │   └── @ StringNode (location: (361...366))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (361...366) = "three"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "three"
        │   ├── opening_loc: (350...353) = "%w#"
        │   └── closing_loc: (366...367) = "#"
        ├── @ XStringNode (location: (369...386))
        │   ├── opening_loc: (369...372) = "%x#"
        │   ├── content_loc: (372...385) = "one two three"
        │   ├── closing_loc: (385...386) = "#"
        │   └── unescaped: "one two three"
        ├── @ ArrayNode (location: (389...406))
        │   ├── elements: (length: 3)
        │   │   ├── @ SymbolNode (location: (392...395))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── value_loc: (392...395) = "one"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "one"
        │   │   ├── @ SymbolNode (location: (396...399))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── value_loc: (396...399) = "two"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "two"
        │   │   └── @ SymbolNode (location: (400...405))
        │   │       ├── opening_loc: ∅
        │   │       ├── value_loc: (400...405) = "three"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "three"
        │   ├── opening_loc: (389...392) = "%i@"
        │   └── closing_loc: (405...406) = "@"
        ├── @ ArrayNode (location: (408...425))
        │   ├── elements: (length: 3)
        │   │   ├── @ StringNode (location: (411...414))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (411...414) = "one"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "one"
        │   │   ├── @ StringNode (location: (415...418))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (415...418) = "two"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "two"
        │   │   └── @ StringNode (location: (419...424))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (419...424) = "three"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "three"
        │   ├── opening_loc: (408...411) = "%w@"
        │   └── closing_loc: (424...425) = "@"
        ├── @ XStringNode (location: (427...444))
        │   ├── opening_loc: (427...430) = "%x@"
        │   ├── content_loc: (430...443) = "one two three"
        │   ├── closing_loc: (443...444) = "@"
        │   └── unescaped: "one two three"
        ├── @ ArrayNode (location: (447...464))
        │   ├── elements: (length: 3)
        │   │   ├── @ SymbolNode (location: (450...453))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── value_loc: (450...453) = "one"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "one"
        │   │   ├── @ SymbolNode (location: (454...457))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── value_loc: (454...457) = "two"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "two"
        │   │   └── @ SymbolNode (location: (458...463))
        │   │       ├── opening_loc: ∅
        │   │       ├── value_loc: (458...463) = "three"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "three"
        │   ├── opening_loc: (447...450) = "%i{"
        │   └── closing_loc: (463...464) = "}"
        ├── @ ArrayNode (location: (466...483))
        │   ├── elements: (length: 3)
        │   │   ├── @ StringNode (location: (469...472))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (469...472) = "one"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "one"
        │   │   ├── @ StringNode (location: (473...476))
        │   │   │   ├── opening_loc: ∅
        │   │   │   ├── content_loc: (473...476) = "two"
        │   │   │   ├── closing_loc: ∅
        │   │   │   └── unescaped: "two"
        │   │   └── @ StringNode (location: (477...482))
        │   │       ├── opening_loc: ∅
        │   │       ├── content_loc: (477...482) = "three"
        │   │       ├── closing_loc: ∅
        │   │       └── unescaped: "three"
        │   ├── opening_loc: (466...469) = "%w{"
        │   └── closing_loc: (482...483) = "}"
        ├── @ XStringNode (location: (485...502))
        │   ├── opening_loc: (485...488) = "%x{"
        │   ├── content_loc: (488...501) = "one two three"
        │   ├── closing_loc: (501...502) = "}"
        │   └── unescaped: "one two three"
        └── @ ArrayNode (location: (504...511))
            ├── elements: (length: 1)
            │   └── @ StringNode (location: (507...510))
            │       ├── opening_loc: ∅
            │       ├── content_loc: (507...510) = "\\C:"
            │       ├── closing_loc: ∅
            │       └── unescaped: "\\C:"
            ├── opening_loc: (504...507) = "%w["
            └── closing_loc: (510...511) = "]"
