aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2019-07-30 18:28:51 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2019-07-31 00:30:17 +0300
commitb72b5365afe319e576e254f12437aeff899eb03e (patch)
tree4274892785abd6c211d1c055a0c68d9900a7b448
parent148a3a83a647a21cc102cb01d82cbeeb0940adc8 (diff)
downloadmeson-b72b5365afe319e576e254f12437aeff899eb03e.zip
meson-b72b5365afe319e576e254f12437aeff899eb03e.tar.gz
meson-b72b5365afe319e576e254f12437aeff899eb03e.tar.bz2
mintro: Fix crash related to the sources kwarg (fixes #5741)
-rw-r--r--mesonbuild/ast/interpreter.py2
-rw-r--r--mesonbuild/ast/introspection.py8
-rw-r--r--test cases/unit/55 introspection/meson.build2
3 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py
index 0e490ab..13c717b 100644
--- a/mesonbuild/ast/interpreter.py
+++ b/mesonbuild/ast/interpreter.py
@@ -325,7 +325,7 @@ class AstInterpreter(interpreterbase.InterpreterBase):
for key, val in kwargs.items():
if isinstance(val, ElementaryNode):
flattend_kwargs[key] = val.value
- elif isinstance(val, (ArrayNode, ArgumentNode)):
+ elif isinstance(val, (ArrayNode, ArgumentNode, ArithmeticNode, MethodNode)):
flattend_kwargs[key] = self.flatten_args(val, include_unknown_args)
elif isinstance(val, (str, bool, int, float)) or include_unknown_args:
flattend_kwargs[key] = val
diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py
index 617b140..aeb0400 100644
--- a/mesonbuild/ast/introspection.py
+++ b/mesonbuild/ast/introspection.py
@@ -158,16 +158,20 @@ class IntrospectionInterpreter(AstInterpreter):
args = self.flatten_args(args)
if not args or not isinstance(args[0], str):
return
- kwargs = self.flatten_kwargs(kwargs, True)
name = args[0]
srcqueue = [node]
+
+ # Process the soruces BEFORE flattening the kwargs, to preserve the original nodes
if 'sources' in kwargs:
- srcqueue += kwargs['sources']
+ srcqueue += mesonlib.listify(kwargs['sources'])
+
+ kwargs = self.flatten_kwargs(kwargs, True)
source_nodes = []
while srcqueue:
curr = srcqueue.pop(0)
arg_node = None
+ assert(isinstance(curr, BaseNode))
if isinstance(curr, FunctionNode):
arg_node = curr.args
elif isinstance(curr, ArrayNode):
diff --git a/test cases/unit/55 introspection/meson.build b/test cases/unit/55 introspection/meson.build
index 3f013aa..7589f3f 100644
--- a/test cases/unit/55 introspection/meson.build
+++ b/test cases/unit/55 introspection/meson.build
@@ -25,7 +25,7 @@ var2 = 2.to_string()
var3 = 'test3'
t1 = executable('test' + var1, ['t1.cpp'], link_with: [sharedlib], install: true, build_by_default: get_option('test_opt2'))
-t2 = executable('test@0@'.format('@0@'.format(var2)), 't2.cpp', link_with: [staticlib])
+t2 = executable('test@0@'.format('@0@'.format(var2)), sources: ['t2.cpp'], link_with: [staticlib])
t3 = executable(var3, 't3.cpp', link_with: [sharedlib, staticlib], dependencies: [dep1])
### BEGIN: Test inspired by taisei: https://github.com/taisei-project/taisei/blob/master/meson.build#L293