aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2018-06-06 14:23:17 -0400
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-06-07 12:56:27 +0000
commit2d3bfa0778d3f7068585c82e991a25c0ce79fbac (patch)
tree8e3979d5c1cb7893a90f3bd929d4d1a58d9506cb
parente581a8937f290fada2eaecc95c978aa6db8e3a2f (diff)
downloadmeson-2d3bfa0778d3f7068585c82e991a25c0ce79fbac.zip
meson-2d3bfa0778d3f7068585c82e991a25c0ce79fbac.tar.gz
meson-2d3bfa0778d3f7068585c82e991a25c0ce79fbac.tar.bz2
Interpreter: Fix subdir_done() to exit from inside if/foreach blocks
Closes: #3700.
-rw-r--r--mesonbuild/interpreter.py5
-rw-r--r--mesonbuild/interpreterbase.py7
-rw-r--r--test cases/common/188 subdir_done/meson.build4
3 files changed, 11 insertions, 5 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 86c55e4..a58e57d 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -3128,7 +3128,10 @@ root and issuing %s.
except mesonlib.MesonException as me:
me.file = buildfilename
raise me
- self.evaluate_codeblock(codeblock)
+ try:
+ self.evaluate_codeblock(codeblock)
+ except SubdirDoneRequest:
+ pass
self.subdir = prev_subdir
def _get_kwarg_install_mode(self, kwargs):
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index a908732..1c61345 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -326,7 +326,10 @@ class InterpreterBase:
def run(self):
# Evaluate everything after the first line, which is project() because
# we already parsed that in self.parse_project()
- self.evaluate_codeblock(self.ast, start=1)
+ try:
+ self.evaluate_codeblock(self.ast, start=1)
+ except SubdirDoneRequest:
+ pass
def evaluate_codeblock(self, node, start=0, end=None):
if node is None:
@@ -343,8 +346,6 @@ class InterpreterBase:
try:
self.current_lineno = cur.lineno
self.evaluate_statement(cur)
- except SubdirDoneRequest:
- break
except Exception as e:
if not(hasattr(e, 'lineno')):
e.lineno = cur.lineno
diff --git a/test cases/common/188 subdir_done/meson.build b/test cases/common/188 subdir_done/meson.build
index 5692f3a..457e613 100644
--- a/test cases/common/188 subdir_done/meson.build
+++ b/test cases/common/188 subdir_done/meson.build
@@ -3,7 +3,9 @@
project('example exit', 'cpp')
-subdir_done()
+if true
+ subdir_done()
+endif
executable('main', 'main.cpp')
error('Unreachable')