|
|
|
@ -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): |
|
|
|
|