(command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Name TEST_SH> suffix_op: (suffix_op.StringUnary op_id:VTest_Plus arg_word:{(true)}) ) } {(Lit_Other ']')} ) (command.ControlFlow token:<ControlFlow_Return return>) ] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:TEST_SH) op:Equal rhs:{(true)})] ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/common.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.linkedlist.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/evaluator.sh) } ) (command.FuncDef name: createTestEnv body: (command.BraceGroup children: [ (C {(environment) (Lit_Other ':') (Lit_Other ':') (new)}) (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (setup_builtins)} {(DQ (${ VSub_Name RESULT))} ) ] ) ) (command.FuncDef name: setInEnv body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:name) op: Equal rhs: {(DQ (${ VSub_Number 2))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:type) op: Equal rhs: {(DQ (${ VSub_Number 3))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:value) op: Equal rhs: {(DQ (${ VSub_Number 4))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(Identifier)} {(DQ (${ VSub_Name name))} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:nameToken) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(DQ (${ VSub_Name type))} {(DQ (${ VSub_Name value))} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:valueToken) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name nameToken))} {(DQ (${ VSub_Name valueToken))} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(Identifier)} {(DQ (${ VSub_Name name))} ) ] ) ) (command.FuncDef name: appendToList body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:listToken) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare flags: [-a] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: { (word_part.ArrayLiteralPart words: [ { (DQ (word_part.BracedVarSub token: <VSub_At '@'> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(Lit_Digits 2)}) ) ) ) } ] ) } ) ] ) (command.Assignment keyword: Assign_Declare flags: [-i] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:size) op:Equal)] ) (command.Assignment keyword: Assign_Declare flags: [-i] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:max_index) op:Equal)] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:currentType) op:Equal)] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:currentValue) op:Equal)] ) (command.DParen child: (arith_expr.ArithBinary op_id: Arith_Comma left: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:size) right: (arith_expr.ArithWord w: { (word_part.BracedVarSub token: <VSub_Name items> prefix_op: VSub_Pound bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } ) ) right: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:max_index) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike size>) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DParen child: (arith_expr.ArithBinary op_id: Arith_NEqual left: (arith_expr.ArithBinary op_id: Arith_Percent left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike size>) right: (arith_expr.ArithWord w:{(Lit_Digits 2)}) ) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(stderr)} {(DQ ('appendToList: number of items to add to list not even'))}) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:i) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) cond: (arith_expr.ArithBinary op_id: Arith_LessEqual left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) right: (arith_expr.ArithVarRef token:<Lit_ArithVarLike max_index>) ) update: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:i) right: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) right: (arith_expr.ArithWord w:{(Lit_Digits 2)}) ) ) body: (command.DoGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentType) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(${ VSub_Name i)}) ) ) ) } ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentValue) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) ) } ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(DQ (${ VSub_Name currentType))} {(DQ (${ VSub_Name currentValue))} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (append) } {(DQ (${ VSub_Name listToken))} {(DQ (${ VSub_Name RESULT))} ) ] ) ) ] ) ) ] )