diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2015-08-14 16:05:58 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2015-08-14 16:05:58 +0300 |
commit | a5abcf1fe2a033efd5c79b5220b658aa7d844197 (patch) | |
tree | 9466bfa7bf72d8da801be361a7de7061f0216dfd /mparser.py | |
parent | e842e6602c3a0e5aeac5ecfb4d8bb4fe7bc75093 (diff) | |
download | meson-a5abcf1fe2a033efd5c79b5220b658aa7d844197.zip meson-a5abcf1fe2a033efd5c79b5220b658aa7d844197.tar.gz meson-a5abcf1fe2a033efd5c79b5220b658aa7d844197.tar.bz2 |
Created the += operator.
Diffstat (limited to 'mparser.py')
-rw-r--r-- | mparser.py | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -53,6 +53,7 @@ class Lexer: ('dblquote', re.compile(r'"')), ('string', re.compile(r"'([^'\\]|(\\.))*'")), ('comma', re.compile(r',')), + ('plusassign', re.compile(r'\+=')), ('dot', re.compile(r'\.')), ('plus', re.compile(r'\+')), ('dash', re.compile(r'-')), @@ -234,6 +235,14 @@ class AssignmentNode: assert(isinstance(var_name, str)) self.value = value +class PlusAssignmentNode: + def __init__(self, lineno, colno, var_name, value): + self.lineno = lineno + self.colno = colno + self.var_name = var_name + assert(isinstance(var_name, str)) + self.value = value + class ForeachClauseNode(): def __init__(self, lineno, colno, varname, items, block): self.lineno = lineno @@ -344,7 +353,12 @@ class Parser: def e1(self): left = self.e2() - if self.accept('assign'): + if self.accept('plusassign'): + value = self.e1() + if not isinstance(left, IdNode): + raise ParseException('Plusassignment target must be an id.', left.lineno, left.colno) + return PlusAssignmentNode(left.lineno, left.colno, left.value, value) + elif self.accept('assign'): value = self.e1() if not isinstance(left, IdNode): raise ParseException('Assignment target must be an id.', |