(command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} { (braced_var_sub token: <Id.VSub_Name ENVIRONMENT_SH> suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<isset>}) ) } {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'ENVIRONMENT_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 '/'> <'*'>}) ) <'/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 {<.>} { (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.linkedlist.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.stack.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.queue.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.map.sh'> } ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'ENVIRONMENT_DEBUG='> <0>}) (command.ShFunction name: 'environment::new' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::new '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [180 195] ) ] ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new> } ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [222] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new> } ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <prepend> } {(DQ (${ Id.VSub_Name env))} {(DQ (${ Id.VSub_Name RESULT))} ) ] ) ) (command.ShFunction name: 'environment::pushScope' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::pushScope '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [296 311] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))}) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new> } ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <prepend> } {(DQ (${ Id.VSub_Name env))} {(DQ (${ Id.VSub_Name RESULT))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [370] ) ] ) ] ) ) (command.ShFunction name: 'environment::popScope' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::popScope '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [419 434] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <rest> } {(DQ ($ Id.VSub_Number '$1'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [464] ) ] ) ] ) ) (command.ShFunction name: 'environment::hasValue' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::getValue '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [501 516] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'name='> (DQ (${ Id.VSub_Number 2))}) (C {<declare>} {<scope>}) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ (${ Id.VSub_Name name))} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Name RESULT))}) (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Name env))}) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c> } {(DQ (${ Id.VSub_Name currentEnv))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <first> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:scope) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [633] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name name))} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [641 665] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <rest> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentEnv) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))} spids: [692] ) ] ) ] ) ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'environment::getValue' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::getValue '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [739 754] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'name='> (DQ (${ Id.VSub_Number 2))}) (C {<declare>} {<scope>}) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ (${ Id.VSub_Name name))} ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Name RESULT))}) (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Name env))}) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c> } {(DQ (${ Id.VSub_Name currentEnv))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <first> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:scope) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [871] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name name))} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <get> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name name))} ) (command.ControlFlow token: <Id.ControlFlow_Return return> ) ] spids: [879 903] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <rest> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentEnv) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))} spids: [949] ) ] ) ] ) ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {($ Id.VSub_DollarName '$name')} ) (C {<stderr>} { (DQ <'Variable ['> (${ Id.VSub_Name name) <'='> (${ Id.VSub_Name RESULT) <'] not found in current environment'> ) } ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'environment::setVariable' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::setVariable '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [1028 1043] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'env='> (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))}) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <first> } {(DQ (${ Id.VSub_Name env))} ) (C {<declare>} {<Id.Lit_VarLike 'scope='> (DQ (${ Id.VSub_Name RESULT))}) (C {<declare>} {<returnValue>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:returnValue) op: assign_op.Equal rhs: {<0>} spids: [1149] ) ] ) ] spids: [1122 1146] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:returnValue) op: assign_op.Equal rhs: {<1>} spids: [1156] ) ] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <put> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} {(DQ (${ Id.VSub_Name valueToken))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ )} spids: [1191] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$returnValue')} ) ] ) ) (command.ShFunction name: 'environment::setOrReplaceVariable' 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 ENVIRONMENT_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<stderr>} {(DQ <'environment::setOrReplaceVariable '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [1234 1249] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'env='> (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))}) (C {<declare>} {<scope>}) (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Name env))}) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c> } {(DQ (${ Id.VSub_Name currentEnv))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <first> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:scope) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1350] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <put> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} {(DQ (${ Id.VSub_Name valueToken))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ )} spids: [1412] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1358 1382] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <rest> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentEnv) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))} spids: [1441] ) ] ) ] ) ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <first> } {(DQ (${ Id.VSub_Name env))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:scope) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1470] ) ] ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <put> } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} {(DQ (${ Id.VSub_Name valueToken))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RESULT) op: assign_op.Equal rhs: {(DQ )} spids: [1505] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'environment::print' body: (BraceGroup children: [ (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Number 1))}) (C {<echo>} {(DQ <'Environment ['> (${ Id.VSub_Name currentEnv) <']'>)}) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c> } {(DQ (${ Id.VSub_Name currentEnv))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <first> } {(DQ (${ Id.VSub_Name currentEnv))} ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <print> } {(DQ (${ Id.VSub_Name RESULT))} ) (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <rest> } {(DQ (${ Id.VSub_Name currentEnv))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:currentEnv) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))} spids: [1621] ) ] ) ] ) ) ] ) ) (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: [1635 1649] ) ] ) (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: [1670] ) ] ) ] ) (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: [1688] ) ] ) ] ) (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: [1706] ) ] ) ] ) (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: [1724] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'key three'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:key3) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [1742] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'value three'>)}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value3) op: assign_op.Equal rhs: {(${ Id.VSub_Name RESULT)} spids: [1760] ) ] ) ] ) (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: [1778] ) ] ) ] ) (C {<declare>} {<env1>}) (C {<declare>} {<env2>}) (C {<declare>} {<env3>}) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env1) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1803] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Single variable'>)} ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Multiple variables, first'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key2')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Multiple variables, second'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env1) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2023] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <pushScope>} {(DQ (${ Id.VSub_Name env1))} ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env2) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2058] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Second scope'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <popScope>} {(DQ (${ Id.VSub_Name env2))} ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env3) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2205] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope post pop'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <hasValue>} {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key2')} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'Variable from second scope after we popped it'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env1) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2316] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setOrReplaceVariable>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <pushScope>} {(DQ (${ Id.VSub_Name env1))} ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env2) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2351] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setOrReplaceVariable>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')} ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setOrReplaceVariable>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value3')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Second scope'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value three'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <popScope>} {(DQ (${ Id.VSub_Name env2))} ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env3) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2513] ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value three'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope post pop'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <hasValue>} {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key2')} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'Variable from second scope after we popped it'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>}) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env1) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))} spids: [2626] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {($ Id.VSub_DollarName '$env1')} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <pushScope>} {(DQ (${ Id.VSub_Name env1))} ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:env2) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))} spids: [2655] ) ] ) ] ) (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value2')} ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'setVariable, original env'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'setVariable, new env'>)} ) ] ) (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: [2795 2825] ) ] ) ] )