@ ProgramNode (location: (0...139))
├── locals: [:c, :d, :b, :a]
└── statements:
    @ StatementsNode (location: (0...139))
    └── body: (length: 10)
        ├── @ MultiWriteNode (location: (0...7))
        │   ├── targets: (length: 1)
        │   │   └── @ SplatNode (location: (0...1))
        │   │       ├── operator_loc: (0...1) = "*"
        │   │       └── expression: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (2...3) = "="
        │   └── value:
        │       @ CallNode (location: (4...7))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (4...7) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (9...22))
        │   ├── targets: (length: 3)
        │   │   ├── @ MultiTargetNode (location: (9...10))
        │   │   │   ├── targets: (length: 1)
        │   │   │   │   └── @ SplatNode (location: (9...10))
        │   │   │   │       ├── operator_loc: (9...10) = "*"
        │   │   │   │       └── expression: ∅
        │   │   │   ├── lparen_loc: ∅
        │   │   │   └── rparen_loc: ∅
        │   │   ├── @ LocalVariableTargetNode (location: (12...13))
        │   │   │   ├── name: :c
        │   │   │   └── depth: 0
        │   │   └── @ LocalVariableTargetNode (location: (15...16))
        │   │       ├── name: :d
        │   │       └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (17...18) = "="
        │   └── value:
        │       @ CallNode (location: (19...22))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (19...22) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (24...32))
        │   ├── targets: (length: 1)
        │   │   └── @ SplatNode (location: (24...26))
        │   │       ├── operator_loc: (24...25) = "*"
        │   │       └── expression:
        │   │           @ LocalVariableTargetNode (location: (25...26))
        │   │           ├── name: :b
        │   │           └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (27...28) = "="
        │   └── value:
        │       @ CallNode (location: (29...32))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (29...32) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (34...45))
        │   ├── targets: (length: 2)
        │   │   ├── @ MultiTargetNode (location: (34...36))
        │   │   │   ├── targets: (length: 1)
        │   │   │   │   └── @ SplatNode (location: (34...36))
        │   │   │   │       ├── operator_loc: (34...35) = "*"
        │   │   │   │       └── expression:
        │   │   │   │           @ LocalVariableTargetNode (location: (35...36))
        │   │   │   │           ├── name: :b
        │   │   │   │           └── depth: 0
        │   │   │   ├── lparen_loc: ∅
        │   │   │   └── rparen_loc: ∅
        │   │   └── @ LocalVariableTargetNode (location: (38...39))
        │   │       ├── name: :c
        │   │       └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (40...41) = "="
        │   └── value:
        │       @ CallNode (location: (42...45))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (42...45) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (47...65))
        │   ├── targets: (length: 2)
        │   │   ├── @ InstanceVariableTargetNode (location: (47...51))
        │   │   │   └── name: :@foo
        │   │   └── @ ClassVariableTargetNode (location: (53...58))
        │   │       └── name: :@@bar
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (59...60) = "="
        │   └── value:
        │       @ ArrayNode (location: (61...65))
        │       ├── elements: (length: 1)
        │       │   └── @ SplatNode (location: (61...65))
        │       │       ├── operator_loc: (61...62) = "*"
        │       │       └── expression:
        │       │           @ CallNode (location: (62...65))
        │       │           ├── receiver: ∅
        │       │           ├── call_operator_loc: ∅
        │       │           ├── message_loc: (62...65) = "foo"
        │       │           ├── opening_loc: ∅
        │       │           ├── arguments: ∅
        │       │           ├── closing_loc: ∅
        │       │           ├── block: ∅
        │       │           ├── flags: variable_call
        │       │           └── name: "foo"
        │       ├── opening_loc: ∅
        │       └── closing_loc: ∅
        ├── @ MultiWriteNode (location: (67...77))
        │   ├── targets: (length: 2)
        │   │   ├── @ LocalVariableTargetNode (location: (67...68))
        │   │   │   ├── name: :a
        │   │   │   └── depth: 0
        │   │   └── @ SplatNode (location: (70...71))
        │   │       ├── operator_loc: (70...71) = "*"
        │   │       └── expression: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (72...73) = "="
        │   └── value:
        │       @ CallNode (location: (74...77))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (74...77) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (79...92))
        │   ├── targets: (length: 3)
        │   │   ├── @ LocalVariableTargetNode (location: (79...80))
        │   │   │   ├── name: :a
        │   │   │   └── depth: 0
        │   │   ├── @ SplatNode (location: (82...83))
        │   │   │   ├── operator_loc: (82...83) = "*"
        │   │   │   └── expression: ∅
        │   │   └── @ LocalVariableTargetNode (location: (85...86))
        │   │       ├── name: :c
        │   │       └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (87...88) = "="
        │   └── value:
        │       @ CallNode (location: (89...92))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (89...92) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (94...105))
        │   ├── targets: (length: 2)
        │   │   ├── @ LocalVariableTargetNode (location: (94...95))
        │   │   │   ├── name: :a
        │   │   │   └── depth: 0
        │   │   └── @ SplatNode (location: (97...99))
        │   │       ├── operator_loc: (97...98) = "*"
        │   │       └── expression:
        │   │           @ LocalVariableTargetNode (location: (98...99))
        │   │           ├── name: :b
        │   │           └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (100...101) = "="
        │   └── value:
        │       @ CallNode (location: (102...105))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (102...105) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        ├── @ MultiWriteNode (location: (107...121))
        │   ├── targets: (length: 3)
        │   │   ├── @ LocalVariableTargetNode (location: (107...108))
        │   │   │   ├── name: :a
        │   │   │   └── depth: 0
        │   │   ├── @ SplatNode (location: (110...112))
        │   │   │   ├── operator_loc: (110...111) = "*"
        │   │   │   └── expression:
        │   │   │       @ LocalVariableTargetNode (location: (111...112))
        │   │   │       ├── name: :b
        │   │   │       └── depth: 0
        │   │   └── @ LocalVariableTargetNode (location: (114...115))
        │   │       ├── name: :c
        │   │       └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (116...117) = "="
        │   └── value:
        │       @ CallNode (location: (118...121))
        │       ├── receiver: ∅
        │       ├── call_operator_loc: ∅
        │       ├── message_loc: (118...121) = "bar"
        │       ├── opening_loc: ∅
        │       ├── arguments: ∅
        │       ├── closing_loc: ∅
        │       ├── block: ∅
        │       ├── flags: variable_call
        │       └── name: "bar"
        └── @ MultiWriteNode (location: (123...139))
            ├── targets: (length: 2)
            │   ├── @ LocalVariableTargetNode (location: (123...124))
            │   │   ├── name: :a
            │   │   └── depth: 0
            │   └── @ LocalVariableTargetNode (location: (126...127))
            │       ├── name: :b
            │       └── depth: 0
            ├── lparen_loc: ∅
            ├── rparen_loc: ∅
            ├── operator_loc: (128...129) = "="
            └── value:
                @ ArrayNode (location: (130...139))
                ├── elements: (length: 2)
                │   ├── @ SplatNode (location: (130...134))
                │   │   ├── operator_loc: (130...131) = "*"
                │   │   └── expression:
                │   │       @ CallNode (location: (131...134))
                │   │       ├── receiver: ∅
                │   │       ├── call_operator_loc: ∅
                │   │       ├── message_loc: (131...134) = "foo"
                │   │       ├── opening_loc: ∅
                │   │       ├── arguments: ∅
                │   │       ├── closing_loc: ∅
                │   │       ├── block: ∅
                │   │       ├── flags: variable_call
                │   │       └── name: "foo"
                │   └── @ CallNode (location: (136...139))
                │       ├── receiver: ∅
                │       ├── call_operator_loc: ∅
                │       ├── message_loc: (136...139) = "bar"
                │       ├── opening_loc: ∅
                │       ├── arguments: ∅
                │       ├── closing_loc: ∅
                │       ├── block: ∅
                │       ├── flags: variable_call
                │       └── name: "bar"
                ├── opening_loc: ∅
                └── closing_loc: ∅
