(command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Name SPECIALFORMS_IF_SH> suffix_op: (suffix_op.StringUnary op_id:VTest_Plus arg_word:{(true)}) spids: [9 13] ) } {(Lit_Other ']')} ) (command.ControlFlow token:<ControlFlow_Return return>) ] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:SPECIALFORMS_IF_SH spids:[25]) op: Equal rhs: {(true)} spids: [25] ) ] spids: [21] ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [31 36] ) (/common.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [41 46] ) (/test.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [51 56] ) (/specialforms.sh) } ) (command.FuncDef name: 'evaluator::specialforms::if' body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env spids:[137]) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [137] ) ] spids: [135] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:functionName spids:[147]) op: Equal rhs: {(DQ (${ VSub_Number 2))} spids: [147] ) ] spids: [145] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:args spids:[160]) op: Equal rhs: {(DQ (${ VSub_Number 3))} spids: [160] ) ] spids: [158] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {($ VSub_DollarName '$args')} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare flags: [-i] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:length spids:[188]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [188] ) ] spids: [184] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobNEqual left: {($ VSub_DollarName '$length')} right: {(3)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(stderr)} {(DQ ('usage: (if condition true-branch false-branch)'))}) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] spids: [16777215 209] ) ] spids: [16777215 224] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (index) } {($ VSub_DollarName '$args')} {(0)} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:condition spids:[244]) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [244] ) ] spids: [242] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (index) } {($ VSub_DollarName '$args')} {(1)} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:trueBranch spids:[266]) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [266] ) ] spids: [264] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (index) } {($ VSub_DollarName '$args')} {(2)} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:falseBranch spids:[288]) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [288] ) ] spids: [286] ) (command.Sentence child: (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_DollarName '$env')} {($ VSub_DollarName '$condition')} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:conditionResult spids:[308]) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [308] ) ] spids: [306] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (type) (Lit_Other ':') (Lit_Other ':') (instanceOfOrExit) } {($ VSub_DollarName '$conditionResult')} {(Boolean)} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$conditionResult')} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (true))} right: {(DQ (${ VSub_Name RESULT))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_DollarName '$env')} {($ VSub_DollarName '$trueBranch')} ) ] spids: [16777215 355] ) ] else_action: [ (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_DollarName '$env')} {($ VSub_DollarName '$falseBranch')} ) ] spids: [368 381] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:RESULT spids:[384]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [384] ) ] spids: [384] ) ] spids: [132] ) spids: [120 131] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {($ VSub_Number '$0')} {(KW_Bang '!') (Lit_Other '=')} {($ VSub_DollarName '$BASH_SOURCE')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(command.ControlFlow token:<ControlFlow_Return return>)] spids: [16777215 416] ) ] spids: [16777215 421] ) (command.CommandList children: [ (command.Sentence child:(C {(createTestEnv)}) terminator:<Op_Semi ';'>) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env spids:[446]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [446] ) ] spids: [446] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:command spids:[463]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [463] ) ] spids: [463] ) ] ) (C {(appendToList)} {($ VSub_DollarName '$command')} {(Identifier)} {(DQ (if))}) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:conditional spids:[491]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [491] ) ] spids: [491] ) ] ) (C {(appendToList)} {($ VSub_DollarName '$conditional')} {(Identifier)} {(DQ ('='))} {(Integer)} {(3)} {(Integer)} {(3)} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append)} {($ VSub_DollarName '$command')} {($ VSub_DollarName '$conditional')} ) (C {(appendToList)} {($ VSub_DollarName '$command')} {(String)} {(yes)} {(String)} {(no)}) (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_DollarName '$env')} {($ VSub_DollarName '$command')} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('String :: yes'))} {(DQ (${ VSub_Name RESULT))} {(DQ ("(if (= 3 3) 'yes 'no)"))} ) ] ) (command.CommandList children: [ (command.Sentence child:(C {(createTestEnv)}) terminator:<Op_Semi ';'>) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env spids:[600]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [600] ) ] spids: [600] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:command spids:[617]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [617] ) ] spids: [617] ) ] ) (C {(appendToList)} {($ VSub_DollarName '$command')} {(Identifier)} {(DQ (if))}) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:conditional spids:[645]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [645] ) ] spids: [645] ) ] ) (C {(appendToList)} {($ VSub_DollarName '$conditional')} {(Identifier)} {(DQ ('='))} {(Integer)} {(3)} {(Integer)} {(4)} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append)} {($ VSub_DollarName '$command')} {($ VSub_DollarName '$conditional')} ) (C {(appendToList)} {($ VSub_DollarName '$command')} {(String)} {(yes)} {(String)} {(no)}) (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_DollarName '$env')} {($ VSub_DollarName '$command')} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('String :: no'))} {(DQ (${ VSub_Name RESULT))} {(DQ ("(if (= 3 4) 'yes 'no)"))} ) ] ) (command.CommandList children: [ (command.Sentence child:(C {(createTestEnv)}) terminator:<Op_Semi ';'>) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env spids:[754]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [754] ) ] spids: [754] ) ] ) (C {(setInEnv)} {($ VSub_DollarName '$env')} {(DQ (v))} {(Integer)} {(10)}) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:command spids:[783]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [783] ) ] spids: [783] ) ] ) (C {(appendToList)} {($ VSub_DollarName '$command')} {(Identifier)} {(DQ (if))}) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:conditional spids:[811]) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [811] ) ] spids: [811] ) ] ) (C {(appendToList)} {($ VSub_DollarName '$conditional')} {(Identifier)} {(DQ ('='))} {(Integer)} {(3)} {(Integer)} {(4)} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append)} {($ VSub_DollarName '$command')} {($ VSub_DollarName '$conditional')} ) (C {(appendToList)} {($ VSub_DollarName '$command')} {(Integer)} {(5)} {(Identifier)} {(v)}) (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_DollarName '$env')} {($ VSub_DollarName '$command')} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('Integer :: 10'))} {(DQ (${ VSub_Name RESULT))} {(DQ ("(if (= 3 4) 'yes 'no)"))} ) ] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (report)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.StringUnary op_id:VTest_Plus arg_word:{(isset)}) spids: [918 922] ) } {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=') (Lit_Other '=')} {(DQ (debug))} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [(C {(variable) (Lit_Other ':') (Lit_Other ':') (printMetadata)})] spids: [16777215 944] ) ] spids: [16777215 953] ) ] )