@ ProgramNode (location: (0...77))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...77))
    └── body: (length: 5)
        ├── @ ConstantPathOperatorWriteNode (location: (0...8))
        │   ├── target:
        │   │   @ ConstantPathNode (location: (0...3))
        │   │   ├── parent: ∅
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (2...3))
        │   │   │   └── name: :A
        │   │   └── delimiter_loc: (0...2) = "::"
        │   ├── operator_loc: (4...6) = "+="
        │   ├── value:
        │   │   @ IntegerNode (location: (7...8))
        │   │   └── flags: decimal
        │   └── operator: :+
        ├── @ ConstantOperatorWriteNode (location: (10...16))
        │   ├── name: :A
        │   ├── name_loc: (10...11) = "A"
        │   ├── operator_loc: (12...14) = "+="
        │   ├── value:
        │   │   @ IntegerNode (location: (15...16))
        │   │   └── flags: decimal
        │   └── operator: :+
        ├── @ ConstantPathOperatorWriteNode (location: (18...27))
        │   ├── target:
        │   │   @ ConstantPathNode (location: (18...22))
        │   │   ├── parent:
        │   │   │   @ ConstantReadNode (location: (18...19))
        │   │   │   └── name: :B
        │   │   ├── child:
        │   │   │   @ ConstantReadNode (location: (21...22))
        │   │   │   └── name: :A
        │   │   └── delimiter_loc: (19...21) = "::"
        │   ├── operator_loc: (23...25) = "+="
        │   ├── value:
        │   │   @ IntegerNode (location: (26...27))
        │   │   └── flags: decimal
        │   └── operator: :+
        ├── @ DefNode (location: (29...50))
        │   ├── name: :x
        │   ├── name_loc: (33...34) = "x"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body:
        │   │   @ StatementsNode (location: (36...45))
        │   │   └── body: (length: 1)
        │   │       └── @ ConstantPathOrWriteNode (location: (36...45))
        │   │           ├── target:
        │   │           │   @ ConstantPathNode (location: (36...39))
        │   │           │   ├── parent: ∅
        │   │           │   ├── child:
        │   │           │   │   @ ConstantReadNode (location: (38...39))
        │   │           │   │   └── name: :A
        │   │           │   └── delimiter_loc: (36...38) = "::"
        │   │           ├── operator_loc: (40...43) = "||="
        │   │           └── value:
        │   │               @ IntegerNode (location: (44...45))
        │   │               └── flags: decimal
        │   ├── locals: []
        │   ├── def_keyword_loc: (29...32) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (47...50) = "end"
        └── @ DefNode (location: (52...77))
            ├── name: :x
            ├── name_loc: (56...57) = "x"
            ├── receiver: ∅
            ├── parameters: ∅
            ├── body:
            │   @ StatementsNode (location: (59...72))
            │   └── body: (length: 1)
            │       └── @ ConstantPathOrWriteNode (location: (59...72))
            │           ├── target:
            │           │   @ ConstantPathNode (location: (59...66))
            │           │   ├── parent:
            │           │   │   @ SelfNode (location: (59...63))
            │           │   ├── child:
            │           │   │   @ ConstantReadNode (location: (65...66))
            │           │   │   └── name: :A
            │           │   └── delimiter_loc: (63...65) = "::"
            │           ├── operator_loc: (67...70) = "||="
            │           └── value:
            │               @ IntegerNode (location: (71...72))
            │               └── flags: decimal
            ├── locals: []
            ├── def_keyword_loc: (52...55) = "def"
            ├── operator_loc: ∅
            ├── lparen_loc: ∅
            ├── rparen_loc: ∅
            ├── equal_loc: ∅
            └── end_keyword_loc: (74...77) = "end"
