diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2018-07-17 13:54:56 -0400 |
---|---|---|
committer | Xavier Claessens <xavier.claessens@collabora.com> | 2018-10-04 20:14:37 -0400 |
commit | fa2e096aa00175b12dd3fa9e9adf4879637ee83e (patch) | |
tree | 9cc3bae5a841335486ac701aa3cd58f0588d585a /mesonbuild/mparser.py | |
parent | 2ff69b20df0864182fdf2b146d29dc67d0cb9a5b (diff) | |
download | meson-fa2e096aa00175b12dd3fa9e9adf4879637ee83e.zip meson-fa2e096aa00175b12dd3fa9e9adf4879637ee83e.tar.gz meson-fa2e096aa00175b12dd3fa9e9adf4879637ee83e.tar.bz2 |
Interpreter: Add "in" and "not in" operators
Closes: #3600
Diffstat (limited to 'mesonbuild/mparser.py')
-rw-r--r-- | mesonbuild/mparser.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py index 9af6dac..429f014 100644 --- a/mesonbuild/mparser.py +++ b/mesonbuild/mparser.py @@ -90,8 +90,9 @@ class Lexer: def __init__(self, code): self.code = code self.keywords = {'true', 'false', 'if', 'else', 'elif', - 'endif', 'and', 'or', 'not', 'foreach', 'endforeach'} - self.future_keywords = {'continue', 'break', 'in', 'return'} + 'endif', 'and', 'or', 'not', 'foreach', 'endforeach', + 'in'} + self.future_keywords = {'continue', 'break', 'return'} self.token_specification = [ # Need to be sorted longest to shortest. ('ignore', re.compile(r'[ \t]')), @@ -436,7 +437,9 @@ comparison_map = {'equal': '==', 'lt': '<', 'le': '<=', 'gt': '>', - 'ge': '>=' + 'ge': '>=', + 'in': 'in', + 'notin': 'not in', } # Recursive descent parser for Meson's definition language. @@ -543,6 +546,8 @@ class Parser: for nodename, operator_type in comparison_map.items(): if self.accept(nodename): return ComparisonNode(operator_type, left, self.e5()) + if self.accept('not') and self.accept('in'): + return ComparisonNode('notin', left, self.e5()) return left def e5(self): |