diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2019-04-02 23:10:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-02 23:10:16 +0300 |
commit | b1aa54bb2911ecf0f26391a9b1e0a6cd308913b5 (patch) | |
tree | 6ce41b5ac3e03f3cda19ee6dda5669789a5fcedd /mesonbuild/ast | |
parent | ff477d2b3f5ddc582140e6d357e52f1cb1da74ce (diff) | |
parent | 6da0df95c11fac6037d421ae8cf80af146d321da (diff) | |
download | meson-b1aa54bb2911ecf0f26391a9b1e0a6cd308913b5.zip meson-b1aa54bb2911ecf0f26391a9b1e0a6cd308913b5.tar.gz meson-b1aa54bb2911ecf0f26391a9b1e0a6cd308913b5.tar.bz2 |
Merge pull request #5197 from mensinda/introDepBugFix
mintro: Fix crash when required is a function (closes #5177)
Diffstat (limited to 'mesonbuild/ast')
-rw-r--r-- | mesonbuild/ast/interpreter.py | 24 | ||||
-rw-r--r-- | mesonbuild/ast/introspection.py | 6 |
2 files changed, 29 insertions, 1 deletions
diff --git a/mesonbuild/ast/interpreter.py b/mesonbuild/ast/interpreter.py index 01277f0..f1602c0 100644 --- a/mesonbuild/ast/interpreter.py +++ b/mesonbuild/ast/interpreter.py @@ -153,8 +153,20 @@ class AstInterpreter(interpreterbase.InterpreterBase): return True def evaluate_arithmeticstatement(self, cur): + self.evaluate_statement(cur.left) + self.evaluate_statement(cur.right) return 0 + def evaluate_uminusstatement(self, cur): + self.evaluate_statement(cur.value) + return 0 + + def evaluate_ternary(self, node): + assert(isinstance(node, mparser.TernaryNode)) + self.evaluate_statement(node.condition) + self.evaluate_statement(node.trueblock) + self.evaluate_statement(node.falseblock) + def evaluate_plusassign(self, node): assert(isinstance(node, mparser.PlusAssignmentNode)) if node.var_name not in self.assignments: @@ -177,6 +189,18 @@ class AstInterpreter(interpreterbase.InterpreterBase): return args.arguments, args.kwargs def evaluate_comparison(self, node): + self.evaluate_statement(node.left) + self.evaluate_statement(node.right) + return False + + def evaluate_andstatement(self, cur): + self.evaluate_statement(cur.left) + self.evaluate_statement(cur.right) + return False + + def evaluate_orstatement(self, cur): + self.evaluate_statement(cur.left) + self.evaluate_statement(cur.right) return False def evaluate_foreach(self, node): diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index 5745d29..5a12e29 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -20,7 +20,7 @@ from .. import compilers, environment, mesonlib, optinterpreter from .. import coredata as cdata from ..interpreterbase import InvalidArguments from ..build import Executable, Jar, SharedLibrary, SharedModule, StaticLibrary -from ..mparser import ArithmeticNode, ArrayNode, ElementaryNode, IdNode, FunctionNode, StringNode +from ..mparser import BaseNode, ArithmeticNode, ArrayNode, ElementaryNode, IdNode, FunctionNode, StringNode import os build_target_functions = ['executable', 'jar', 'library', 'shared_library', 'shared_module', 'static_library', 'both_libraries'] @@ -142,6 +142,8 @@ class IntrospectionInterpreter(AstInterpreter): condition_level = node.condition_level if hasattr(node, 'condition_level') else 0 if isinstance(required, ElementaryNode): required = required.value + if not isinstance(required, bool): + required = False self.dependencies += [{ 'name': name, 'required': required, @@ -189,6 +191,8 @@ class IntrospectionInterpreter(AstInterpreter): # Make sure nothing can crash when creating the build class kwargs_reduced = {k: v for k, v in kwargs.items() if k in targetclass.known_kwargs and k in ['install', 'build_by_default', 'build_always']} + kwargs_reduced = {k: v.value if isinstance(v, ElementaryNode) else v for k, v in kwargs_reduced.items()} + kwargs_reduced = {k: v for k, v in kwargs_reduced.items() if not isinstance(v, BaseNode)} is_cross = False objects = [] empty_sources = [] # Passing the unresolved sources list causes errors |