diff options
| -rw-r--r-- | mesonbuild/mparser.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py index 0d1059ef3..174a6cc12 100644 --- a/mesonbuild/mparser.py +++ b/mesonbuild/mparser.py @@ -676,6 +676,8 @@ if T.TYPE_CHECKING: COMPARISONS = Literal['==', '!=', '<', '<=', '>=', '>', 'in', 'not in'] ARITH_OPERATORS = Literal['add', 'sub', 'mul', 'div', 'mod'] +ALL_STRINGS = frozenset({'string', 'fstring', 'multiline_string', 'multiline_fstring'}) + COMPARISON_MAP: T.Mapping[str, COMPARISONS] = { 'equal': '==', 'nequal': '!=', @@ -744,7 +746,7 @@ class Parser: return True return False - def accept_any(self, tids: T.Tuple[str, ...]) -> str: + def accept_any(self, tids: T.Union[T.AbstractSet[str], T.Mapping[str, object]]) -> str: tid = self.current.tid if tid in tids: self.getsym() @@ -827,10 +829,10 @@ class Parser: def e4(self) -> BaseNode: left = self.e5() - for nodename, operator_type in COMPARISON_MAP.items(): - if self.accept(nodename): - operator = self.create_node(SymbolNode, self.previous) - return self.create_node(ComparisonNode, operator_type, left, operator, self.e5()) + op = self.accept_any(COMPARISON_MAP) + if op: + operator = self.create_node(SymbolNode, self.previous) + return self.create_node(ComparisonNode, COMPARISON_MAP[op], left, operator, self.e5()) if self.accept('not'): ws = self.current_ws.copy() not_token = self.previous @@ -854,7 +856,7 @@ class Parser: } left = self.e6() while True: - op = self.accept_any(tuple(op_map.keys())) + op = self.accept_any(op_map) if op: operator = self.create_node(SymbolNode, self.previous) left = self.create_node(ArithmeticNode, op_map[op], left, operator, self.e6()) @@ -870,7 +872,7 @@ class Parser: } left = self.e7() while True: - op = self.accept_any(tuple(op_map.keys())) + op = self.accept_any(op_map) if op: operator = self.create_node(SymbolNode, self.previous) left = self.create_node(ArithmeticNode, op_map[op], left, operator, self.e7()) @@ -946,7 +948,7 @@ class Parser: return self.create_node(IdNode, t) if self.accept('number'): return self.create_node(NumberNode, t) - if self.accept_any(('string', 'fstring', 'multiline_string', 'multiline_fstring')): + if self.accept_any(ALL_STRINGS): return self.create_node(StringNode, t) return EmptyNode(self.current.lineno, self.current.colno, self.current.filename) |
