(CommandList children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name __mal_env_included__))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:__mal_env_included) op: Equal rhs: {(true)} spids: [27] ) ] spids: [27] ) (C {(source)} { (CommandSubPart command_list: (CommandList children:[(C {(dirname)} {($ VSub_Number '$0')})]) left_token: <Left_CommandSub '$('> spids: [33 37] ) (/types.sh) } ) (FuncDef name: ENV body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:r) op: Equal rhs: {(EmptyPart)} spids: [55] ) ] spids: [55] ) (C {(_hash_map)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Name r))} spids: [63] ) ] spids: [61] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(WordTest w:{(DQ (${ VSub_Number 1))})) terminator: <Op_Semi ';'> ) ] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:outer) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [87] ) ] spids: [87] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (__outer__))} {(DQ (${ VSub_Name outer))} ) ] spids: [16777215 84] ) ] else_action: [ (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (__outer__))} {(DQ (${ VSub_Name __nil))} ) ] spids: [118 141] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:r) op: Equal rhs: {(DQ (${ VSub_Name env))} spids: [144] ) ] spids: [144] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (WordTest w:{(DQ (${ VSub_Number 1))}) right: (WordTest w:{(DQ (${ VSub_At '@'))}) ) ) terminator: <Op_Semi ';'> ) ] action: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:binds) op: Equal rhs: { (ArrayLiteralPart words: [ { (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr: (ArithWord w:{(DQ (${ VSub_Number 1))}) ) spids: [181 190] ) } ] ) } spids: [179] ) ] spids: [177] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:idx) op: Equal rhs: {(0)} spids: [199] ) ] spids: [197] ) (While cond: [ (Sentence child: (DBracket expr: (WordTest w: { (DQ (BracedVarSub token: <VSub_Name binds> bracket_op: (ArrayIndex expr: (ArithWord w:{(DQ (${ VSub_Name idx))}) ) spids: [208 217] ) ) } ) ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:fp) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr: (ArithWord w: { (DQ (BracedVarSub token: <VSub_Name binds> bracket_op: (ArrayIndex expr: (ArithWord w: {(DQ (${ VSub_Name idx))} ) ) spids: [234 243] ) ) } ) ) spids: [230 246] ) ) } spids: [228] ) ] spids: [226] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ (${ VSub_Name fp))} right: {(DQ ('&'))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:idx) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:idx) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [273 282] ) } spids: [272] ) ] spids: [272] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:fp) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr: (ArithWord w: { (DQ (BracedVarSub token: <VSub_Name binds> bracket_op: (ArrayIndex expr: (ArithWord w: { (DQ (${ VSub_Name idx ) ) } ) ) spids: [291 300] ) ) } ) ) spids: [287 303] ) ) } spids: [285] ) ] spids: [285] ) (C {(_list)} {(DQ (${ VSub_At '@'))}) (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name fp))} {(DQ (${ VSub_Name r))} ) (ControlFlow token: <ControlFlow_Break break> ) ] spids: [16777215 269] ) ] else_action: [ (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name fp))} {(DQ (${ VSub_Number 1))} ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:idx) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithVarRef name:idx) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [370 379] ) } spids: [369] ) ] spids: [369] ) ] spids: [341 382] ) ] spids: [223 385] ) ) ] spids: [16777215 174] ) ] spids: [16777215 388] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:r) op: Equal rhs: {(DQ (${ VSub_Name env))} spids: [391] ) ] spids: [391] ) ] spids: [52] ) spids: [47 51] ) (FuncDef name: ENV_FIND body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(_contains) (Lit_Other '?')} {(DQ (${ VSub_Number 1))} { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr: (ArithWord w:{(DQ (${ VSub_Number 2))}) ) spids: [424 433] ) ) } ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:r) op: Equal rhs: {(DQ (${ VSub_Number 1))} spids: [440] ) ] spids: [440] ) ] spids: [16777215 437] ) ] else_action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:obj) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr: (ArithWord w:{(DQ (${ VSub_Number 1))}) ) spids: [455 464] ) ) } spids: [453] ) ] spids: [451] ) (C {(eval)} {(Assign_Local local)} {(Lit_VarLike 'outer=') (DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{') (${ VSub_Name obj) ('[') ) (__outer__) (DQ (']}')) } ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (WordTest w:{(DQ (${ VSub_Name outer))}) right: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ (${ VSub_Name outer))} right: {(DQ (${ VSub_Name __nil))} ) ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(ENV_FIND)} {(DQ (${ VSub_Name outer))} {(DQ (${ VSub_Number 2))}) ] spids: [16777215 516] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:r) op: Equal rhs: {(EmptyPart)} spids: [537] ) ] spids: [537] ) ] spids: [534 540] ) ] spids: [448 543] ) ] spids: [409] ) spids: [404 408] ) (FuncDef name: ENV_GET body: (BraceGroup children: [ (C {(ENV_FIND)} {(DQ (${ VSub_Number 1))} {(DQ (${ VSub_Number 2))}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Name r))} spids: [582] ) ] spids: [580] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:key) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr:(ArithWord w:{(DQ (${ VSub_Number 2))})) spids: [594 603] ) ) } spids: [592] ) ] spids: [590] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(WordTest w:{(DQ (${ VSub_Name r))})) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:obj) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr: (ArithWord w:{(DQ (${ VSub_Name env))}) ) spids: [627 636] ) ) } spids: [625] ) ] spids: [623] ) (C {(eval)} {(Lit_VarLike 'r=') (DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{') (${ VSub_Name obj) ('[') ) (${ VSub_Name key) (DQ (']}')) } ) ] spids: [16777215 620] ) ] else_action: [(C {(_error)} {(DQ ("'") (${ VSub_Name key) ("' not found"))})] spids: [659 673] ) ] spids: [562] ) spids: [557 561] ) (FuncDef name: ENV_SET body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:key) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ANON> bracket_op: (ArrayIndex expr:(ArithWord w:{(DQ (${ VSub_Number 2))})) spids: [690 699] ) ) } spids: [688] ) ] spids: [686] ) (C {(_assoc) (KW_Bang '!')} {(DQ (${ VSub_Number 1))} {(DQ (${ VSub_Name key))} {(DQ (${ VSub_Number 3))} ) ] spids: [683] ) spids: [678 682] ) ] spids: [16777215 25] ) ] spids: [16777215 727] ) ] )