ast/interpreter, rewriter: make flatten_args() recursive

This also enables using it instead of flatten().

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini authored and Paolo Bonzini committed 2026-09-03 14:06:54 +02:00
1 parent 879e644bb3
commit 48c5f14d99
3 files changed
+8 -6

No files matched your search

+4 -4
View File
@@ -30,8 +30,6 @@ from ..interpreterbase import (
InterpreterObject,
)
from ..interpreterbase.helpers import flatten
from ..interpreter import (
StringHolder,
BooleanHolder,
@@ -723,7 +721,7 @@ class AstInterpreter(InterpreterBase):
else:
raise TypeError
rtvals: T.List[T.Any] = flatten([self.node_to_runtime_value(sn) for sn in nodes])
rtvals: T.List[T.Any] = self.flatten_args(nodes)
return [src_to_abs(x) for x in rtvals]
def flatten_args(self, args: T.Sequence[TYPE_nvar]) -> T.List[TYPE_var]:
@@ -737,10 +735,12 @@ class AstInterpreter(InterpreterBase):
if resolved is not None:
if not isinstance(resolved, list):
resolved = [resolved]
flattened_args += resolved
flattened_args += self.flatten_args(resolved)
elif isinstance(i, (str, bool, int, float, dict, UnknownValue, IntrospectionFile,
IntrospectionBuildTarget, IntrospectionDependency)):
flattened_args += [i]
elif isinstance(i, list):
flattened_args += self.flatten_args(i)
else:
raise NotImplementedError(f'flatten_args is missing a case for {type(i)}')
return flattened_args
+1 -2
View File
@@ -12,7 +12,6 @@ from __future__ import annotations
from .ast import IntrospectionInterpreter, BUILD_TARGET_FUNCTIONS, AstConditionLevel, AstIDGenerator, AstIndentationGenerator, AstPrinter
from .ast.interpreter import IntrospectionBuildTarget, IntrospectionDependency, _symbol
from .interpreterbase import UnknownValue
from .interpreterbase.helpers import flatten
from mesonbuild.mesonlib import MesonException, pathname_sort_key, relpath, setup_vsenv
from . import mlog, environment
from functools import wraps
@@ -758,7 +757,7 @@ class Rewriter:
tgt_function.args.kwargs[extra_files_idnode] = new_extra_files_node
newfiles_relto = self.get_relto(target.node, chosen)
old_src_list: T.List[T.Any] = flatten([self.interpreter.node_to_runtime_value(sn) for sn in old])
old_src_list: T.List[T.Any] = self.interpreter.flatten_args(list(old))
if op == 'src_add':
name = 'Source'
@@ -8,3 +8,6 @@ project(
)
dep1 = dependency('zlib', required: false, default_options: {'foo': 'bar'})
# a dict can also be a positional argument; it must not be flattened away
conf = configuration_data({'foo': 'bar'})