@ ProgramNode (location: (1,0)-(15,12)) ├── locals: [:_a] └── statements: @ StatementsNode (location: (1,0)-(15,12)) └── body: (length: 8) ├── @ IfNode (location: (1,0)-(1,9)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (1,0)-(1,1)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a │ │ ├── message_loc: (1,0)-(1,1) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (1,2)-(1,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (1,4)-(1,5)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (1,4)-(1,5)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :b │ │ ├── message_loc: (1,4)-(1,5) = "b" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── consequent: │ │ @ ElseNode (location: (1,6)-(1,9)) │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (1,8)-(1,9)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (1,8)-(1,9)) │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :c │ │ │ ├── message_loc: (1,8)-(1,9) = "c" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (3,0)-(3,27)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (3,0)-(3,1)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a │ │ ├── message_loc: (3,0)-(3,1) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (3,2)-(3,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (3,4)-(3,14)) │ │ └── body: (length: 1) │ │ └── @ DefinedNode (location: (3,4)-(3,14)) │ │ ├── lparen_loc: ∅ │ │ ├── value: │ │ │ @ CallNode (location: (3,13)-(3,14)) │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :b │ │ │ ├── message_loc: (3,13)-(3,14) = "b" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ ├── rparen_loc: ∅ │ │ └── keyword_loc: (3,4)-(3,12) = "defined?" │ ├── consequent: │ │ @ ElseNode (location: (3,15)-(3,27)) │ │ ├── else_keyword_loc: (3,15)-(3,16) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (3,17)-(3,27)) │ │ │ └── body: (length: 1) │ │ │ └── @ DefinedNode (location: (3,17)-(3,27)) │ │ │ ├── lparen_loc: ∅ │ │ │ ├── value: │ │ │ │ @ CallNode (location: (3,26)-(3,27)) │ │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :c │ │ │ │ ├── message_loc: (3,26)-(3,27) = "c" │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ └── block: ∅ │ │ │ ├── rparen_loc: ∅ │ │ │ └── keyword_loc: (3,17)-(3,25) = "defined?" │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (5,0)-(5,15)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (5,0)-(5,6)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :empty? │ │ ├── message_loc: (5,0)-(5,6) = "empty?" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (5,6)-(5,7) = "?" │ ├── statements: │ │ @ StatementsNode (location: (5,7)-(5,11)) │ │ └── body: (length: 1) │ │ └── @ TrueNode (location: (5,7)-(5,11)) │ ├── consequent: │ │ @ ElseNode (location: (5,11)-(5,15)) │ │ ├── else_keyword_loc: (5,11)-(5,12) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (5,12)-(5,15)) │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (5,12)-(5,15)) │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (7,0)-(7,16)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (7,0)-(7,6)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :empty? │ │ ├── message_loc: (7,0)-(7,6) = "empty?" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (7,6)-(7,7) = "?" │ ├── statements: │ │ @ StatementsNode (location: (7,7)-(7,12)) │ │ └── body: (length: 1) │ │ └── @ FalseNode (location: (7,7)-(7,12)) │ ├── consequent: │ │ @ ElseNode (location: (7,12)-(7,16)) │ │ ├── else_keyword_loc: (7,12)-(7,13) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (7,13)-(7,16)) │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (7,13)-(7,16)) │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (9,0)-(9,14)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (9,0)-(9,6)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :empty? │ │ ├── message_loc: (9,0)-(9,6) = "empty?" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (9,6)-(9,7) = "?" │ ├── statements: │ │ @ StatementsNode (location: (9,7)-(9,10)) │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (9,7)-(9,10)) │ ├── consequent: │ │ @ ElseNode (location: (9,10)-(9,14)) │ │ ├── else_keyword_loc: (9,10)-(9,11) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (9,11)-(9,14)) │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (9,11)-(9,14)) │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (11,0)-(11,10)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (11,0)-(11,2)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a? │ │ ├── message_loc: (11,0)-(11,2) = "a?" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (11,2)-(11,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (11,3)-(11,6)) │ │ └── body: (length: 1) │ │ └── @ NilNode (location: (11,3)-(11,6)) │ ├── consequent: │ │ @ ElseNode (location: (11,6)-(11,10)) │ │ ├── else_keyword_loc: (11,6)-(11,7) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (11,7)-(11,10)) │ │ │ └── body: (length: 1) │ │ │ └── @ NilNode (location: (11,7)-(11,10)) │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ ├── @ IfNode (location: (13,0)-(13,14)) │ ├── if_keyword_loc: ∅ │ ├── predicate: │ │ @ CallNode (location: (13,0)-(13,1)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :a │ │ ├── message_loc: (13,0)-(13,1) = "a" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── then_keyword_loc: (13,2)-(13,3) = "?" │ ├── statements: │ │ @ StatementsNode (location: (13,3)-(13,7)) │ │ └── body: (length: 1) │ │ └── @ CallNode (location: (13,3)-(13,7)) │ │ ├── flags: variable_call, ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :var1 │ │ ├── message_loc: (13,3)-(13,7) = "var1" │ │ ├── opening_loc: ∅ │ │ ├── arguments: ∅ │ │ ├── closing_loc: ∅ │ │ └── block: ∅ │ ├── consequent: │ │ @ ElseNode (location: (13,8)-(13,14)) │ │ ├── else_keyword_loc: (13,8)-(13,9) = ":" │ │ ├── statements: │ │ │ @ StatementsNode (location: (13,10)-(13,14)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (13,10)-(13,14)) │ │ │ ├── flags: variable_call, ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :var2 │ │ │ ├── message_loc: (13,10)-(13,14) = "var2" │ │ │ ├── opening_loc: ∅ │ │ │ ├── arguments: ∅ │ │ │ ├── closing_loc: ∅ │ │ │ └── block: ∅ │ │ └── end_keyword_loc: ∅ │ └── end_keyword_loc: ∅ └── @ IfNode (location: (15,0)-(15,12)) ├── if_keyword_loc: ∅ ├── predicate: │ @ CallNode (location: (15,0)-(15,4)) │ ├── flags: ignore_visibility │ ├── receiver: ∅ │ ├── call_operator_loc: ∅ │ ├── name: :nil? │ ├── message_loc: (15,0)-(15,4) = "nil?" │ ├── opening_loc: ∅ │ ├── arguments: ∅ │ ├── closing_loc: ∅ │ └── block: ∅ ├── then_keyword_loc: (15,4)-(15,5) = "?" ├── statements: │ @ StatementsNode (location: (15,5)-(15,10)) │ └── body: (length: 1) │ └── @ LocalVariableWriteNode (location: (15,5)-(15,10)) │ ├── name: :_a │ ├── depth: 0 │ ├── name_loc: (15,5)-(15,7) = "_a" │ ├── value: │ │ @ IntegerNode (location: (15,9)-(15,10)) │ │ ├── flags: decimal │ │ └── value: 2 │ └── operator_loc: (15,8)-(15,9) = "=" ├── consequent: │ @ ElseNode (location: (15,10)-(15,12)) │ ├── else_keyword_loc: (15,10)-(15,11) = ":" │ ├── statements: │ │ @ StatementsNode (location: (15,11)-(15,12)) │ │ └── body: (length: 1) │ │ └── @ IntegerNode (location: (15,11)-(15,12)) │ │ ├── flags: decimal │ │ └── value: 1 │ └── end_keyword_loc: ∅ └── end_keyword_loc: ∅