summaryrefslogtreecommitdiff
path: root/mesonbuild/rewriter.py
diff options
context:
space:
mode:
authorVolker Weißmann <volker.weissmann@gmx.de>2025-03-14 20:54:46 +0100
committerDylan Baker <dylan@pnwbakers.com>2025-05-29 09:20:27 -0700
commite8f27f5912f1266adb0390fbf54aa3b14f9bf7da (patch)
treeea6e587b2629b6739899c0e5950bf3046c7ae1f1 /mesonbuild/rewriter.py
parentb80e7030c766f0561adaa90776f90745bb007d31 (diff)
downloadmeson-e8f27f5912f1266adb0390fbf54aa3b14f9bf7da.tar.gz
rewriter: Replace assignments with cur_assignments
Replace the variable tracking of `AstInterpreter.assignments` with a slightly better variable tracking called `AstInterpreter.cur_assignments`. We now have a class `UnknownValue` for more explicit handling of situations that are too complex/impossible.
Diffstat (limited to 'mesonbuild/rewriter.py')
-rw-r--r--mesonbuild/rewriter.py19
1 files changed, 9 insertions, 10 deletions
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index fff3f9cfc..3360f6fc9 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -10,12 +10,12 @@
from __future__ import annotations
from .ast import IntrospectionInterpreter, BUILD_TARGET_FUNCTIONS, AstConditionLevel, AstIDGenerator, AstIndentationGenerator, AstPrinter
-from .ast.interpreter import IntrospectionBuildTarget, IntrospectionDependency
+from .ast.interpreter import IntrospectionBuildTarget, IntrospectionDependency, _symbol
from .interpreterbase import TV_func
from mesonbuild.mesonlib import MesonException, setup_vsenv
from . import mlog, environment
from functools import wraps
-from .mparser import Token, ArrayNode, ArgumentNode, AssignmentNode, BaseNode, StringNode, BooleanNode, ElementaryNode, IdNode, FunctionNode, SymbolNode
+from .mparser import Token, ArrayNode, ArgumentNode, AssignmentNode, BaseNode, StringNode, BooleanNode, ElementaryNode, IdNode, FunctionNode
import json, os, re, sys
import typing as T
@@ -97,9 +97,6 @@ class RequiredKeys:
return T.cast('TV_func', wrapped)
-def _symbol(val: str) -> SymbolNode:
- return SymbolNode(Token('', '', 0, 0, 0, (0, 0), val))
-
class MTypeBase:
node: BaseNode
@@ -434,8 +431,8 @@ class Rewriter:
# Check the assignments
tgt = None
- if target in self.interpreter.assignments:
- node = self.interpreter.assignments[target]
+ if target in self.interpreter.cur_assignments:
+ node = self.interpreter.get_cur_value(target)
if isinstance(node, FunctionNode):
if node.func_name.value in {'executable', 'jar', 'library', 'shared_library', 'shared_module', 'static_library', 'both_libraries'}:
tgt = self.interpreter.assign_vals[target]
@@ -455,8 +452,8 @@ class Rewriter:
return dep
# Check the assignments
- if dependency in self.interpreter.assignments:
- node = self.interpreter.assignments[dependency]
+ if dependency in self.interpreter.cur_assignments:
+ node = self.interpreter.get_cur_value(dependency)
if isinstance(node, FunctionNode):
if node.func_name.value == 'dependency':
name = self.interpreter.flatten_args(node.args)[0]
@@ -759,7 +756,9 @@ class Rewriter:
self.modified_nodes += [tgt_function]
target.extra_files = [node]
if isinstance(node, IdNode):
- node = self.interpreter.assignments[node.value]
+ cv = self.interpreter.get_cur_value(node.value)
+ assert isinstance(cv, BaseNode)
+ node = cv
target.extra_files = [node]
if not isinstance(node, ArrayNode):
mlog.error('Target', mlog.bold(cmd['target']), 'extra_files argument must be a list', *self.on_error())