(command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Name VARIABLES_MAP_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:VARIABLES_MAP_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 /) ('*')}) ) (/logger.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.arraylist.sh) } ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (type) (Lit_Other ':') (Lit_Other ':') (define)} {(Map)} {(ArrayList)} ) (command.FuncDef name: 'variable::Map::new' body: (command.BraceGroup children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(Map)} {(DQ (${ VSub_At '@'))}) ] ) ) (command.FuncDef name: 'variable::Map::containsKey_c' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name VARIABLES_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('variable::Map::containsKey_c ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:mapToken) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:keyToken) op: Equal rhs: {(DQ (${ VSub_Number 2))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name mapToken))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare flags: [-a] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal)] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal rhs:{(word_part.ArrayLiteralPart)})] ) terminator: <Op_Semi ';'> ) ] ) ] else_action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: {(word_part.ArrayLiteralPart words:[{(${ VSub_Name RESULT)}])} ) ] ) terminator: <Op_Semi ';'> ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name keyToken))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:key) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:size) op:Equal)] ) (command.Assignment keyword: Assign_Declare 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:currentKey) 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.Assignment keyword: Assign_Declare flags: [-i] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:i) op:Equal)] ) (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.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(${ VSub_Name i)}) ) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentKey) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name currentKey))} {(Lit_Other '=') (Lit_Other '=')} {(DQ (${ VSub_Name key))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'variable::Map::get' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name VARIABLES_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('variable::Map::get ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:mapToken) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:keyToken) op: Equal rhs: {(DQ (${ VSub_Number 2))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name keyToken))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:key) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_Declare flags: [-a] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal)] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$mapToken')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal rhs:{(word_part.ArrayLiteralPart)})] ) terminator: <Op_Semi ';'> ) ] ) ] else_action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: {(word_part.ArrayLiteralPart words:[{(${ VSub_Name RESULT)}])} ) ] ) terminator: <Op_Semi ';'> ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:size) op:Equal)] ) (command.Assignment keyword: Assign_Declare 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:currentKey) 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.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.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(${ VSub_Name i)}) ) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentKey) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name currentKey))} {(Lit_Other '=') (Lit_Other '=')} {(DQ (${ VSub_Name key))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithWord w:{(${ VSub_Name i)}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:RESULT) 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.ArithWord w:{(${ VSub_Name i)}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) ) ) } ) ] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: '_variable::Map::get_p' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (get) } {(DQ (${ VSub_At '@'))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(stderr)} {(DQ ('Map does not contain the specified key [') (${ VSub_Number 2) (']'))} ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) (C {(echo)} {(DQ ($ VSub_DollarName '$RESULT'))}) ] ) ) (command.FuncDef name: 'variable::Map::put' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name VARIABLES_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('variable::Map::put ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:mapToken) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:keyToken) op: Equal rhs: {(DQ (${ VSub_Number 2))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:valueToken) op: Equal rhs: {(DQ (${ VSub_Number 3))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$mapToken')} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare flags: [-a] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal)] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal rhs:{(word_part.ArrayLiteralPart)})] ) terminator: <Op_Semi ';'> ) ] ) ] else_action: [ (command.Sentence child: (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: {(word_part.ArrayLiteralPart words:[{(${ VSub_Name RESULT)}])} ) ] ) terminator: <Op_Semi ';'> ) ] ) (C {(log)} { (DQ ('MAP: ') (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(_variable) (Lit_Other ':') (Lit_Other ':') (value_p)} {($ VSub_DollarName '$mapToken')} ) ] ) left_token: <Left_DollarParen '$('> ) ) } ) (C {(log)} { (DQ ('Adding new key/value to items [') ($ VSub_DollarName '$keyToken') (']=[') ($ VSub_DollarName '$valueToken') ('] -> ') (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Lit_At) suffix_op: (suffix_op.StringUnary op_id: VTest_ColonPlus arg_word: { (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) } ) ) ) } ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$keyToken')} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:key) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$valueToken')} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:value) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:size) op:Equal)] ) (command.Assignment keyword: Assign_Declare 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:currentKey) 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.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.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(${ VSub_Name i)}) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentKey) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Lit_Other '[')} {(DQ (${ VSub_Name currentKey))} {(Lit_Other '=') (Lit_Other '=')} {(DQ (${ VSub_Name key))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(Lit_ArrayLhsOpen 'items[')}) (command.DParen child: (arith_expr.ArithBinary op_id: Arith_Plus left: (arith_expr.ArithWord w:{(${ VSub_Name i)}) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) (C {(Lit_ArrayLhsClose ']=') (DQ (${ VSub_Name valueToken))}) (C {(variable) (Lit_Other ':') (Lit_Other ':') (set)} {(${ VSub_Name mapToken)} {(ArrayList)} { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Arith_Star) ) ) } ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) ] ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsIndexedName name: items index: (arith_expr.ArithWord w: { (DQ (word_part.BracedVarSub token: <VSub_Name items> prefix_op: VSub_Pound bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) ) } ) ) op: Equal rhs: {(DQ (${ VSub_Name keyToken))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsIndexedName name: items index: (arith_expr.ArithWord w: { (DQ (word_part.BracedVarSub token: <VSub_Name items> prefix_op: VSub_Pound bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) ) } ) ) op: Equal rhs: {(DQ (${ VSub_Name valueToken))} ) ] ) (C {(log)} { (DQ ('Added new key/value to items [') ($ VSub_DollarName '$keyToken') (']=[') ($ VSub_DollarName '$valueToken') ('] -> ') (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) ) } ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (set)} {(${ VSub_Name mapToken)} {(ArrayList)} { (DQ (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Arith_Star) ) ) } ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'variable::Map::print' body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:mapToken) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:indent) op: Equal rhs: { (DQ (word_part.BracedVarSub token: <VSub_Number 2> suffix_op: (suffix_op.StringUnary op_id:VTest_Hyphen arg_word:(word.EmptyWord)) ) ) } ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$mapToken')} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare flags: [-a] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal)] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:items) op:Equal rhs:{(word_part.ArrayLiteralPart)})] ) (C {(echo)} {(DQ (${ VSub_Name indent) ('MAP [') (${ VSub_Name mapToken) ('=()]'))}) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:items) op: Equal rhs: {(word_part.ArrayLiteralPart words:[{(${ VSub_Name RESULT)}])} ) ] ) (C {(echo)} { (DQ (${ VSub_Name indent) ('MAP [') (${ VSub_Name mapToken) ('=(') (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) (')]') ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:size) op:Equal)] ) (command.Assignment keyword: Assign_Declare 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:currentKey) 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.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.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(${ VSub_Name i)}) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentKey) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (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)}) ) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentValue) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (C {(echo)} { (DQ (${ VSub_Name indent) (' [') (${ VSub_Name currentKey) (']=[') (${ VSub_Name currentValue) (']') ) } ) ] ) ) ] ) ) (command.FuncDef name: 'variable::Map::debug' body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:token) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$mapToken')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:RESULT) op: Equal rhs: {(DQ ('{}'))} ) ] ) (command.ControlFlow token:<ControlFlow_Return return>) ] ) ] ) (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_Name RESULT> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) ) } ] ) } ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs:(lhs_expr.LhsName name:size) op:Equal) (assign_pair lhs:(lhs_expr.LhsName name:declare) op:Equal) (assign_pair lhs:(lhs_expr.LhsName name:max_index) op:Equal) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:currentKey) op:Equal)] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:currentValue) op:Equal)] ) (command.Assignment keyword: Assign_Declare flags: [-a] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:formatted) op:Equal rhs:{(word_part.ArrayLiteralPart)})] ) (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.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.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (word_part.BracedVarSub token: <VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(${ VSub_Name i)}) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentKey) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} { (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)}) ) ) ) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentValue) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:formatted) op: PlusEqual rhs: { (word_part.ArrayLiteralPart words: [ {(DQ (${ VSub_Name currentKey) ('=') (${ VSub_Name currentValue))} ] ) } ) ] ) ] ) ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (debug) (Lit_Other ':') (Lit_Other ':') (join)} {(DQ (', '))} { (DQ (word_part.BracedVarSub token: <VSub_Name formatted> bracket_op: (bracket_op.WholeArray op_id:Lit_At) ) ) } ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:RESULT) op: Equal rhs: {(DQ ('{') ($ VSub_DollarName '$RESULT') ('}'))} ) ] ) ] ) ) (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>)] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (new)} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:vCode) op:Equal rhs:{(${ VSub_Name RESULT)})] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ ('key one'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:key1) op:Equal rhs:{(${ VSub_Name RESULT)})] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ ('value one'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:value1) op:Equal rhs:{(${ VSub_Name RESULT)})] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ ('key two'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:key2) op:Equal rhs:{(${ VSub_Name RESULT)})] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ ('value two'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:value2) op:Equal rhs:{(${ VSub_Name RESULT)})] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ ('no such key'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:keyUnknown) op: Equal rhs: {(${ VSub_Name RESULT)} ) ] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$keyUnknown')} ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('containsKey false'))} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (put)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value1')} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key1')} ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('containsKey one true'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (get)} {(DQ ($ VSub_DollarName '$vCode'))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))} {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value one'))} {(DQ ($ VSub_DollarName '$RESULT'))} {(DQ ('get key one'))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (put)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key2')} {($ VSub_DollarName '$value2')} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key2')} ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('containsKey two true'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (get)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key2')} ) terminator: <Op_Semi ';'> ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))} {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value two'))} {(DQ ($ VSub_DollarName '$RESULT'))} {(DQ ('get key two'))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (put)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value2')} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key1')} ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(0)} {($ VSub_QMark '$?')} {(DQ ('containsKey one replaced true'))} ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (get)} {($ VSub_DollarName '$vCode')} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))} {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value two'))} {(DQ ($ VSub_DollarName '$RESULT'))} {(DQ ('get key one replaced'))} ) ] ) (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)}) ) } {(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)})] ) ] ) ] )