diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-11-20 01:46:16 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-11-20 01:48:26 +0200 |
commit | 87340136900be1442a4c408a00a08afed02e1873 (patch) | |
tree | 06e52ede7834de53d244cf18e887f90dc562a3f2 /mesonbuild/mparser.py | |
parent | c41805f012fe7305dfba978f6cb70741d782c57f (diff) | |
download | meson-87340136900be1442a4c408a00a08afed02e1873.zip meson-87340136900be1442a4c408a00a08afed02e1873.tar.gz meson-87340136900be1442a4c408a00a08afed02e1873.tar.bz2 |
I can haz source files added to targets.
Diffstat (limited to 'mesonbuild/mparser.py')
-rw-r--r-- | mesonbuild/mparser.py | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py index f593c8e..ec5778d 100644 --- a/mesonbuild/mparser.py +++ b/mesonbuild/mparser.py @@ -22,10 +22,11 @@ class ParseException(MesonException): self.colno = colno class Token: - def __init__(self, tid, lineno, colno, value): + def __init__(self, tid, lineno, colno, bytespan, value): self.tid = tid self.lineno = lineno self.colno = colno + self.bytespan = bytespan self.value = value def __eq__(self, other): @@ -87,7 +88,10 @@ class Lexer: curline = lineno col = mo.start()-line_start matched = True + span_start = loc loc = mo.end() + span_end = loc + bytespan = (span_start, span_end) match_text = mo.group() if tid == 'ignore' or tid == 'comment': break @@ -123,40 +127,40 @@ class Lexer: tid = match_text else: value = match_text - yield Token(tid, curline, col, value) + yield Token(tid, curline, col, bytespan, value) break if not matched: raise ParseException('lexer', lineno, col) -class BooleanNode: - def __init__(self, token, value): +class ElementaryNode: + def __init__(self, token): self.lineno = token.lineno self.colno = token.colno + self.value = token.value + self.bytespan = token.bytespan + +class BooleanNode(ElementaryNode): + def __init__(self, token, value): + super().__init__(token) self.value = value assert(isinstance(self.value, bool)) -class IdNode: +class IdNode(ElementaryNode): def __init__(self, token): - self.lineno = token.lineno - self.colno = token.colno - self.value = token.value + super().__init__(token) assert(isinstance(self.value, str)) def __str__(self): return "Id node: '%s' (%d, %d)." % (self.value, self.lineno, self.colno) -class NumberNode: +class NumberNode(ElementaryNode): def __init__(self, token): - self.lineno = token.lineno - self.colno = token.colno - self.value = token.value + super().__init__(token) assert(isinstance(self.value, int)) -class StringNode: +class StringNode(ElementaryNode): def __init__(self, token): - self.lineno = token.lineno - self.colno = token.colno - self.value = token.value + super().__init__(token) assert(isinstance(self.value, str)) def __str__(self): @@ -360,7 +364,7 @@ class Parser: try: self.current = next(self.stream) except StopIteration: - self.current = Token('eof', 0, 0, None) + self.current = Token('eof', 0, 0, (0, 0), None) def accept(self, s): if self.current.tid == s: |