aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreterbase.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-01-06 21:26:27 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-02-01 22:56:58 +0200
commit6cd7372e2693e17ed7f1a2f9af257b21424fa454 (patch)
tree56bf3c9045b98ee2356a42adecb3de56f0e02afe /mesonbuild/interpreterbase.py
parent36aca4cd3ca7631765ef32478e5c85d32db11fca (diff)
downloadmeson-6cd7372e2693e17ed7f1a2f9af257b21424fa454.zip
meson-6cd7372e2693e17ed7f1a2f9af257b21424fa454.tar.gz
meson-6cd7372e2693e17ed7f1a2f9af257b21424fa454.tar.bz2
Comparing objects of different type prints a warning. Closes #2870.
Diffstat (limited to 'mesonbuild/interpreterbase.py')
-rw-r--r--mesonbuild/interpreterbase.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index 35ca5c8..6618dc8 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -265,6 +265,12 @@ class InterpreterBase:
if not isinstance(node.elseblock, mparser.EmptyNode):
self.evaluate_codeblock(node.elseblock)
+ def validate_comparison_types(self, val1, val2):
+ if type(val1) != type(val2):
+ mlog.warning('''Trying to compare values of different types ({}, {}).
+The result of this is undefined and will become a hard error
+in a future Meson release.'''.format(type(val1).__name__, type(val2).__name__))
+
def evaluate_comparison(self, node):
val1 = self.evaluate_statement(node.left)
if is_disabler(val1):
@@ -272,15 +278,11 @@ class InterpreterBase:
val2 = self.evaluate_statement(node.right)
if is_disabler(val2):
return val2
+ self.validate_comparison_types(val1, val2)
if node.ctype == '==':
return val1 == val2
elif node.ctype == '!=':
return val1 != val2
- elif not isinstance(val1, type(val2)):
- raise InterpreterException(
- 'Values of different types ({}, {}) cannot be compared using {}.'.format(type(val1).__name__,
- type(val2).__name__,
- node.ctype))
elif not self.is_elementary_type(val1):
raise InterpreterException('{} can only be compared for equality.'.format(node.left.value))
elif not self.is_elementary_type(val2):