diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2017-05-17 21:39:14 -0400 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2017-05-17 21:48:04 -0400 |
commit | b36513a5b68fa4e34fbbf827a8704e0dc9d25f54 (patch) | |
tree | 4bbb11cc45381bb9d6f8c8d5686520a685a2495b | |
parent | 30645ed54b4e08611ae4883137d774a4c02b0278 (diff) | |
download | meson-b36513a5b68fa4e34fbbf827a8704e0dc9d25f54.zip meson-b36513a5b68fa4e34fbbf827a8704e0dc9d25f54.tar.gz meson-b36513a5b68fa4e34fbbf827a8704e0dc9d25f54.tar.bz2 |
Only allow equality comparisons for non-elementary types.
-rw-r--r-- | mesonbuild/interpreterbase.py | 4 | ||||
-rw-r--r-- | test cases/common/19 comparison/meson.build | 95 | ||||
-rw-r--r-- | test cases/failing/51 executable comparison/meson.build | 6 | ||||
-rw-r--r-- | test cases/failing/51 executable comparison/prog.c | 1 |
4 files changed, 106 insertions, 0 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index 2fe21d9..8b951b3 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -221,6 +221,10 @@ class InterpreterBase: return val1 == val2 elif node.ctype == '!=': return val1 != val2 + 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): + raise InterpreterException('{} can only be compared for equality.'.format(node.right.value)) elif node.ctype == '<': return val1 < val2 elif node.ctype == '<=': diff --git a/test cases/common/19 comparison/meson.build b/test cases/common/19 comparison/meson.build index 290c7b4..c4cff9f 100644 --- a/test cases/common/19 comparison/meson.build +++ b/test cases/common/19 comparison/meson.build @@ -1,5 +1,7 @@ project('comparison', 'c') +# Compare equality of strings + var1 = 'foo' var2 = 'bar' @@ -31,3 +33,96 @@ test('equalfalse', exe1) test('equaltrue', exe2) test('nequaltrue', exe3) test('nequalfalse', exe4) + +# Non-equality comparisons + +var3 = 3 +var4 = 4 + +if var3 < var4 + exe5 = executable('prog5', 'prog.c') +else + exe5 = executable('broken', 'broken.c') +endif + +if var3 < var3 + exe6 = executable('broken', 'broken.c') +else + exe6 = executable('prog6', 'prog.c') +endif + +if var4 > var3 + exe7 = executable('prog7', 'prog.c') +else + exe7 = executable('broken', 'broken.c') +endif + +if var3 > var3 + exe8 = executable('broken', 'broken.c') +else + exe8 = executable('prog8', 'prog.c') +endif + +if var4 <= var3 + exe9 = executable('broken', 'broken.c') +else + exe9 = executable('prog9', 'prog.c') +endif + +if var3 <= var3 + exe10 = executable('prog10', 'prog.c') +else + exe10 = executable('broken', 'broken.c') +endif + +if var3 >= var4 + exe11 = executable('broken', 'broken.c') +else + exe11 = executable('prog11', 'prog.c') +endif + +if var3 >= var3 + exe12 = executable('prog12', 'prog.c') +else + exe12 = executable('broken', 'broken.c') +endif + +test('lttrue', exe5) +test('ltfalse', exe6) +test('gttrue', exe7) +test('gtfalse', exe8) +test('lefalse', exe9) +test('letrue', exe10) +test('gefalse', exe11) +test('getrue', exe12) + +# Non-elementary type comparisons + +if exe1 == exe2 + exe13 = executable('broken', 'broken.c') +else + exe13 = executable('prog13', 'prog.c') +endif + +if exe1 == exe1 + exe14 = executable('prog14', 'prog.c') +else + exe14 = executable('broken', 'broken.c') +endif + +if exe1 != exe2 + exe15 = executable('prog15', 'prog.c') +else + exe15 = executable('broken', 'broken.c') +endif + +if exe1 != exe1 + exe16 = executable('broken', 'broken.c') +else + exe16 = executable('prog16', 'prog.c') +endif + +test('equalfalse', exe13) +test('equaltrue', exe14) +test('nequaltrue', exe15) +test('nequalfalse', exe16) diff --git a/test cases/failing/51 executable comparison/meson.build b/test cases/failing/51 executable comparison/meson.build new file mode 100644 index 0000000..041bcf3 --- /dev/null +++ b/test cases/failing/51 executable comparison/meson.build @@ -0,0 +1,6 @@ +project('executable comparison', 'c') + +exe1 = executable('prog1', sources : 'prog.c') +exe2 = executable('prog2', sources : 'prog.c') + +assert(exe1 < exe2, 'should fail') diff --git a/test cases/failing/51 executable comparison/prog.c b/test cases/failing/51 executable comparison/prog.c new file mode 100644 index 0000000..0314ff1 --- /dev/null +++ b/test cases/failing/51 executable comparison/prog.c @@ -0,0 +1 @@ +int main(int argc, char **argv) { return 0; } |