aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-06-27 04:12:00 -0400
committerGitHub <noreply@github.com>2017-06-27 04:12:00 -0400
commitee8fcd5f6729c0481c18309d6ad2beb0fdc67792 (patch)
treefc41f24b74e86c987969c63ede992841aa772965
parent5dab5f160046c800a11b7da436ce974b5f7d0271 (diff)
parent506cc57cc83491e89d8242081f7f23a7150a80ba (diff)
downloadmeson-ee8fcd5f6729c0481c18309d6ad2beb0fdc67792.zip
meson-ee8fcd5f6729c0481c18309d6ad2beb0fdc67792.tar.gz
meson-ee8fcd5f6729c0481c18309d6ad2beb0fdc67792.tar.bz2
Merge pull request #1997 from mesonbuild/fixconditional
Fix conditional continuation bug
-rw-r--r--mesonbuild/mparser.py7
-rw-r--r--test cases/failing/57 or on new line/meson.build7
-rw-r--r--test cases/failing/57 or on new line/meson_options.txt1
3 files changed, 15 insertions, 0 deletions
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py
index 75985c3..8400a1a 100644
--- a/mesonbuild/mparser.py
+++ b/mesonbuild/mparser.py
@@ -475,12 +475,18 @@ class Parser:
def e2(self):
left = self.e3()
while self.accept('or'):
+ if isinstance(left, EmptyNode):
+ raise ParseException('Invalid or clause.',
+ self.getline(), left.lineno, left.colno)
left = OrNode(left, self.e3())
return left
def e3(self):
left = self.e4()
while self.accept('and'):
+ if isinstance(left, EmptyNode):
+ raise ParseException('Invalid and clause.',
+ self.getline(), left.lineno, left.colno)
left = AndNode(left, self.e4())
return left
@@ -633,6 +639,7 @@ class Parser:
def ifblock(self):
condition = self.statement()
clause = IfClauseNode(condition.lineno, condition.colno)
+ self.expect('eol')
block = self.codeblock()
clause.ifs.append(IfNode(clause.lineno, clause.colno, condition, block))
self.elseifblock(clause)
diff --git a/test cases/failing/57 or on new line/meson.build b/test cases/failing/57 or on new line/meson.build
new file mode 100644
index 0000000..12f2705
--- /dev/null
+++ b/test cases/failing/57 or on new line/meson.build
@@ -0,0 +1,7 @@
+project('silent_or', 'c')
+
+if get_option('foo') == 'true'
+ or get_option('foo') == 'auto'
+else
+ message('If this message is printed then something is wrong. The or above should give a syntax error.')
+endif
diff --git a/test cases/failing/57 or on new line/meson_options.txt b/test cases/failing/57 or on new line/meson_options.txt
new file mode 100644
index 0000000..3302cf4
--- /dev/null
+++ b/test cases/failing/57 or on new line/meson_options.txt
@@ -0,0 +1 @@
+option('foo', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto')