--- xonsh-0.14.4/xonsh/parsers/v310.orig.py 2024-01-18 17:58:44.463700213 +0200 +++ xonsh-0.14.4/xonsh/parsers/v310.py 2024-01-18 19:03:33.985074856 +0200 @@ -76,26 +76,24 @@ """ loc = self.get_line_cols(p, 1) - match list(p): - case [_, _, pattern, _, suite]: - p[0] = ast.match_case(pattern=pattern, body=suite, **loc) - case [_, _, pattern, _, guard, _, suite]: - p[0] = ast.match_case(pattern=pattern, body=suite, guard=guard, **loc) - case _: - raise AssertionError() + if list(p) == [_, _, pattern, _, suite]: + p[0] = ast.match_case(pattern=pattern, body=suite, **loc) + elif list(p) == [_, _, pattern, _, guard, _, suite]: + p[0] = ast.match_case(pattern=pattern, body=suite, guard=guard, **loc) + else: + raise AssertionError() def p_case_block_list_nonempty(self, p): """ case_block_list_nonempty : case_block | case_block case_block_list_nonempty """ - match list(p): - case [_, case_block]: - p[0] = [case_block] - case [_, case_block, case_block_list_nonempty]: - p[0] = [case_block] + case_block_list_nonempty - case _: - raise AssertionError() + if list(p) == [_, case_block]: + p[0] = [case_block] + elif list(p) == [_, case_block, case_block_list_nonempty]: + p[0] = [case_block] + case_block_list_nonempty + else: + raise AssertionError() # subject expression def p_subject_expr_single_value(self, p): @@ -103,33 +101,31 @@ subject_expr : test_or_star_expr comma_opt """ - match list(p): - case [_, test_or_star_expr, None]: - # single value - p[0] = test_or_star_expr - case [_, test_or_star_expr, ","]: - # tuple with one element - p[0] = ast.Tuple( - elts=[test_or_star_expr], ctx=ast.Load(), **self.get_line_cols(p, 1) - ) - case _: - raise AssertionError() + if list(p) == [_, test_or_star_expr, None]: + # single value + p[0] = test_or_star_expr + elif list(p) == [_, test_or_star_expr, ","]: + # tuple with one element + p[0] = ast.Tuple( + elts=[test_or_star_expr], ctx=ast.Load(), **self.get_line_cols(p, 1) + ) + else: + raise AssertionError() def p_subject_expr_multiple_values(self, p): """ subject_expr : test_or_star_expr comma_test_or_star_expr_list comma_opt """ - match list(p): - case [_, test_or_star_expr, comma_test_or_star_expr_list, "," | None]: - # tuple with more than one element - p[0] = ast.Tuple( - elts=[test_or_star_expr] + comma_test_or_star_expr_list, - ctx=ast.Load(), - **self.get_line_cols(p, 1), - ) - case _: - raise AssertionError() + if list(p) == [_, test_or_star_expr, comma_test_or_star_expr_list, "," | None]: + # tuple with more than one element + p[0] = ast.Tuple( + elts=[test_or_star_expr] + comma_test_or_star_expr_list, + ctx=ast.Load(), + **self.get_line_cols(p, 1), + ) + else: + raise AssertionError() # patterns def p_closed_pattern(self, p): @@ -167,22 +163,20 @@ _, or_pattern_list = p - match or_pattern_list: - case [single_value]: - p[0] = single_value - case multiple_values: - p[0] = ast.MatchOr(patterns=multiple_values, **self.get_line_cols(p, 1)) + if or_pattern_list == [single_value]: + p[0] = single_value + elif or_pattern_list == multiple_values: + p[0] = ast.MatchOr(patterns=multiple_values, **self.get_line_cols(p, 1)) def p_or_pattern_list(self, p): """ or_pattern_list : closed_pattern | closed_pattern PIPE or_pattern_list """ - match list(p): - case [_, closed_pattern]: - p[0] = [closed_pattern] - case [_, closed_pattern, "|", or_pattern_list]: - p[0] = [closed_pattern] + or_pattern_list + if list(p) == [_, closed_pattern]: + p[0] = [closed_pattern] + elif list(p) == [_, closed_pattern, "|", or_pattern_list]: + p[0] = [closed_pattern] + or_pattern_list # group pattern def p_group_pattern(self, p): @@ -198,11 +192,10 @@ literal_pattern : literal_expr """ - match p[1]: - case None | True | False: - p[0] = ast.MatchSingleton(value=p[1], **self.get_line_cols(p, 1)) - case _: - p[0] = ast.MatchValue(value=p[1], **self.get_line_cols(p, 1)) + if p[1] == None | True | False: + p[0] = ast.MatchSingleton(value=p[1], **self.get_line_cols(p, 1)) + else: + p[0] = ast.MatchValue(value=p[1], **self.get_line_cols(p, 1)) def p_literal_expr_number_or_string_literal_list(self, p): """ @@ -212,11 +205,10 @@ p[0] = p[1] - match p[1]: - case ast.JoinedStr(): - raise AssertionError("patterns may not match formatted string literals") - # TODO: raise SyntaxError instead - # (doing so currently somehow causes an IndexError in tools.py:get_logical_line) + if p[1] == ast.JoinedStr(): + raise AssertionError("patterns may not match formatted string literals") + # TODO: raise SyntaxError instead + # (doing so currently somehow causes an IndexError in tools.py:get_logical_line) # TODO: f"hi" "hi" does not parse in xonsh @@ -227,15 +219,14 @@ | false_tok """ - match p[1].value: - case "None": - value = None - case "True": - value = True - case "False": - value = False - case _: - raise AssertionError() + if p[1].value == "None": + value = None + elif "True": + value = True + elif "False": + value = False + else: + raise AssertionError() p[0] = value @@ -253,19 +244,18 @@ build_complex = False loc = self.get_line_cols(p, 1) - match list(p): - case [_, x]: - p[0] = x - case [_, "-", x]: - p[0] = ast.UnaryOp(op=ast.USub(), operand=x, **loc) - case [_, left, ("+" | "-") as op_char, right]: - build_complex = True - negate_left_side = False - case [_, "-", left, ("+" | "-") as op_char, right]: - build_complex = True - negate_left_side = True - case _: - raise AssertionError() + if list(p) == [_, x]: + p[0] = x + elif list(p) == [_, "-", x]: + p[0] = ast.UnaryOp(op=ast.USub(), operand=x, **loc) + elif list(p) == [_, left, ("+", op_char) | ("-", op_char), right]: + build_complex = True + negate_left_side = False + elif list(p) == [_, "-", left, ("+", op_char) | ("-", op_char), right]: + build_complex = True + negate_left_side = True + else: + raise AssertionError() if build_complex: # TODO raise syntax error instead (see reason in p_literal_expr_number_or_string_literal_list) @@ -322,17 +312,16 @@ | LPAREN RPAREN """ - match list(p): - case [_, _, ast.MatchSequence() as seq, _]: - p[0] = seq - case [_, _, single_item, _]: - p[0] = ast.MatchSequence( - patterns=[single_item], **self.get_line_cols(p, 1) - ) - case [_, _, _]: - p[0] = ast.MatchSequence(patterns=[], **self.get_line_cols(p, 1)) - case _: - raise AssertionError() + if list(p) == [_, _, (ast.MatchSequence(), seq), _]: + p[0] = seq + elif list(p) == [_, _, single_item, _]: + p[0] = ast.MatchSequence( + patterns=[single_item], **self.get_line_cols(p, 1) + ) + elif list(p) == [_, _, _]: + p[0] = ast.MatchSequence(patterns=[], **self.get_line_cols(p, 1)) + else: + raise AssertionError() def p_maybe_sequence_pattern(self, p): """ @@ -340,30 +329,24 @@ | maybe_star_pattern COMMA maybe_sequence_pattern """ - match list(p): - case [_, maybe_star_pattern, ","]: - p[0] = ast.MatchSequence( - patterns=[maybe_star_pattern], **self.get_line_cols(p, 1) - ) - case [_, maybe_star_pattern, None]: - p[0] = maybe_star_pattern - case [ - _, - maybe_star_pattern, - ",", - ast.MatchSequence(patterns=list(maybe_sequence_pattern)), - ]: - p[0] = ast.MatchSequence( - patterns=[maybe_star_pattern] + maybe_sequence_pattern, - **self.get_line_cols(p, 1), - ) - case [_, maybe_star_pattern, ",", maybe_sequence_pattern]: - p[0] = ast.MatchSequence( - patterns=[maybe_star_pattern, maybe_sequence_pattern], - **self.get_line_cols(p, 1), - ) - case _: - raise AssertionError() + if list(p) == [_, maybe_star_pattern, ","]: + p[0] = ast.MatchSequence( + patterns=[maybe_star_pattern], **self.get_line_cols(p, 1) + ) + elif list(p) == [_, maybe_star_pattern, None]: + p[0] = maybe_star_pattern + elif list(p) == [_, maybe_star_pattern, ",", ast.MatchSequence(patterns=list(maybe_sequence_pattern)),]: + p[0] = ast.MatchSequence( + patterns=[maybe_star_pattern] + maybe_sequence_pattern, + **self.get_line_cols(p, 1), + ) + elif list(p) == [_, maybe_star_pattern, ",", maybe_sequence_pattern]: + p[0] = ast.MatchSequence( + patterns=[maybe_star_pattern, maybe_sequence_pattern], + **self.get_line_cols(p, 1), + ) + else: + raise AssertionError() def p_open_sequence_pattern(self, p): """ @@ -429,19 +412,18 @@ | name_str EQUALS pattern COMMA class_pattern_keyword_part """ - match list(p): - case [_]: - p[0] = ([], []) - case [_, pattern]: - p[0] = ([pattern], []) - case [_, pattern, ",", (names, patterns)]: - p[0] = ([pattern] + names, patterns) - case [_, name, "=", pattern]: - p[0] = ([], [(name, pattern)]) - case [_, name, "=", pattern, ",", class_pattern_keyword_part]: - p[0] = ([], [(name, pattern)] + class_pattern_keyword_part) - case _: - raise AssertionError() + if list(p) == [_]: + p[0] = ([], []) + elif list(p) == [_, pattern]: + p[0] = ([pattern], []) + elif list(p) == [_, pattern, ",", (names, patterns)]: + p[0] = ([pattern] + names, patterns) + elif list(p) == [_, name, "=", pattern]: + p[0] = ([], [(name, pattern)]) + elif list(p) == [_, name, "=", pattern, ",", class_pattern_keyword_part]: + p[0] = ([], [(name, pattern)] + class_pattern_keyword_part) + else: + raise AssertionError() # returns ( [pattern], [ (name, pattern) ] ) def p_class_pattern_positional_part_skip(self, p): @@ -457,13 +439,12 @@ | pattern COMMA class_pattern_positional_part """ - match list(p): - case [_, pattern]: - p[0] = ([pattern], []) - case [_, pattern, ",", (names, patterns)]: - p[0] = ([pattern] + names, patterns) - case _: - raise AssertionError() + if list(p) == [_, pattern]: + p[0] = ([pattern], []) + elif list(p) == [_, pattern, ",", (names, patterns)]: + p[0] = ([pattern] + names, patterns) + else: + raise AssertionError() # returns [ (name, pattern) ] def p_class_pattern_keyword_part(self, p): @@ -474,15 +455,14 @@ | name_str EQUALS pattern COMMA class_pattern_keyword_part """ - match list(p): - case [_] | [_, ","]: - p[0] = [] - case [_, name, "=", pattern]: - p[0] = [(name, pattern)] - case [_, name, "=", pattern, ",", class_pattern_keyword_part]: - p[0] = [(name, pattern)] + class_pattern_keyword_part - case _: - raise AssertionError() + if list(p) == [_] | [_, ","]: + p[0] = [] + elif list(p) == [_, name, "=", pattern]: + p[0] = [(name, pattern)] + elif list(p) == [_, name, "=", pattern, ",", class_pattern_keyword_part]: + p[0] = [(name, pattern)] + class_pattern_keyword_part + else: + raise AssertionError() # Mapping pattern @@ -505,43 +485,40 @@ | key_value_pattern COMMA mapping_pattern_args_item_part | double_star_pattern """ - match list(p): - case [_]: - p[0] = [], [], None - case [_, (key, value)]: - p[0] = [key], [value], None - case [_, (key, value), ",", (keys, values, rest)]: - p[0] = [key] + keys, [value] + values, rest - case [_, str(double_star_pattern)]: - p[0] = [], [], double_star_pattern - case _: - raise AssertionError() + if list(p) == [_]: + p[0] = [], [], None + elif list(p) == [_, (key, value)]: + p[0] = [key], [value], None + elif list(p) == [_, (key, value), ",", (keys, values, rest)]: + p[0] = [key] + keys, [value] + values, rest + elif list(p) == [_, str(double_star_pattern)]: + p[0] = [], [], double_star_pattern + else: + raise AssertionError() def p_mapping_pattern_args_item_part_skip(self, p): """ mapping_pattern_args_item_part : | double_star_pattern """ - match list(p): - case [_]: - p[0] = [], [], None - case [_, rest]: - p[0] = [], [], rest - case _: - raise AssertionError() + if list(p) == [_]: + p[0] = [], [], None + elif list(p) == [_, rest]: + p[0] = [], [], rest + else: + raise AssertionError() def p_mapping_pattern_args_item_part(self, p): """ mapping_pattern_args_item_part : key_value_pattern | key_value_pattern COMMA mapping_pattern_args_item_part """ - match list(p): - case [_, (key, value)]: - p[0] = [key], [value], None - case [_, (key, value), ",", (keys, values, rest)]: - p[0] = [key] + keys, [value] + values, rest - case _: - raise AssertionError() + if list(p) == [_, (key, value)]: + p[0] = [key], [value], None + elif list(p) == [_, (key, value), ",", (keys, values, rest)]: + p[0] = [key] + keys, [value] + values, rest + else: + raise AssertionError() def p_double_star_pattern(self, p): """