@ ProgramNode (location: (1,0)-(19,16)) ├── locals: [:c, :d, :b, :a] └── statements: @ StatementsNode (location: (1,0)-(19,16)) └── body: (length: 10) ├── @ MultiWriteNode (location: (1,0)-(1,7)) │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (1,0)-(1,1)) │ │ ├── operator_loc: (1,0)-(1,1) = "*" │ │ └── expression: ∅ │ ├── rights: (length: 0) │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (1,2)-(1,3) = "=" │ └── value: │ @ CallNode (location: (1,4)-(1,7)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (1,4)-(1,7) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (3,0)-(3,13)) │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (3,0)-(3,1)) │ │ ├── operator_loc: (3,0)-(3,1) = "*" │ │ └── expression: ∅ │ ├── rights: (length: 2) │ │ ├── @ LocalVariableTargetNode (location: (3,3)-(3,4)) │ │ │ ├── name: :c │ │ │ └── depth: 0 │ │ └── @ LocalVariableTargetNode (location: (3,6)-(3,7)) │ │ ├── name: :d │ │ └── depth: 0 │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (3,8)-(3,9) = "=" │ └── value: │ @ CallNode (location: (3,10)-(3,13)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (3,10)-(3,13) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (5,0)-(5,8)) │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (5,0)-(5,2)) │ │ ├── operator_loc: (5,0)-(5,1) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (5,1)-(5,2)) │ │ ├── name: :b │ │ └── depth: 0 │ ├── rights: (length: 0) │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (5,3)-(5,4) = "=" │ └── value: │ @ CallNode (location: (5,5)-(5,8)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (5,5)-(5,8) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (7,0)-(7,11)) │ ├── lefts: (length: 0) │ ├── rest: │ │ @ SplatNode (location: (7,0)-(7,2)) │ │ ├── operator_loc: (7,0)-(7,1) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (7,1)-(7,2)) │ │ ├── name: :b │ │ └── depth: 0 │ ├── rights: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (7,4)-(7,5)) │ │ ├── name: :c │ │ └── depth: 0 │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (7,6)-(7,7) = "=" │ └── value: │ @ CallNode (location: (7,8)-(7,11)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (7,8)-(7,11) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (9,0)-(9,18)) │ ├── lefts: (length: 2) │ │ ├── @ InstanceVariableTargetNode (location: (9,0)-(9,4)) │ │ │ └── name: :@foo │ │ └── @ ClassVariableTargetNode (location: (9,6)-(9,11)) │ │ └── name: :@@bar │ ├── rest: ∅ │ ├── rights: (length: 0) │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (9,12)-(9,13) = "=" │ └── value: │ @ ArrayNode (location: (9,14)-(9,18)) │ ├── flags: contains_splat │ ├── elements: (length: 1) │ │ └── @ SplatNode (location: (9,14)-(9,18)) │ │ ├── operator_loc: (9,14)-(9,15) = "*" │ │ └── expression: │ │ @ CallNode (location: (9,15)-(9,18)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (9,15)-(9,18) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── opening_loc: ∅ │ └── closing_loc: ∅ ├── @ MultiWriteNode (location: (11,0)-(11,10)) │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (11,0)-(11,1)) │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ SplatNode (location: (11,3)-(11,4)) │ │ ├── operator_loc: (11,3)-(11,4) = "*" │ │ └── expression: ∅ │ ├── rights: (length: 0) │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (11,5)-(11,6) = "=" │ └── value: │ @ CallNode (location: (11,7)-(11,10)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (11,7)-(11,10) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (13,0)-(13,13)) │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (13,0)-(13,1)) │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ SplatNode (location: (13,3)-(13,4)) │ │ ├── operator_loc: (13,3)-(13,4) = "*" │ │ └── expression: ∅ │ ├── rights: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (13,6)-(13,7)) │ │ ├── name: :c │ │ └── depth: 0 │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (13,8)-(13,9) = "=" │ └── value: │ @ CallNode (location: (13,10)-(13,13)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (13,10)-(13,13) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (15,0)-(15,11)) │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (15,0)-(15,1)) │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ SplatNode (location: (15,3)-(15,5)) │ │ ├── operator_loc: (15,3)-(15,4) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (15,4)-(15,5)) │ │ ├── name: :b │ │ └── depth: 0 │ ├── rights: (length: 0) │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (15,6)-(15,7) = "=" │ └── value: │ @ CallNode (location: (15,8)-(15,11)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (15,8)-(15,11) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── @ MultiWriteNode (location: (17,0)-(17,14)) │ ├── lefts: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (17,0)-(17,1)) │ │ ├── name: :a │ │ └── depth: 0 │ ├── rest: │ │ @ SplatNode (location: (17,3)-(17,5)) │ │ ├── operator_loc: (17,3)-(17,4) = "*" │ │ └── expression: │ │ @ LocalVariableTargetNode (location: (17,4)-(17,5)) │ │ ├── name: :b │ │ └── depth: 0 │ ├── rights: (length: 1) │ │ └── @ LocalVariableTargetNode (location: (17,7)-(17,8)) │ │ ├── name: :c │ │ └── depth: 0 │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── operator_loc: (17,9)-(17,10) = "=" │ └── value: │ @ CallNode (location: (17,11)-(17,14)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (17,11)-(17,14) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ └── @ MultiWriteNode (location: (19,0)-(19,16)) ├── lefts: (length: 2) │ ├── @ LocalVariableTargetNode (location: (19,0)-(19,1)) │ │ ├── name: :a │ │ └── depth: 0 │ └── @ LocalVariableTargetNode (location: (19,3)-(19,4)) │ ├── name: :b │ └── depth: 0 ├── rest: ∅ ├── rights: (length: 0) ├── lparen_loc: ∅ ├── rparen_loc: ∅ ├── operator_loc: (19,5)-(19,6) = "=" └── value: @ ArrayNode (location: (19,7)-(19,16)) ├── flags: contains_splat ├── elements: (length: 2) │ ├── @ SplatNode (location: (19,7)-(19,11)) │ │ ├── operator_loc: (19,7)-(19,8) = "*" │ │ └── expression: │ │ @ CallNode (location: (19,8)-(19,11)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (19,8)-(19,11) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ └── @ CallNode (location: (19,13)-(19,16)) │ ├── flags: variable_call, ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :bar │ ├── message_loc: (19,13)-(19,16) = "bar" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── opening_loc: ∅ └── closing_loc: ∅