aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2016-10-07 18:37:03 +0530
committerJussi Pakkanen <jpakkane@gmail.com>2016-10-16 18:22:17 +0300
commit1c876d3d2c1f4dbc8e24844415b6fb7ab4397660 (patch)
tree84251e3371b9e0c93f61044944d75336c6453dc1
parent18ce33fbfecde3c39a1f1dbc33b022d6ea330572 (diff)
downloadmeson-1c876d3d2c1f4dbc8e24844415b6fb7ab4397660.zip
meson-1c876d3d2c1f4dbc8e24844415b6fb7ab4397660.tar.gz
meson-1c876d3d2c1f4dbc8e24844415b6fb7ab4397660.tar.bz2
intrp: Don't do custom AST parsing for project()
Reuse the standard evaluate_codeblock() parsing since it does proper error handling, and also handles, for instance, lists in string arguments (flatten), etc. properly. We need to declare more variables in advance now, but that should be ok.
-rw-r--r--mesonbuild/interpreter.py22
1 files changed, 10 insertions, 12 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index cc85e77..b3bb1f2 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1129,6 +1129,12 @@ class Interpreter():
self.sanity_check_ast()
self.variables = {}
self.builtin = {}
+ self.generators = []
+ self.visited_subdirs = {}
+ self.global_args_frozen = False
+ self.subprojects = {}
+ self.subproject_stack = []
+ self.build_func_dict()
self.parse_project()
self.builtin['build_machine'] = BuildMachine(self.coredata.compilers)
if not self.build.environment.is_cross_build():
@@ -1145,13 +1151,7 @@ class Interpreter():
else:
self.builtin['target_machine'] = self.builtin['host_machine']
self.builtin['meson'] = MesonMain(build, self)
- self.build_func_dict()
self.build_def_files = [os.path.join(self.subdir, environment.build_filename)]
- self.generators = []
- self.visited_subdirs = {}
- self.global_args_frozen = False
- self.subprojects = {}
- self.subproject_stack = []
def build_func_dict(self):
self.funcs = {'project' : self.func_project,
@@ -1203,9 +1203,7 @@ class Interpreter():
Parses project() and initializes languages, compilers etc. Do this
early because we need this before we parse the rest of the AST.
"""
- project = self.ast.lines[0]
- args, kwargs = self.reduce_arguments(project.args)
- self.func_project(project, args, kwargs)
+ self.evaluate_codeblock(self.ast, end=1)
def module_method_callback(self, invalues):
unwrap_single = False
@@ -1282,7 +1280,7 @@ class Interpreter():
self.evaluate_codeblock(self.ast, start=1)
mlog.log('Build targets in project:', mlog.bold(str(len(self.build.targets))))
- def evaluate_codeblock(self, node, start=0):
+ def evaluate_codeblock(self, node, start=0, end=None):
if node is None:
return
if not isinstance(node, mparser.CodeBlockNode):
@@ -1290,8 +1288,8 @@ class Interpreter():
e.lineno = node.lineno
e.colno = node.colno
raise e
- statements = node.lines
- i = start
+ statements = node.lines[start:end]
+ i = 0
while i < len(statements):
cur = statements[i]
try: