@ ProgramNode (location: (1,0)-(105,3)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(105,3)) └── body: (length: 36) ├── @ DefNode (location: (1,0)-(2,3)) │ ├── name: :! │ ├── name_loc: (1,4)-(1,5) = "!" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (2,0)-(2,3) = "end" ├── @ DefNode (location: (4,0)-(5,3)) │ ├── name: :!= │ ├── name_loc: (4,4)-(4,6) = "!=" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (4,0)-(4,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (7,0)-(8,3)) │ ├── name: :!~ │ ├── name_loc: (7,4)-(7,6) = "!~" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (7,0)-(7,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (8,0)-(8,3) = "end" ├── @ DefNode (location: (10,0)-(11,3)) │ ├── name: :% │ ├── name_loc: (10,4)-(10,5) = "%" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (10,0)-(10,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (11,0)-(11,3) = "end" ├── @ DefNode (location: (13,0)-(14,3)) │ ├── name: :+ │ ├── name_loc: (13,9)-(13,10) = "+" │ ├── receiver: │ │ @ SelfNode (location: (13,4)-(13,8)) │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (13,0)-(13,3) = "def" │ ├── operator_loc: (13,8)-(13,9) = "." │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (14,0)-(14,3) = "end" ├── @ DefNode (location: (16,0)-(17,3)) │ ├── name: :& │ ├── name_loc: (16,4)-(16,5) = "&" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (16,0)-(16,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (17,0)-(17,3) = "end" ├── @ DefNode (location: (19,0)-(20,3)) │ ├── name: :* │ ├── name_loc: (19,4)-(19,5) = "*" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (19,0)-(19,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (20,0)-(20,3) = "end" ├── @ DefNode (location: (22,0)-(23,3)) │ ├── name: :** │ ├── name_loc: (22,4)-(22,6) = "**" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (22,0)-(22,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (23,0)-(23,3) = "end" ├── @ StringNode (location: (25,0)-(25,6)) │ ├── flags: ∅ │ ├── opening_loc: (25,0)-(25,2) = "%|" │ ├── content_loc: (25,2)-(25,5) = "abc" │ ├── closing_loc: (25,5)-(25,6) = "|" │ └── unescaped: "abc" ├── @ DefNode (location: (27,0)-(28,3)) │ ├── name: :+ │ ├── name_loc: (27,4)-(27,5) = "+" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (27,6)-(27,9)) │ │ ├── requireds: (length: 0) │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: │ │ │ @ KeywordRestParameterNode (location: (27,6)-(27,9)) │ │ │ ├── flags: ∅ │ │ │ ├── name: :b │ │ │ ├── name_loc: (27,8)-(27,9) = "b" │ │ │ └── operator_loc: (27,6)-(27,8) = "**" │ │ └── block: ∅ │ ├── body: ∅ │ ├── locals: [:b] │ ├── def_keyword_loc: (27,0)-(27,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (28,0)-(28,3) = "end" ├── @ DefNode (location: (30,0)-(31,3)) │ ├── name: :+ │ ├── name_loc: (30,4)-(30,5) = "+" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (30,0)-(30,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: (30,5)-(30,6) = "(" │ ├── rparen_loc: (30,6)-(30,7) = ")" │ ├── equal_loc: ∅ │ └── end_keyword_loc: (31,0)-(31,3) = "end" ├── @ DefNode (location: (33,0)-(34,3)) │ ├── name: :+ │ ├── name_loc: (33,4)-(33,5) = "+" │ ├── receiver: ∅ │ ├── parameters: │ │ @ ParametersNode (location: (33,6)-(33,7)) │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (33,6)-(33,7)) │ │ │ ├── flags: ∅ │ │ │ └── name: :b │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ │ ├── body: ∅ │ ├── locals: [:b] │ ├── def_keyword_loc: (33,0)-(33,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (34,0)-(34,3) = "end" ├── @ DefNode (location: (36,0)-(37,3)) │ ├── name: :+ │ ├── name_loc: (36,9)-(36,10) = "+" │ ├── receiver: │ │ @ SelfNode (location: (36,4)-(36,8)) │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (36,0)-(36,3) = "def" │ ├── operator_loc: (36,8)-(36,9) = "." │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (37,0)-(37,3) = "end" ├── @ DefNode (location: (39,0)-(40,3)) │ ├── name: :+ │ ├── name_loc: (39,4)-(39,5) = "+" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (39,0)-(39,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (40,0)-(40,3) = "end" ├── @ DefNode (location: (42,0)-(43,3)) │ ├── name: :+@ │ ├── name_loc: (42,4)-(42,6) = "+@" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (42,0)-(42,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (43,0)-(43,3) = "end" ├── @ DefNode (location: (45,0)-(46,3)) │ ├── name: :- │ ├── name_loc: (45,4)-(45,5) = "-" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (45,0)-(45,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (46,0)-(46,3) = "end" ├── @ DefNode (location: (48,0)-(48,11)) │ ├── name: :- │ ├── name_loc: (48,6)-(48,7) = "-" │ ├── receiver: │ │ @ CallNode (location: (48,4)-(48,5)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a │ │ ├── message_loc: (48,4)-(48,5) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (48,0)-(48,3) = "def" │ ├── operator_loc: (48,5)-(48,6) = "." │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (48,8)-(48,11) = "end" ├── @ DefNode (location: (50,0)-(51,3)) │ ├── name: :-@ │ ├── name_loc: (50,4)-(50,6) = "-@" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (50,0)-(50,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (51,0)-(51,3) = "end" ├── @ DefNode (location: (53,0)-(54,3)) │ ├── name: :/ │ ├── name_loc: (53,4)-(53,5) = "/" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (53,0)-(53,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (54,0)-(54,3) = "end" ├── @ DefNode (location: (56,0)-(57,3)) │ ├── name: :< │ ├── name_loc: (56,4)-(56,5) = "<" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (56,0)-(56,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (57,0)-(57,3) = "end" ├── @ DefNode (location: (59,0)-(60,3)) │ ├── name: :<< │ ├── name_loc: (59,4)-(59,6) = "<<" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (59,0)-(59,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (60,0)-(60,3) = "end" ├── @ DefNode (location: (62,0)-(63,3)) │ ├── name: :<= │ ├── name_loc: (62,4)-(62,6) = "<=" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (62,0)-(62,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (63,0)-(63,3) = "end" ├── @ DefNode (location: (65,0)-(66,3)) │ ├── name: :<=> │ ├── name_loc: (65,4)-(65,7) = "<=>" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (65,0)-(65,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (66,0)-(66,3) = "end" ├── @ DefNode (location: (68,0)-(69,3)) │ ├── name: :== │ ├── name_loc: (68,4)-(68,6) = "==" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (68,0)-(68,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (69,0)-(69,3) = "end" ├── @ DefNode (location: (71,0)-(72,3)) │ ├── name: :=== │ ├── name_loc: (71,4)-(71,7) = "===" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (71,0)-(71,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (72,0)-(72,3) = "end" ├── @ DefNode (location: (74,0)-(75,3)) │ ├── name: :=~ │ ├── name_loc: (74,4)-(74,6) = "=~" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (74,0)-(74,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (75,0)-(75,3) = "end" ├── @ DefNode (location: (77,0)-(78,3)) │ ├── name: :> │ ├── name_loc: (77,4)-(77,5) = ">" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (77,0)-(77,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (78,0)-(78,3) = "end" ├── @ DefNode (location: (80,0)-(81,3)) │ ├── name: :>= │ ├── name_loc: (80,4)-(80,6) = ">=" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (80,0)-(80,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (81,0)-(81,3) = "end" ├── @ DefNode (location: (83,0)-(84,3)) │ ├── name: :>> │ ├── name_loc: (83,4)-(83,6) = ">>" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (83,0)-(83,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (84,0)-(84,3) = "end" ├── @ DefNode (location: (86,0)-(87,3)) │ ├── name: :[] │ ├── name_loc: (86,4)-(86,6) = "[]" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (86,0)-(86,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (87,0)-(87,3) = "end" ├── @ DefNode (location: (89,0)-(90,3)) │ ├── name: :[]= │ ├── name_loc: (89,4)-(89,7) = "[]=" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (89,0)-(89,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (90,0)-(90,3) = "end" ├── @ DefNode (location: (92,0)-(93,3)) │ ├── name: :^ │ ├── name_loc: (92,4)-(92,5) = "^" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (92,0)-(92,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (93,0)-(93,3) = "end" ├── @ DefNode (location: (95,0)-(96,3)) │ ├── name: :` │ ├── name_loc: (95,4)-(95,5) = "`" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (95,0)-(95,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (96,0)-(96,3) = "end" ├── @ DefNode (location: (98,0)-(99,3)) │ ├── name: :` │ ├── name_loc: (98,9)-(98,10) = "`" │ ├── receiver: │ │ @ SelfNode (location: (98,4)-(98,8)) │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (98,0)-(98,3) = "def" │ ├── operator_loc: (98,8)-(98,9) = "." │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (99,0)-(99,3) = "end" ├── @ DefNode (location: (101,0)-(102,3)) │ ├── name: :| │ ├── name_loc: (101,4)-(101,5) = "|" │ ├── receiver: ∅ │ ├── parameters: ∅ │ ├── body: ∅ │ ├── locals: [] │ ├── def_keyword_loc: (101,0)-(101,3) = "def" │ ├── operator_loc: ∅ │ ├── lparen_loc: ∅ │ ├── rparen_loc: ∅ │ ├── equal_loc: ∅ │ └── end_keyword_loc: (102,0)-(102,3) = "end" └── @ DefNode (location: (104,0)-(105,3)) ├── name: :~ ├── name_loc: (104,4)-(104,5) = "~" ├── receiver: ∅ ├── parameters: ∅ ├── body: ∅ ├── locals: [] ├── def_keyword_loc: (104,0)-(104,3) = "def" ├── operator_loc: ∅ ├── lparen_loc: ∅ ├── rparen_loc: ∅ ├── equal_loc: ∅ └── end_keyword_loc: (105,0)-(105,3) = "end"