summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2018-08-20 23:58:10 +0200
committerAnthon van der Neut <anthon@mnt.org>2018-08-20 23:58:10 +0200
commitf39bf3cbbc7815cd041ce9c04723209f2aff729e (patch)
treeac50146f5ba84a911e3feae0e0966bb2018d6a9f
parent995ff1de4463e9a3d3ab8825049e139320ab4c38 (diff)
downloadruamel.yaml-f39bf3cbbc7815cd041ce9c04723209f2aff729e.tar.gz
some minor speed ups through removal of indirection overhead, re #159
-rw-r--r--main.py18
-rw-r--r--parser.py4
-rw-r--r--scanner.py22
3 files changed, 27 insertions, 17 deletions
diff --git a/main.py b/main.py
index b4e5d77..85ad0cb 100644
--- a/main.py
+++ b/main.py
@@ -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):
diff --git a/parser.py b/parser.py
index 5443445..9aedcac 100644
--- a/parser.py
+++ b/parser.py
@@ -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):
diff --git a/scanner.py b/scanner.py
index 320dfe7..3dc11e9 100644
--- a/scanner.py
+++ b/scanner.py
@@ -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: