diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2019-12-09 23:17:25 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-03-02 10:47:20 +0100 |
commit | ab988198c7aa5bec33057fabf2b5f68e847d67d2 (patch) | |
tree | b7b5df831d99b9110bf0712e40da2107143388f6 /mesonbuild/mparser.py | |
parent | ad5df1b9c3fd9e853a6dc9a06964e2624cabb85b (diff) | |
download | meson-ab988198c7aa5bec33057fabf2b5f68e847d67d2.zip meson-ab988198c7aa5bec33057fabf2b5f68e847d67d2.tar.gz meson-ab988198c7aa5bec33057fabf2b5f68e847d67d2.tar.bz2 |
review: Initial fixup
Diffstat (limited to 'mesonbuild/mparser.py')
-rw-r--r-- | mesonbuild/mparser.py | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py index ad871f0..9e6226e 100644 --- a/mesonbuild/mparser.py +++ b/mesonbuild/mparser.py @@ -17,7 +17,7 @@ import codecs import textwrap import types import typing as T -from typing import Dict, List, Tuple, Optional, Union, TYPE_CHECKING +from typing import Dict, Generic, Generator, List, Tuple, TypeVar, Optional, Union, TYPE_CHECKING from .mesonlib import MesonException from . import mlog @@ -77,15 +77,17 @@ class BlockParseException(MesonException): self.lineno = lineno self.colno = colno -class Token: - def __init__(self, tid: str, filename: str, line_start: int, lineno: int, colno: int, bytespan: Tuple[int, int], value: Union[str, bool, int]) -> None: +TV_TokenTypes = TypeVar('TV_TokenTypes', int, str, bool) + +class Token(Generic[TV_TokenTypes]): + def __init__(self, tid: str, filename: str, line_start: int, lineno: int, colno: int, bytespan: Tuple[int, int], value: TV_TokenTypes) -> None: self.tid = tid # type: str self.filename = filename # type: str self.line_start = line_start # type: int self.lineno = lineno # type: int self.colno = colno # type: int self.bytespan = bytespan # type: Tuple[int, int] - self.value = value # type: Union[str, bool, int] + self.value = value # type: TV_TokenTypes def __eq__(self, other) -> bool: if isinstance(other, str): @@ -244,35 +246,34 @@ class BaseNode: if callable(func): func(self) -class ElementaryNode(BaseNode): - def __init__(self, token: Token) -> None: +class ElementaryNode(Generic[TV_TokenTypes], BaseNode): + def __init__(self, token: Token[TV_TokenTypes]) -> None: super().__init__(token.lineno, token.colno, token.filename) - self.value = token.value - self.bytespan = token.bytespan + self.value = token.value # type: TV_TokenTypes + self.bytespan = token.bytespan # type: Tuple[int, int] -class BooleanNode(ElementaryNode): - def __init__(self, token: Token, value: bool) -> None: +class BooleanNode(ElementaryNode[bool]): + def __init__(self, token: Token[bool]) -> None: super().__init__(token) - self.value = value - assert(isinstance(self.value, bool)) + assert isinstance(self.value, bool) -class IdNode(ElementaryNode): - def __init__(self, token: Token) -> None: +class IdNode(ElementaryNode[str]): + def __init__(self, token: Token[str]) -> None: super().__init__(token) - assert(isinstance(self.value, str)) + assert isinstance(self.value, str) def __str__(self): return "Id node: '%s' (%d, %d)." % (self.value, self.lineno, self.colno) -class NumberNode(ElementaryNode): - def __init__(self, token: Token) -> None: +class NumberNode(ElementaryNode[int]): + def __init__(self, token: Token[int]) -> None: super().__init__(token) - assert(isinstance(self.value, int)) + assert isinstance(self.value, int) -class StringNode(ElementaryNode): - def __init__(self, token: Token) -> None: +class StringNode(ElementaryNode[str]): + def __init__(self, token: Token[str]) -> None: super().__init__(token) - assert(isinstance(self.value, str)) + assert isinstance(self.value, str) def __str__(self): return "String node: '%s' (%d, %d)." % (self.value, self.lineno, self.colno) @@ -284,10 +285,10 @@ class BreakNode(ElementaryNode): pass class ArgumentNode(BaseNode): - def __init__(self, token: Token) -> None: + def __init__(self, token: Token[TV_TokenTypes]) -> None: super().__init__(token.lineno, token.colno, token.filename) self.arguments = [] # type: List[BaseNode] - self.commas = [] # type: List[Token] + self.commas = [] # type: List[Token[TV_TokenTypes]] self.kwargs = {} # type: Dict[BaseNode, BaseNode] self.order_error = False @@ -366,12 +367,12 @@ class ArithmeticNode(BaseNode): self.operation = operation # type: str class NotNode(BaseNode): - def __init__(self, token: Token, value: BaseNode) -> None: + def __init__(self, token: Token[TV_TokenTypes], value: BaseNode) -> None: super().__init__(token.lineno, token.colno, token.filename) self.value = value # type: BaseNode class CodeBlockNode(BaseNode): - def __init__(self, token: Token) -> None: + def __init__(self, token: Token[TV_TokenTypes]) -> None: super().__init__(token.lineno, token.colno, token.filename) self.lines = [] # type: List[BaseNode] @@ -470,7 +471,7 @@ class Parser: def __init__(self, code: str, filename: str) -> None: self.lexer = Lexer(code) self.stream = self.lexer.lex(filename) - self.current = Token('eof', '', 0, 0, 0, (0, 0), None) + self.current = Token('eof', '', 0, 0, 0, (0, 0), None) # type: Token self.getsym() self.in_ternary = False @@ -643,9 +644,11 @@ class Parser: def e9(self) -> BaseNode: t = self.current if self.accept('true'): - return BooleanNode(t, True) + t.value = True + return BooleanNode(t) if self.accept('false'): - return BooleanNode(t, False) + t.value = False + return BooleanNode(t) if self.accept('id'): return IdNode(t) if self.accept('number'): |