aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2019-10-10 00:47:17 +0300
committerGitHub <noreply@github.com>2019-10-10 00:47:17 +0300
commit34ea71239db48951573180a41326d85890a6bb2e (patch)
tree93e0d973bda562e7b1fb7652e70bfdbed21e6bfd
parentb8fbbf596473ea3a2a2d7a6cf8ec7ee68527184c (diff)
parent9855b2d3c58800f485355229102212eaebf6645a (diff)
downloadmeson-34ea71239db48951573180a41326d85890a6bb2e.zip
meson-34ea71239db48951573180a41326d85890a6bb2e.tar.gz
meson-34ea71239db48951573180a41326d85890a6bb2e.tar.bz2
Merge pull request #6011 from xclaesse/not-disabler
Fix `if not disabler()` case
-rw-r--r--mesonbuild/interpreterbase.py6
-rw-r--r--test cases/common/163 disabler/meson.build44
2 files changed, 46 insertions, 4 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index 70751c1..3e09310 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -500,6 +500,8 @@ class InterpreterBase:
def evaluate_notstatement(self, cur):
v = self.evaluate_statement(cur.value)
+ if is_disabler(v):
+ return v
if not isinstance(v, bool):
raise InterpreterException('Argument to "not" is not a boolean.')
return not v
@@ -680,8 +682,6 @@ The result of this is undefined and will become a hard error in a future Meson r
if len(node.varnames) != 1:
raise InvalidArguments('Foreach on array does not unpack')
varname = node.varnames[0].value
- if is_disabler(items):
- return items
for item in items:
self.set_variable(varname, item)
try:
@@ -693,8 +693,6 @@ The result of this is undefined and will become a hard error in a future Meson r
elif isinstance(items, dict):
if len(node.varnames) != 2:
raise InvalidArguments('Foreach on dict unpacks key and value')
- if is_disabler(items):
- return items
for key, value in items.items():
self.set_variable(node.varnames[0].value, key)
self.set_variable(node.varnames[1].value, value)
diff --git a/test cases/common/163 disabler/meson.build b/test cases/common/163 disabler/meson.build
index 5eb24ba..1f0580c 100644
--- a/test cases/common/163 disabler/meson.build
+++ b/test cases/common/163 disabler/meson.build
@@ -76,3 +76,47 @@ else
has_not_changed = true
endif
assert(has_not_changed, 'App has changed.')
+
+if_is_disabled = true
+if disabler()
+ if_is_disabled = false
+else
+ if_is_disabled = false
+endif
+assert(if_is_disabled, 'Disabler in "if condition" must skip both blocks')
+
+if not disabler()
+ if_is_disabled = false
+else
+ if_is_disabled = false
+endif
+assert(if_is_disabled, 'Disabler in "if not condition" must skip both blocks')
+
+if disabler() == 1
+ if_is_disabled = false
+else
+ if_is_disabled = false
+endif
+assert(if_is_disabled, 'Disabler in "if a==b" must skip both blocks')
+
+loops = 0
+disablers = 0
+foreach i : [true, disabler(), true]
+ loops += 1
+ if is_disabler(i)
+ disablers += 1
+ endif
+endforeach
+assert(loops == 3, 'Disabler in foreach array')
+assert(disablers == 1, 'Disabler in foreach array')
+
+loops = 0
+disablers = 0
+foreach k, i : {'a': true, 'b': disabler(), 'c': true}
+ loops += 1
+ if is_disabler(i)
+ disablers += 1
+ endif
+endforeach
+assert(loops == 3, 'Disabler in foreach dict')
+assert(disablers == 1, 'Disabler in foreach dict')