diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-07-30 18:28:51 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2019-07-31 00:30:17 +0300 |
commit | b72b5365afe319e576e254f12437aeff899eb03e (patch) | |
tree | 4274892785abd6c211d1c055a0c68d9900a7b448 | |
parent | 148a3a83a647a21cc102cb01d82cbeeb0940adc8 (diff) | |
download | meson-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.py | 2 | ||||
-rw-r--r-- | mesonbuild/ast/introspection.py | 8 | ||||
-rw-r--r-- | test cases/unit/55 introspection/meson.build | 2 |
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 |