@ ProgramNode (location: (1,0)-(7,15)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(7,15)) └── body: (length: 4) ├── @ CallOperatorWriteNode (location: (1,0)-(1,14)) │ ├── flags: ∅ │ ├── receiver: │ │ @ CallNode (location: (1,0)-(1,3)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (1,0)-(1,3) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── call_operator_loc: (1,3)-(1,4) = "." │ ├── message_loc: (1,4)-(1,5) = "A" │ ├── read_name: :A │ ├── write_name: :A= │ ├── operator: :+ │ ├── operator_loc: (1,6)-(1,8) = "+=" │ └── value: │ @ CallNode (location: (1,9)-(1,14)) │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m │ ├── message_loc: (1,9)-(1,10) = "m" │ ├── opening_loc: ∅ │ ├── arguments: │ │ @ ArgumentsNode (location: (1,11)-(1,14)) │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ CallNode (location: (1,11)-(1,14)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (1,11)-(1,14) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ CallOperatorWriteNode (location: (3,0)-(3,14)) │ ├── flags: ∅ │ ├── receiver: │ │ @ CallNode (location: (3,0)-(3,3)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (3,0)-(3,3) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── call_operator_loc: (3,3)-(3,4) = "." │ ├── message_loc: (3,4)-(3,5) = "a" │ ├── read_name: :a │ ├── write_name: :a= │ ├── operator: :+ │ ├── operator_loc: (3,6)-(3,8) = "+=" │ └── value: │ @ CallNode (location: (3,9)-(3,14)) │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :m │ ├── message_loc: (3,9)-(3,10) = "m" │ ├── opening_loc: ∅ │ ├── arguments: │ │ @ ArgumentsNode (location: (3,11)-(3,14)) │ │ ├── flags: ∅ │ │ └── arguments: (length: 1) │ │ └── @ CallNode (location: (3,11)-(3,14)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (3,11)-(3,14) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ ConstantPathOperatorWriteNode (location: (5,0)-(5,15)) │ ├── target: │ │ @ ConstantPathNode (location: (5,0)-(5,6)) │ │ ├── parent: │ │ │ @ CallNode (location: (5,0)-(5,3)) │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo │ │ │ ├── message_loc: (5,0)-(5,3) = "foo" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ ├── child: │ │ │ @ ConstantReadNode (location: (5,5)-(5,6)) │ │ │ └── name: :A │ │ └── delimiter_loc: (5,3)-(5,5) = "::" │ ├── operator_loc: (5,7)-(5,9) = "+=" │ ├── value: │ │ @ CallNode (location: (5,10)-(5,15)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :m │ │ ├── message_loc: (5,10)-(5,11) = "m" │ │ ├── opening_loc: ∅ │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (5,12)-(5,15)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ CallNode (location: (5,12)-(5,15)) │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :foo │ │ │ ├── message_loc: (5,12)-(5,15) = "foo" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── operator: :+ └── @ CallOperatorWriteNode (location: (7,0)-(7,15)) ├── flags: ∅ ├── receiver: │ @ CallNode (location: (7,0)-(7,3)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo │ ├── message_loc: (7,0)-(7,3) = "foo" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── call_operator_loc: (7,3)-(7,5) = "::" ├── message_loc: (7,5)-(7,6) = "a" ├── read_name: :a ├── write_name: :a= ├── operator: :+ ├── operator_loc: (7,7)-(7,9) = "+=" └── value: @ CallNode (location: (7,10)-(7,15)) ├── flags: ignore_visibility ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :m ├── message_loc: (7,10)-(7,11) = "m" ├── opening_loc: ∅ ├── arguments: │ @ ArgumentsNode (location: (7,12)-(7,15)) │ ├── flags: ∅ │ └── arguments: (length: 1) │ └── @ CallNode (location: (7,12)-(7,15)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :foo │ ├── message_loc: (7,12)-(7,15) = "foo" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── closing_loc: ∅ └── block: ∅