diff options
author | Anthon van der Neut <anthon@mnt.org> | 2018-08-20 23:58:10 +0200 |
---|---|---|
committer | Anthon van der Neut <anthon@mnt.org> | 2018-08-20 23:58:10 +0200 |
commit | f39bf3cbbc7815cd041ce9c04723209f2aff729e (patch) | |
tree | ac50146f5ba84a911e3feae0e0966bb2018d6a9f | |
parent | 995ff1de4463e9a3d3ab8825049e139320ab4c38 (diff) | |
download | ruamel.yaml-f39bf3cbbc7815cd041ce9c04723209f2aff729e.tar.gz |
some minor speed ups through removal of indirection overhead, re #159
-rw-r--r-- | main.py | 18 | ||||
-rw-r--r-- | parser.py | 4 | ||||
-rw-r--r-- | scanner.py | 22 |
3 files changed, 27 insertions, 17 deletions
@@ -162,18 +162,20 @@ class YAML(object): @property def reader(self): # type: () -> Any - attr = '_' + sys._getframe().f_code.co_name - if not hasattr(self, attr): - setattr(self, attr, self.Reader(None, loader=self)) - return getattr(self, attr) + try: + return self._reader + except AttributeError: + self._reader = self.Reader(None, loader=self) + return self._reader @property def scanner(self): # type: () -> Any - attr = '_' + sys._getframe().f_code.co_name - if not hasattr(self, attr): - setattr(self, attr, self.Scanner(loader=self)) - return getattr(self, attr) + try: + return self._scanner + except: + self._scanner = self.Scanner(loader=self) + return self._scanner @property def parser(self): @@ -123,14 +123,14 @@ class Parser(object): def scanner(self): # type: () -> Any if hasattr(self.loader, 'typ'): - self.loader.scanner + return self.loader.scanner return self.loader._scanner @property def resolver(self): # type: () -> Any if hasattr(self.loader, 'typ'): - self.loader.resolver + return self.loader.resolver return self.loader._resolver def check_event(self, *choices): @@ -41,8 +41,8 @@ if False: # MYPY __all__ = ['Scanner', 'RoundTripScanner', 'ScannerError'] -_THE_END = '\0\r\n\x85\u2028\u2029' -_THE_END_SPACE_TAB = '\0 \t\r\n\x85\u2028\u2029' +_THE_END = '\n\0\r\x85\u2028\u2029' +_THE_END_SPACE_TAB = ' \n\0\t\r\x85\u2028\u2029' _SPACE_TAB = ' \t' @@ -144,9 +144,17 @@ class Scanner(object): @property def reader(self): # type: () -> Any - if hasattr(self.loader, 'typ'): - self.loader.reader - return self.loader._reader + try: + return self._scanner_reader + except: + if hasattr(self.loader, 'typ'): + self._scanner_reader = self.loader.reader + else: + self._scanner_reader = self.loader._reader + return self._scanner_reader + #if hasattr(self.loader, 'typ'): + # self.loader.reader + #return self.loader._reader @property def scanner_processing_version(self): # prefix until un-composited @@ -1378,7 +1386,7 @@ class Scanner(object): chunks = [] # type: List[Any] while True: length = 0 - while self.reader.peek(length) not in '\'"\\\0 \t\r\n\x85\u2028\u2029': + while self.reader.peek(length) not in ' \n\'"\\\0\t\r\x85\u2028\u2029': length += 1 if length != 0: chunks.append(self.reader.prefix(length)) @@ -1411,7 +1419,7 @@ class Scanner(object): code = int(self.reader.prefix(length), 16) chunks.append(unichr(code)) self.reader.forward(length) - elif ch in '\r\n\x85\u2028\u2029': + elif ch in '\n\r\x85\u2028\u2029': self.scan_line_break() chunks.extend(self.scan_flow_scalar_breaks(double, start_mark)) else: |