def testVarOps(self): ev = InitEvaluator() # initializes x=xxx and y=yyy unset_sub = word_part.BracedVarSub(token(Id.VSub_Name, 'unset')) part_vals = [] ev._EvalWordPart(unset_sub, part_vals) print(part_vals) set_sub = word_part.BracedVarSub(token(Id.VSub_Name, 'x')) part_vals = [] ev._EvalWordPart(set_sub, part_vals) print(part_vals) # Now add some ops part = word_part.Literal(token(Id.Lit_Chars, 'default')) arg_word = word.Compound([part]) test_op = suffix_op.Unary(Id.VTest_ColonHyphen, arg_word) unset_sub.suffix_op = test_op set_sub.suffix_op = test_op part_vals = [] ev._EvalWordPart(unset_sub, part_vals) print(part_vals) part_vals = [] ev._EvalWordPart(set_sub, part_vals) print(part_vals)
def _ParseVarOf(self): # type: () -> word_part__BracedVarSub """ VarOf = NAME Subscript? | NUMBER # no subscript allowed, none of these are arrays # ${@[1]} doesn't work, even though slicing does | VarSymbol """ self._Peek() name_token = self.cur_token self._Next(lex_mode_e.VS_2) self._Peek() # Check for [] if self.token_type == Id.VOp2_LBracket: bracket_op = self._ReadSubscript() else: bracket_op = None part = word_part.BracedVarSub(name_token) part.bracket_op = bracket_op return part