@ ProgramNode (location: (0...293))
├── locals: [:abc, :foo, :bar, :baz]
└── statements:
    @ StatementsNode (location: (0...293))
    └── body: (length: 24)
        ├── @ ClassVariableReadNode (location: (0...5))
        │   └── name: :@@abc
        ├── @ ClassVariableWriteNode (location: (7...16))
        │   ├── name: :@@abc
        │   ├── name_loc: (7...12) = "@@abc"
        │   ├── value:
        │   │   @ IntegerNode (location: (15...16))
        │   │   └── flags: decimal
        │   └── operator_loc: (13...14) = "="
        ├── @ MultiWriteNode (location: (18...34))
        │   ├── targets: (length: 2)
        │   │   ├── @ ClassVariableTargetNode (location: (18...23))
        │   │   │   └── name: :@@foo
        │   │   └── @ ClassVariableTargetNode (location: (25...30))
        │   │       └── name: :@@bar
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (31...32) = "="
        │   └── value:
        │       @ IntegerNode (location: (33...34))
        │       └── flags: decimal
        ├── @ ClassVariableWriteNode (location: (36...48))
        │   ├── name: :@@foo
        │   ├── name_loc: (36...41) = "@@foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (44...48))
        │   │   ├── elements: (length: 2)
        │   │   │   ├── @ IntegerNode (location: (44...45))
        │   │   │   │   └── flags: decimal
        │   │   │   └── @ IntegerNode (location: (47...48))
        │   │   │       └── flags: decimal
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (42...43) = "="
        ├── @ GlobalVariableWriteNode (location: (50...58))
        │   ├── name: :$abc
        │   ├── name_loc: (50...54) = "$abc"
        │   ├── value:
        │   │   @ IntegerNode (location: (57...58))
        │   │   └── flags: decimal
        │   └── operator_loc: (55...56) = "="
        ├── @ GlobalVariableReadNode (location: (60...64))
        │   └── name: :$abc
        ├── @ InstanceVariableReadNode (location: (66...70))
        │   └── name: :@abc
        ├── @ InstanceVariableWriteNode (location: (72...80))
        │   ├── name: :@abc
        │   ├── name_loc: (72...76) = "@abc"
        │   ├── value:
        │   │   @ IntegerNode (location: (79...80))
        │   │   └── flags: decimal
        │   └── operator_loc: (77...78) = "="
        ├── @ CallNode (location: (82...83))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (82...83) = "a"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: variable_call
        │   └── name: "a"
        ├── @ LocalVariableWriteNode (location: (85...92))
        │   ├── name: :abc
        │   ├── depth: 0
        │   ├── name_loc: (85...88) = "abc"
        │   ├── value:
        │   │   @ IntegerNode (location: (91...92))
        │   │   └── flags: decimal
        │   └── operator_loc: (89...90) = "="
        ├── @ MultiWriteNode (location: (94...108))
        │   ├── targets: (length: 2)
        │   │   ├── @ GlobalVariableTargetNode (location: (94...98))
        │   │   │   └── name: :$foo
        │   │   └── @ GlobalVariableTargetNode (location: (100...104))
        │   │       └── name: :$bar
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (105...106) = "="
        │   └── value:
        │       @ IntegerNode (location: (107...108))
        │       └── flags: decimal
        ├── @ GlobalVariableWriteNode (location: (110...121))
        │   ├── name: :$foo
        │   ├── name_loc: (110...114) = "$foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (117...121))
        │   │   ├── elements: (length: 2)
        │   │   │   ├── @ IntegerNode (location: (117...118))
        │   │   │   │   └── flags: decimal
        │   │   │   └── @ IntegerNode (location: (120...121))
        │   │   │       └── flags: decimal
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (115...116) = "="
        ├── @ MultiWriteNode (location: (123...137))
        │   ├── targets: (length: 2)
        │   │   ├── @ InstanceVariableTargetNode (location: (123...127))
        │   │   │   └── name: :@foo
        │   │   └── @ InstanceVariableTargetNode (location: (129...133))
        │   │       └── name: :@bar
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (134...135) = "="
        │   └── value:
        │       @ IntegerNode (location: (136...137))
        │       └── flags: decimal
        ├── @ InstanceVariableWriteNode (location: (139...150))
        │   ├── name: :@foo
        │   ├── name_loc: (139...143) = "@foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (146...150))
        │   │   ├── elements: (length: 2)
        │   │   │   ├── @ IntegerNode (location: (146...147))
        │   │   │   │   └── flags: decimal
        │   │   │   └── @ IntegerNode (location: (149...150))
        │   │   │       └── flags: decimal
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (144...145) = "="
        ├── @ LocalVariableWriteNode (location: (152...159))
        │   ├── name: :foo
        │   ├── depth: 0
        │   ├── name_loc: (152...155) = "foo"
        │   ├── value:
        │   │   @ IntegerNode (location: (158...159))
        │   │   └── flags: decimal
        │   └── operator_loc: (156...157) = "="
        ├── @ LocalVariableWriteNode (location: (161...171))
        │   ├── name: :foo
        │   ├── depth: 0
        │   ├── name_loc: (161...164) = "foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (167...171))
        │   │   ├── elements: (length: 2)
        │   │   │   ├── @ IntegerNode (location: (167...168))
        │   │   │   │   └── flags: decimal
        │   │   │   └── @ IntegerNode (location: (170...171))
        │   │   │       └── flags: decimal
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (165...166) = "="
        ├── @ LocalVariableWriteNode (location: (173...183))
        │   ├── name: :foo
        │   ├── depth: 0
        │   ├── name_loc: (173...176) = "foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (179...183))
        │   │   ├── elements: (length: 2)
        │   │   │   ├── @ IntegerNode (location: (179...180))
        │   │   │   │   └── flags: decimal
        │   │   │   └── @ IntegerNode (location: (182...183))
        │   │   │       └── flags: decimal
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (177...178) = "="
        ├── @ MultiWriteNode (location: (185...198))
        │   ├── targets: (length: 2)
        │   │   ├── @ LocalVariableTargetNode (location: (185...188))
        │   │   │   ├── name: :foo
        │   │   │   └── depth: 0
        │   │   └── @ SplatNode (location: (190...191))
        │   │       ├── operator_loc: (190...191) = "*"
        │   │       └── expression: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (192...193) = "="
        │   └── value:
        │       @ ArrayNode (location: (194...198))
        │       ├── elements: (length: 2)
        │       │   ├── @ IntegerNode (location: (194...195))
        │       │   │   └── flags: decimal
        │       │   └── @ IntegerNode (location: (197...198))
        │       │       └── flags: decimal
        │       ├── opening_loc: ∅
        │       └── closing_loc: ∅
        ├── @ MultiWriteNode (location: (200...211))
        │   ├── targets: (length: 2)
        │   │   ├── @ LocalVariableTargetNode (location: (200...203))
        │   │   │   ├── name: :foo
        │   │   │   └── depth: 0
        │   │   └── @ SplatNode (location: (203...204))
        │   │       ├── operator_loc: (203...204) = ","
        │   │       └── expression: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (205...206) = "="
        │   └── value:
        │       @ ArrayNode (location: (207...211))
        │       ├── elements: (length: 2)
        │       │   ├── @ IntegerNode (location: (207...208))
        │       │   │   └── flags: decimal
        │       │   └── @ IntegerNode (location: (210...211))
        │       │       └── flags: decimal
        │       ├── opening_loc: ∅
        │       └── closing_loc: ∅
        ├── @ MultiWriteNode (location: (213...229))
        │   ├── targets: (length: 2)
        │   │   ├── @ LocalVariableTargetNode (location: (213...216))
        │   │   │   ├── name: :foo
        │   │   │   └── depth: 0
        │   │   └── @ SplatNode (location: (218...222))
        │   │       ├── operator_loc: (218...219) = "*"
        │   │       └── expression:
        │   │           @ LocalVariableTargetNode (location: (219...222))
        │   │           ├── name: :bar
        │   │           └── depth: 0
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (223...224) = "="
        │   └── value:
        │       @ ArrayNode (location: (225...229))
        │       ├── elements: (length: 2)
        │       │   ├── @ IntegerNode (location: (225...226))
        │       │   │   └── flags: decimal
        │       │   └── @ IntegerNode (location: (228...229))
        │       │       └── flags: decimal
        │       ├── opening_loc: ∅
        │       └── closing_loc: ∅
        ├── @ MultiWriteNode (location: (231...258))
        │   ├── targets: (length: 2)
        │   │   ├── @ LocalVariableTargetNode (location: (231...234))
        │   │   │   ├── name: :foo
        │   │   │   └── depth: 0
        │   │   └── @ MultiTargetNode (location: (236...246))
        │   │       ├── targets: (length: 2)
        │   │       │   ├── @ LocalVariableTargetNode (location: (237...240))
        │   │       │   │   ├── name: :bar
        │   │       │   │   └── depth: 0
        │   │       │   └── @ LocalVariableTargetNode (location: (242...245))
        │   │       │       ├── name: :baz
        │   │       │       └── depth: 0
        │   │       ├── lparen_loc: (236...237) = "("
        │   │       └── rparen_loc: (245...246) = ")"
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── operator_loc: (247...248) = "="
        │   └── value:
        │       @ ArrayNode (location: (249...258))
        │       ├── elements: (length: 2)
        │       │   ├── @ IntegerNode (location: (249...250))
        │       │   │   └── flags: decimal
        │       │   └── @ ArrayNode (location: (252...258))
        │       │       ├── elements: (length: 2)
        │       │       │   ├── @ IntegerNode (location: (253...254))
        │       │       │   │   └── flags: decimal
        │       │       │   └── @ IntegerNode (location: (256...257))
        │       │       │       └── flags: decimal
        │       │       ├── opening_loc: (252...253) = "["
        │       │       └── closing_loc: (257...258) = "]"
        │       ├── opening_loc: ∅
        │       └── closing_loc: ∅
        ├── @ LocalVariableWriteNode (location: (260...270))
        │   ├── name: :foo
        │   ├── depth: 0
        │   ├── name_loc: (260...263) = "foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (266...270))
        │   │   ├── elements: (length: 1)
        │   │   │   └── @ SplatNode (location: (266...270))
        │   │   │       ├── operator_loc: (266...267) = "*"
        │   │   │       └── expression:
        │   │   │           @ LocalVariableReadNode (location: (267...270))
        │   │   │           ├── name: :bar
        │   │   │           └── depth: 0
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (264...265) = "="
        ├── @ ConstantWriteNode (location: (272...282))
        │   ├── name: :Foo
        │   ├── name_loc: (272...275) = "Foo"
        │   ├── value:
        │   │   @ ArrayNode (location: (278...282))
        │   │   ├── elements: (length: 2)
        │   │   │   ├── @ IntegerNode (location: (278...279))
        │   │   │   │   └── flags: decimal
        │   │   │   └── @ IntegerNode (location: (281...282))
        │   │   │       └── flags: decimal
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (276...277) = "="
        └── @ ParenthesesNode (location: (284...293))
            ├── body:
            │   @ StatementsNode (location: (285...292))
            │   └── body: (length: 3)
            │       ├── @ CallNode (location: (285...286))
            │       │   ├── receiver: ∅
            │       │   ├── call_operator_loc: ∅
            │       │   ├── message_loc: (285...286) = "a"
            │       │   ├── opening_loc: ∅
            │       │   ├── arguments: ∅
            │       │   ├── closing_loc: ∅
            │       │   ├── block: ∅
            │       │   ├── flags: variable_call
            │       │   └── name: "a"
            │       ├── @ CallNode (location: (288...289))
            │       │   ├── receiver: ∅
            │       │   ├── call_operator_loc: ∅
            │       │   ├── message_loc: (288...289) = "b"
            │       │   ├── opening_loc: ∅
            │       │   ├── arguments: ∅
            │       │   ├── closing_loc: ∅
            │       │   ├── block: ∅
            │       │   ├── flags: variable_call
            │       │   └── name: "b"
            │       └── @ CallNode (location: (291...292))
            │           ├── receiver: ∅
            │           ├── call_operator_loc: ∅
            │           ├── message_loc: (291...292) = "c"
            │           ├── opening_loc: ∅
            │           ├── arguments: ∅
            │           ├── closing_loc: ∅
            │           ├── block: ∅
            │           ├── flags: variable_call
            │           └── name: "c"
            ├── opening_loc: (284...285) = "("
            └── closing_loc: (292...293) = ")"
