@ ProgramNode (location: (1,0)-(13,43)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(13,43)) └── body: (length: 3) ├── @ DefNode (location: (1,0)-(5,3)) │ ├── name: :exec │ ├── name_loc: (1,9)-(1,13) = "exec" │ ├── receiver: │ │ @ SelfNode (location: (1,4)-(1,8)) │ ├── parameters: │ │ @ ParametersNode (location: (1,14)-(1,17)) │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,17)) │ │ │ ├── flags: ∅ │ │ │ └── name: :cmd │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ BeginNode (location: (1,0)-(5,3)) │ │ ├── begin_keyword_loc: ∅ │ │ ├── statements: │ │ │ @ StatementsNode (location: (2,2)-(2,13)) │ │ │ └── body: (length: 1) │ │ │ └── @ CallNode (location: (2,2)-(2,13)) │ │ │ ├── flags: ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :system │ │ │ ├── message_loc: (2,2)-(2,8) = "system" │ │ │ ├── opening_loc: (2,8)-(2,9) = "(" │ │ │ ├── arguments: │ │ │ │ @ ArgumentsNode (location: (2,9)-(2,12)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (2,9)-(2,12)) │ │ │ │ ├── name: :cmd │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (2,12)-(2,13) = ")" │ │ │ └── block: ∅ │ │ ├── rescue_clause: │ │ │ @ RescueNode (location: (3,0)-(4,5)) │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" │ │ │ ├── exceptions: (length: 0) │ │ │ ├── operator_loc: ∅ │ │ │ ├── reference: ∅ │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (4,2)-(4,5)) │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) │ │ │ └── consequent: ∅ │ │ ├── else_clause: ∅ │ │ ├── ensure_clause: ∅ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" │ ├── locals: [:cmd] │ ├── def_keyword_loc: (1,0)-(1,3) = "def" │ ├── operator_loc: (1,8)-(1,9) = "." │ ├── lparen_loc: (1,13)-(1,14) = "(" │ ├── rparen_loc: (1,17)-(1,18) = ")" │ ├── equal_loc: ∅ │ └── end_keyword_loc: (5,0)-(5,3) = "end" ├── @ DefNode (location: (8,0)-(10,3)) │ ├── name: :exec │ ├── name_loc: (8,9)-(8,13) = "exec" │ ├── receiver: │ │ @ SelfNode (location: (8,4)-(8,8)) │ ├── parameters: │ │ @ ParametersNode (location: (8,14)-(8,17)) │ │ ├── requireds: (length: 1) │ │ │ └── @ RequiredParameterNode (location: (8,14)-(8,17)) │ │ │ ├── flags: ∅ │ │ │ └── name: :cmd │ │ ├── optionals: (length: 0) │ │ ├── rest: ∅ │ │ ├── posts: (length: 0) │ │ ├── keywords: (length: 0) │ │ ├── keyword_rest: ∅ │ │ └── block: ∅ │ ├── body: │ │ @ StatementsNode (location: (9,2)-(9,24)) │ │ └── body: (length: 1) │ │ └── @ RescueModifierNode (location: (9,2)-(9,24)) │ │ ├── expression: │ │ │ @ CallNode (location: (9,2)-(9,13)) │ │ │ ├── flags: ignore_visibility │ │ │ ├── receiver: ∅ │ │ │ ├── call_operator_loc: ∅ │ │ │ ├── name: :system │ │ │ ├── message_loc: (9,2)-(9,8) = "system" │ │ │ ├── opening_loc: (9,8)-(9,9) = "(" │ │ │ ├── arguments: │ │ │ │ @ ArgumentsNode (location: (9,9)-(9,12)) │ │ │ │ ├── flags: ∅ │ │ │ │ └── arguments: (length: 1) │ │ │ │ └── @ LocalVariableReadNode (location: (9,9)-(9,12)) │ │ │ │ ├── name: :cmd │ │ │ │ └── depth: 0 │ │ │ ├── closing_loc: (9,12)-(9,13) = ")" │ │ │ └── block: ∅ │ │ ├── keyword_loc: (9,14)-(9,20) = "rescue" │ │ └── rescue_expression: │ │ @ NilNode (location: (9,21)-(9,24)) │ ├── locals: [:cmd] │ ├── def_keyword_loc: (8,0)-(8,3) = "def" │ ├── operator_loc: (8,8)-(8,9) = "." │ ├── lparen_loc: (8,13)-(8,14) = "(" │ ├── rparen_loc: (8,17)-(8,18) = ")" │ ├── equal_loc: ∅ │ └── end_keyword_loc: (10,0)-(10,3) = "end" └── @ DefNode (location: (13,0)-(13,43)) ├── name: :exec ├── name_loc: (13,9)-(13,13) = "exec" ├── receiver: │ @ SelfNode (location: (13,4)-(13,8)) ├── parameters: │ @ ParametersNode (location: (13,14)-(13,17)) │ ├── requireds: (length: 1) │ │ └── @ RequiredParameterNode (location: (13,14)-(13,17)) │ │ ├── flags: ∅ │ │ └── name: :cmd │ ├── optionals: (length: 0) │ ├── rest: ∅ │ ├── posts: (length: 0) │ ├── keywords: (length: 0) │ ├── keyword_rest: ∅ │ └── block: ∅ ├── body: │ @ StatementsNode (location: (13,21)-(13,43)) │ └── body: (length: 1) │ └── @ RescueModifierNode (location: (13,21)-(13,43)) │ ├── expression: │ │ @ CallNode (location: (13,21)-(13,32)) │ │ ├── flags: ignore_visibility │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :system │ │ ├── message_loc: (13,21)-(13,27) = "system" │ │ ├── opening_loc: (13,27)-(13,28) = "(" │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (13,28)-(13,31)) │ │ │ ├── flags: ∅ │ │ │ └── arguments: (length: 1) │ │ │ └── @ LocalVariableReadNode (location: (13,28)-(13,31)) │ │ │ ├── name: :cmd │ │ │ └── depth: 0 │ │ ├── closing_loc: (13,31)-(13,32) = ")" │ │ └── block: ∅ │ ├── keyword_loc: (13,33)-(13,39) = "rescue" │ └── rescue_expression: │ @ NilNode (location: (13,40)-(13,43)) ├── locals: [:cmd] ├── def_keyword_loc: (13,0)-(13,3) = "def" ├── operator_loc: (13,8)-(13,9) = "." ├── lparen_loc: (13,13)-(13,14) = "(" ├── rparen_loc: (13,17)-(13,18) = ")" ├── equal_loc: (13,19)-(13,20) = "=" └── end_keyword_loc: ∅