diff options
| author | Volker Weißmann <volker.weissmann@gmx.de> | 2025-03-16 17:11:59 +0100 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-05-29 09:20:27 -0700 |
| commit | 398fa02343217980043311962ccc12111688eef7 (patch) | |
| tree | 27e06bf1486faceb1fd2f8d20aed52164cb24da5 | |
| parent | e8f27f5912f1266adb0390fbf54aa3b14f9bf7da (diff) | |
| download | meson-398fa02343217980043311962ccc12111688eef7.tar.gz | |
rewriter: Refactoring of assignment tracking
Replace `AstInterpreter.reverse_assignment` with
`AstInterpreter.all_assignment_nodes`.
This does not give us an immediate advantage but
will be useful in future commits.
| -rw-r--r-- | mesonbuild/ast/interpreter.py | 8 | ||||
| -rw-r--r-- | mesonbuild/rewriter.py | 10 |
2 files changed, 8 insertions, 10 deletions
diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index 8dc5eb31f..30847b1a0 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -105,8 +105,8 @@ class AstInterpreter(InterpreterBase): self.visitors = visitors if visitors is not None else [] self.nesting: T.List[int] = [] self.cur_assignments: T.DefaultDict[str, T.List[T.Tuple[T.List[int], T.Union[BaseNode, UnknownValue]]]] = defaultdict(list) + self.all_assignment_nodes: T.DefaultDict[str, T.List[AssignmentNode]] = defaultdict(list) self.assign_vals: T.Dict[str, T.Any] = {} - self.reverse_assignment: T.Dict[str, BaseNode] = {} self.funcs.update({'project': self.func_do_nothing, 'test': self.func_do_nothing, 'benchmark': self.func_do_nothing, @@ -392,8 +392,7 @@ class AstInterpreter(InterpreterBase): def assignment(self, node: AssignmentNode) -> None: assert isinstance(node, AssignmentNode) self.cur_assignments[node.var_name.value].append((self.nesting.copy(), node.value)) - if node.value.ast_id: - self.reverse_assignment[node.value.ast_id] = node + self.all_assignment_nodes[node.var_name.value].append(node) self.assign_vals[node.var_name.value] = self.evaluate_statement(node.value) # Evaluate the value just in case def evaluate_plusassign(self, node: PlusAssignmentNode) -> None: @@ -406,9 +405,8 @@ class AstInterpreter(InterpreterBase): else: newval = mparser.ArithmeticNode(operation='add', left=lhs, operator=_symbol('+'), right=node.value) self.cur_assignments[node.var_name.value].append((self.nesting.copy(), newval)) + self.all_assignment_nodes[node.var_name.value].append(node) - if node.value.ast_id: - self.reverse_assignment[node.value.ast_id] = node self.assign_vals[node.var_name.value] = self.evaluate_statement(node.value) def resolve_node(self, node: BaseNode, include_unknown_args: bool = False, id_loop_detect: T.Optional[T.List[str]] = None) -> T.Optional[T.Any]: diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py index 3360f6fc9..c8f6c864a 100644 --- a/mesonbuild/rewriter.py +++ b/mesonbuild/rewriter.py @@ -618,11 +618,11 @@ class Rewriter: if num_changed > 0 and node not in self.modified_nodes: self.modified_nodes += [node] - def find_assignment_node(self, node: BaseNode) -> AssignmentNode: - if node.ast_id and node.ast_id in self.interpreter.reverse_assignment: - ret = self.interpreter.reverse_assignment[node.ast_id] - assert isinstance(ret, AssignmentNode) - return ret + def find_assignment_node(self, node: BaseNode) -> T.Optional[AssignmentNode]: + for k, v in self.interpreter.all_assignment_nodes.items(): + for ass in v: + if ass.value == node: + return ass return None @RequiredKeys(rewriter_keys['target']) |
