(CommandList children: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (BracedVarSub token: <VSub_Name SPECIALFORMS_LETSTAR_SH> suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(true)}) spids: [9 13] ) } {(Lit_Other ']')} ) (ControlFlow token:<ControlFlow_Return return>) ] ) (Assignment keyword: Assign_Declare flags: [-g] pairs: [ (assign_pair lhs: (LhsName name:SPECIALFORMS_LETSTAR_SH) op: Equal rhs: {(true)} spids: [25] ) ] spids: [21] ) (C {(.)} { (BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [31 36] ) (/common.sh) } ) (C {(.)} { (BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [41 46] ) (/test.sh) } ) (C {(.)} { (BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [51 56] ) (/specialforms.sh) } ) (FuncDef name: 'evaluator::specialforms::letstar' body: (BraceGroup children: [ (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [122] ) ] spids: [120] ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (LhsName name:functionName) op: Equal rhs: {(DQ (${ VSub_Number 2))} spids: [132] ) ] spids: [130] ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (LhsName name:args) op: Equal rhs: {(DQ (${ VSub_Number 3))} spids: [145] ) ] spids: [143] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {($ VSub_Name '$args')} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_Declare flags: [-i] pairs: [ (assign_pair lhs: (LhsName name:length) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [173] ) ] spids: [169] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: Redir_Less left: {($ VSub_Name '$length')} right: {(2)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(stderr)} {(DQ ('usage: (let <bindings> <expr 1> .. <expr N>)'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 194] ) ] spids: [16777215 209] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {($ VSub_Name '$args')} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (LhsName name:bindings) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [227] ) ] spids: [225] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {($ VSub_Name '$args')} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (LhsName name:expressions) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [247] ) ] spids: [245] ) (Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (pushScope)} {($ VSub_Name '$env')}) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (LhsName name:runningEnv) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [269] ) ] spids: [267] ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs:(LhsName name:thisBinding) op:Equal spids:[279]) (assign_pair lhs:(LhsName name:thisKey) op:Equal spids:[281]) (assign_pair lhs:(LhsName name:thisValue) op:Equal spids:[283]) (assign_pair lhs:(LhsName name:thisResult) op:Equal spids:[285]) ] spids: [277] ) (While cond: [ (Sentence child: (Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (isEmpty_c) } {(DQ (${ VSub_Name bindings))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name bindings))} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:thisBinding) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [327] ) ] spids: [327] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ (${ VSub_Name bindings))} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:bindings) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [351] ) ] spids: [351] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (length) } {(DQ (${ VSub_Name thisBinding))} ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ (${ VSub_Name RESULT))} right: {(2)} ) ) terminator: <Op_Semi ';'> ) ] action: [(C {(stderr)} {(DQ ('let binding must have exactly 2 elements'))})] spids: [16777215 392] ) ] spids: [16777215 402] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (index) } {(DQ (${ VSub_Name thisBinding))} {(0)} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:thisKey) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [425] ) ] spids: [425] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (index) } {(DQ (${ VSub_Name thisBinding))} {(1)} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:thisValue) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} spids: [451] ) ] spids: [451] ) (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_Name '$runningEnv')} {($ VSub_Name '$thisValue')} ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name runningEnv))} {($ VSub_Name '$thisKey')} {($ VSub_Name '$RESULT')} ) ] spids: [308 485] ) ) (Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs:(LhsName name:currentSexp) op:Equal spids:[495]) (assign_pair lhs:(LhsName name:currentResult) op:Equal spids:[497]) ] spids: [493] ) (While cond: [ (Sentence child: (Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (isEmpty_c) } {(DQ (${ VSub_Name expressions))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name expressions))} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:currentSexp) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [539] ) ] spids: [539] ) (Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ (${ VSub_Name expressions))} ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expressions) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [561] ) ] spids: [561] ) (C {(evaluator) (Lit_Other ':') (Lit_Other ':') (eval)} {($ VSub_Name '$runningEnv')} {($ VSub_Name '$currentSexp')} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:currentResult) op: Equal rhs: {(${ VSub_Name RESULT)} spids: [577] ) ] spids: [577] ) ] spids: [520 583] ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESULT) op: Equal rhs: {(DQ (${ VSub_Name currentResult))} spids: [586] ) ] spids: [586] ) ] spids: [117] ) spids: [105 116] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Number '$0')} {(KW_Bang '!') (Lit_Other '=')} {($ VSub_Name '$BASH_SOURCE')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Return return>)] spids: [16777215 618] ) ] spids: [16777215 623] ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (report)}) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (BracedVarSub token: <VSub_Number 1> suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(isset)}) spids: [640 644] ) } {(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 666] ) ] spids: [16777215 675] ) ] )