(command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} { (braced_var_sub token: <Id.VSub_Name VARIABLES_MAP_SH> suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<true>}) ) } {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'VARIABLES_MAP_SH='> <true>}) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>}) ) <'/common.sh'> } ) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>}) ) <'/logger.sh'> } ) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>}) ) <'/variables.sh'> } ) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>}) ) <'/variables.arraylist.sh'> } ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <define> } {<Map>} {<ArrayList>} ) (command.ShFunction name: 'variable::Map::new' body: (BraceGroup children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<Map>} {(DQ (${ Id.VSub_At '@'))} ) ] ) ) (command.ShFunction name: 'variable::Map::containsKey_c' body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name VARIABLES_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'variable::Map::containsKey_c '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [158 173] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'mapToken='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Number 2))}) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name mapToken))} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<-a>} {<items>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ (${ Id.VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [251] ) ] ) terminator: <Id.Op_Semi _> ) ] spids: [231 249] ) ] else_action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{(${ Id.VSub_Name RESULT)}] ) } spids: [259] ) ] ) terminator: <Id.Op_Semi _> ) ] ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name keyToken))} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'key='> (DQ (${ Id.VSub_Name RESULT))}) (C {<declare>} {<size>}) (C {<declare>} {<max_index>}) (C {<declare>} {<currentKey>}) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike size> right: { (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike max_index> right: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike size> right: {<Id.Lit_Digits 1>} ) ) ) ) (C {<declare>} {<-i>} {<i>}) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: <Id.Lit_ArithVarLike i> right: <Id.Lit_ArithVarLike max_index> ) update: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 2>} ) ) body: (command.DoGroup children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (DQ (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name i)}) ) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentKey) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [385] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name currentKey))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name key))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [393 415] ) ] ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'variable::Map::get' body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name VARIABLES_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'variable::Map::get '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [461 476] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'mapToken='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Number 2))}) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name keyToken))} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'key='> (DQ (${ Id.VSub_Name RESULT))}) (C {<declare>} {<-a>} {<items>}) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$mapToken')} ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ (${ Id.VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [572] ) ] ) terminator: <Id.Op_Semi _> ) ] spids: [552 570] ) ] else_action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{(${ Id.VSub_Name RESULT)}] ) } spids: [580] ) ] ) terminator: <Id.Op_Semi _> ) ] ) (C {<declare>} {<size>}) (C {<declare>} {<max_index>}) (C {<declare>} {<currentKey>}) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike size> right: { (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike max_index> right: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike size> right: {<Id.Lit_Digits 1>} ) ) ) ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: <Id.Lit_ArithVarLike i> right: <Id.Lit_ArithVarLike max_index> ) update: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 2>} ) ) body: (command.DoGroup children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (DQ (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name i)}) ) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentKey) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [678] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name currentKey))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name key))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (DQ (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: {(${ Id.VSub_Name i)} right: {<Id.Lit_Digits 1>} ) ) ) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: {(${ Id.VSub_Name i)} right: {<Id.Lit_Digits 1>} ) ) ) ) } spids: [738] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [686 708] ) ] ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: '_variable::Map::get_p' body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <get> } {(DQ (${ Id.VSub_At '@'))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<stderr>} {(DQ <'Map does not contain the specified key ['> (${ Id.VSub_Number 2) <']'>)} ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [790 809] ) ] ) (C {<echo>} {(DQ ($ Id.VSub_DollarName '$RESULT'))}) ] ) ) (command.ShFunction name: 'variable::Map::put' body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name VARIABLES_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'variable::Map::put '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [870 885] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'mapToken='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Number 2))}) (C {<declare>} {<Id.Lit_VarLike 'valueToken='> (DQ (${ Id.VSub_Number 3))}) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$mapToken')} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<-a>} {<items>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ (${ Id.VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [969] ) ] ) terminator: <Id.Op_Semi _> ) ] spids: [949 967] ) ] else_action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{(${ Id.VSub_Name RESULT)}] ) } spids: [977] ) ] ) terminator: <Id.Op_Semi _> ) ] ) (C {<log>} { (DQ <'MAP: '> (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<_variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value_p>} {($ Id.VSub_DollarName '$mapToken')} ) ) ) } ) (C {<log>} { (DQ <'Adding new key/value to items ['> ($ Id.VSub_DollarName '$keyToken') <']=['> ($ Id.VSub_DollarName '$valueToken') <'] -> '> (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: { (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) ) ) } ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$keyToken')} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'key='> (DQ (${ Id.VSub_Name RESULT))}) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$valueToken')} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'value='> (DQ (${ Id.VSub_Name RESULT))}) (C {<declare>} {<size>}) (C {<declare>} {<max_index>}) (C {<declare>} {<currentKey>}) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike size> right: { (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike max_index> right: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike size> right: {<Id.Lit_Digits 1>} ) ) ) ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: <Id.Lit_ArithVarLike i> right: <Id.Lit_ArithVarLike max_index> ) update: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 2>} ) ) body: (command.DoGroup children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name i)}) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentKey) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1146] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name currentKey))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name key))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<Id.Lit_ArrayLhsOpen 'items['>}) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Plus left: {(${ Id.VSub_Name i)} right: {<Id.Lit_Digits 1>} ) ) (C {<Id.Lit_ArrayLhsClose ']='> (DQ (${ Id.VSub_Name valueToken))}) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.KW_Set set>} {(${ Id.VSub_Name mapToken)} {<ArrayList>} { (DQ (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Id.Arith_Star) ) ) } ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1154 1176] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: items index: { (DQ (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name keyToken))} spids: [1236] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: items index: { (DQ (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name valueToken))} spids: [1264] ) ] ) (C {<log>} { (DQ <'Added new key/value to items ['> ($ Id.VSub_DollarName '$keyToken') <']=['> ($ Id.VSub_DollarName '$valueToken') <'] -> '> (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Id.KW_Set set>} {(${ Id.VSub_Name mapToken)} {<ArrayList>} { (DQ (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Id.Arith_Star) ) ) } ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'variable::Map::print' body: (BraceGroup children: [ (C {<declare>} {<Id.Lit_VarLike 'mapToken='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'indent='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:(word.Empty)) ) ) } ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$mapToken')} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<-a>} {<items>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ (${ Id.VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [1423] ) ] ) (C {<echo>} {(DQ (${ Id.VSub_Name indent) <'MAP ['> (${ Id.VSub_Name mapToken) <'=()]'>)} ) ] spids: [1401 1419] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:items) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _> words:[{(${ Id.VSub_Name RESULT)}])} spids: [1447] ) ] ) (C {<echo>} { (DQ (${ Id.VSub_Name indent) <'MAP ['> (${ Id.VSub_Name mapToken) <'=('> (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) <')]'> ) } ) ] ) (C {<declare>} {<size>}) (C {<declare>} {<max_index>}) (C {<declare>} {<currentKey>}) (C {<declare>} {<currentValue>}) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike size> right: { (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike max_index> right: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike size> right: {<Id.Lit_Digits 1>} ) ) ) ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: <Id.Lit_ArithVarLike i> right: <Id.Lit_ArithVarLike max_index> ) update: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 2>} ) ) body: (command.DoGroup children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name i)}) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentKey) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1569] ) ] ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 1>} ) ) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentValue) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1597] ) ] ) (C {<echo>} { (DQ (${ Id.VSub_Name indent) <' ['> (${ Id.VSub_Name currentKey) <']=['> (${ Id.VSub_Name currentValue) <']'> ) } ) ] ) ) ] ) ) (command.ShFunction name: 'variable::Map::debug' body: (BraceGroup children: [ (C {<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$mapToken')} ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ (${ Id.VSub_Name RESULT))} right: {(DQ )} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ <'{}'>)} spids: [1684] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] spids: [1663 1681] ) ] ) (C {<declare>} {<-a>} {<Id.Lit_VarLike 'items='> (sh_array_literal left: <Id.Op_LParen _> words: [ { (DQ (braced_var_sub token: <Id.VSub_Name RESULT> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] ) } ) (C {<declare>} {<size>} {<declare>} {<max_index>}) (C {<declare>} {<currentKey>}) (C {<declare>} {<currentValue>}) (C {<declare>} {<-a>} {<Id.Lit_VarLike 'formatted='> (sh_array_literal left:<Id.Op_LParen _>)} ) (command.DParen child: (arith_expr.Binary op_id: Id.Arith_Comma left: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike size> right: { (braced_var_sub token: <Id.VSub_Name items> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike max_index> right: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike size> right: {<Id.Lit_Digits 1>} ) ) ) ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 0>} ) cond: (arith_expr.Binary op_id: Id.Arith_LessEqual left: <Id.Lit_ArithVarLike i> right: <Id.Lit_ArithVarLike max_index> ) update: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: <Id.Lit_ArithVarLike i> right: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 2>} ) ) body: (command.DoGroup children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name i)}) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentKey) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1809] ) ] ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} { (braced_var_sub token: <Id.VSub_Name items> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Plus left: <Id.Lit_ArithVarLike i> right: {<Id.Lit_Digits 1>} ) ) ) } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentValue) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1837] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:formatted) op: assign_op.PlusEqual rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ { (DQ (${ Id.VSub_Name currentKey) <'='> (${ Id.VSub_Name currentValue) ) } ] ) } spids: [1845] ) ] ) ] ) ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <debug> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <join> } {(DQ <', '>)} { (DQ (braced_var_sub token: <Id.VSub_Name formatted> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ <'{'> ($ Id.VSub_DollarName '$RESULT') <'}'>)} spids: [1885] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Number '$0')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {($ Id.VSub_DollarName '$BASH_SOURCE')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)] spids: [1898 1912] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new> } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:vCode) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [1940] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'key one'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:key1) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [1958] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'value one'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value1) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [1976] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'key two'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:key2) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [1994] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'value two'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value2) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [2012] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'no such key'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keyUnknown) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [2030] ) ] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$keyUnknown')} ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'containsKey false'>)} ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <put>} {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')} ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key1')} ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'containsKey one true'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <get> } {(DQ ($ Id.VSub_DollarName '$vCode'))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} {(DQ ($ Id.VSub_DollarName '$RESULT'))} {(DQ <'get key one'>)} ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <put>} {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')} ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key2')} ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'containsKey two true'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <get> } {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key2')} ) terminator: <Id.Op_Semi _> ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} {(DQ ($ Id.VSub_DollarName '$RESULT'))} {(DQ <'get key two'>)} ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <put>} {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value2')} ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key1')} ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'containsKey one replaced true'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <get> } {($ Id.VSub_DollarName '$vCode')} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} {(DQ ($ Id.VSub_DollarName '$RESULT'))} {(DQ <'get key one replaced'>)} ) ] ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <report>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} { (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<isset>}) ) } {<Id.Lit_RBracket ']'>} ) (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <debug>)} {<Id.Lit_RBracket ']'>} ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <printMetadata>})] spids: [2336 2366] ) ] ) ] )