(command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} { (word_part.BracedVarSub token: <VSub_Name ENVIRONMENT_SH> suffix_op: (suffix_op.StringUnary op_id:VTest_Plus arg_word:{(isset)}) ) } {(Lit_Other ']')} ) (command.ControlFlow token:<ControlFlow_Return return>) ] ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:ENVIRONMENT_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 /) ('*')}) ) (/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 {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.linkedlist.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.stack.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.queue.sh) } ) (C {(.)} { (word_part.BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) ) (/variables.map.sh) } ) (command.Assignment keyword: Assign_Declare flags: [-g] pairs: [(assign_pair lhs:(lhs_expr.LhsName name:ENVIRONMENT_DEBUG) op:Equal rhs:{(0)})] ) (command.FuncDef name: 'environment::new' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::new ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (new) } ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (new)} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (prepend) } {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name RESULT))} ) ] ) ) (command.FuncDef name: 'environment::pushScope' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::pushScope ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (new)} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (prepend) } {(DQ (${ VSub_Name env))} {(DQ (${ VSub_Name RESULT))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:RESULT) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) ) (command.FuncDef name: 'environment::popScope' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::popScope ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ ($ VSub_Number '$1'))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:RESULT) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) ) (command.FuncDef name: 'environment::hasValue' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::getValue ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:name) op: Equal rhs: {(DQ (${ VSub_Number 2))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:scope) op:Equal)] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ (${ VSub_Name name))} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:keyToken) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ (${ VSub_Name env))} ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (isEmpty_c) } {(DQ (${ VSub_Name currentEnv))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:scope) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c) } {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name name))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ ($ VSub_DollarName '$RESULT'))} ) ] ) ] ) ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'environment::getValue' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::getValue ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:name) op: Equal rhs: {(DQ (${ VSub_Number 2))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:scope) op:Equal)] ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ (${ VSub_Name name))} ) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:keyToken) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ (${ VSub_Name env))} ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (isEmpty_c) } {(DQ (${ VSub_Name currentEnv))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:scope) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c) } {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name name))} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (get) } {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name name))} ) (command.ControlFlow token: <ControlFlow_Return return> ) ] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ ($ VSub_DollarName '$RESULT'))} ) ] ) ] ) ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {($ VSub_DollarName '$name')}) (C {(stderr)} { (DQ ('Variable [') (${ VSub_Name name) ('=') (${ VSub_Name RESULT) ('] not found in current environment') ) } ) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'environment::setVariable' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::setVariable ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) 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))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name env))} ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:scope) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:returnValue) op:Equal)] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c) } {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name keyToken))} ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:returnValue) op:Equal rhs:{(0)})] ) ] ) ] else_action: [ (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:returnValue) op:Equal rhs:{(1)})] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (put)} {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name keyToken))} {(DQ (${ VSub_Name valueToken))} ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:RESULT) op:Equal rhs:{(DQ )})] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {($ VSub_DollarName '$returnValue')} ) ] ) ) (command.FuncDef name: 'environment::setOrReplaceVariable' 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 ENVIRONMENT_DEBUG)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Sentence child: (C {(stderr)} {(DQ ('environment::setOrReplaceVariable ') (${ VSub_At '@'))}) terminator: <Op_Semi ';'> ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env) 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.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:scope) op:Equal)] ) (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ (${ VSub_Name env))} ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (isEmpty_c) } {(DQ (${ VSub_Name currentEnv))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:scope) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (containsKey_c) } {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name keyToken))} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (put) } {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name keyToken))} {(DQ (${ VSub_Name valueToken))} ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:RESULT) op:Equal rhs:{(DQ )})] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ ($ VSub_DollarName '$RESULT'))} ) ] ) ] ) ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name env))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:scope) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (put)} {(DQ (${ VSub_Name scope))} {(DQ (${ VSub_Name keyToken))} {(DQ (${ VSub_Name valueToken))} ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:RESULT) op:Equal rhs:{(DQ )})] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ) (command.FuncDef name: 'environment::print' body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Declare pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) op: Equal rhs: {(DQ (${ VSub_Number 1))} ) ] ) (C {(echo)} {(DQ ('Environment [') (${ VSub_Name currentEnv) (']'))}) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (isEmpty_c) } {(DQ (${ VSub_Name currentEnv))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (first) } {(DQ (${ VSub_Name currentEnv))} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (Map) (Lit_Other ':') (Lit_Other ':') (print) } {(DQ (${ VSub_Name RESULT))} ) (C {(variable) (Lit_Other ':') (Lit_Other ':') (LinkedList) (Lit_Other ':') (Lit_Other ':') (rest) } {(DQ (${ VSub_Name currentEnv))} ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:currentEnv) 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 ':') (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 ('key three'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:key3) op:Equal rhs:{(${ VSub_Name RESULT)})] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (new)} {(String)} {(DQ ('value three'))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:value3) 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)} ) ] ) ] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:env1) op:Equal)] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:env2) op:Equal)] ) (command.Assignment keyword: Assign_Declare pairs: [(assign_pair lhs:(lhs_expr.LhsName name:env3) op:Equal)] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (new)}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env1) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value one'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Single variable'))} ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key2')} {($ VSub_DollarName '$value2')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value one'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Multiple variables, first'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key2')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value two'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Multiple variables, second'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (new)}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env1) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (pushScope)} {(DQ (${ VSub_Name env1))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env2) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key2')} {($ VSub_DollarName '$value2')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key2')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value two'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Second scope'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value one'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Variable from first scope'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (popScope)} {(DQ (${ VSub_Name env2))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env3) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env3))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value one'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Variable from first scope post pop'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (hasValue)} {(DQ (${ VSub_Name env3))} {($ VSub_DollarName '$key2')} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('Variable from second scope after we popped it'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (new)}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env1) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setOrReplaceVariable)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (pushScope)} {(DQ (${ VSub_Name env1))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env2) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setOrReplaceVariable)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key2')} {($ VSub_DollarName '$value2')} ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setOrReplaceVariable)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value3')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key2')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value two'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Second scope'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value three'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Variable from first scope'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (popScope)} {(DQ (${ VSub_Name env2))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env3) op: Equal rhs: {(DQ (${ VSub_Name RESULT))} ) ] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env3))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value three'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('Variable from first scope post pop'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (hasValue)} {(DQ (${ VSub_Name env3))} {($ VSub_DollarName '$key2')} ) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(1)} {($ VSub_QMark '$?')} {(DQ ('Variable from second scope after we popped it'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (new)}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env1) op: Equal rhs: {(DQ ($ VSub_DollarName '$RESULT'))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {($ VSub_DollarName '$env1')} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value1')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (pushScope)} {(DQ (${ VSub_Name env1))}) terminator: <Op_Semi ';'> ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:env2) op: Equal rhs: {(DQ ($ VSub_DollarName '$RESULT'))} ) ] ) ] ) (C {(environment) (Lit_Other ':') (Lit_Other ':') (setVariable)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key1')} {($ VSub_DollarName '$value2')} ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env1))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value one'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('setVariable, original env'))} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {(environment) (Lit_Other ':') (Lit_Other ':') (getValue)} {(DQ (${ VSub_Name env2))} {($ VSub_DollarName '$key1')} ) terminator: <Op_Semi ';'> ) (command.Sentence child: (C {(variable) (Lit_Other ':') (Lit_Other ':') (value)} {(DQ (${ VSub_Name RESULT))}) terminator: <Op_Semi ';'> ) (C {(assert) (Lit_Other ':') (Lit_Other ':') (equals)} {(DQ ('value two'))} {(DQ (${ VSub_Name RESULT))} {(DQ ('setVariable, new env'))} ) ] ) (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)})] ) ] ) ] )