aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mparser.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-11-20 01:46:16 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-11-20 01:48:26 +0200
commit87340136900be1442a4c408a00a08afed02e1873 (patch)
tree06e52ede7834de53d244cf18e887f90dc562a3f2 /mesonbuild/mparser.py
parentc41805f012fe7305dfba978f6cb70741d782c57f (diff)
downloadmeson-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.py38
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: