diff options
author | ptmcg <ptmcg@austin.rr.com> | 2022-07-09 15:32:30 -0500 |
---|---|---|
committer | ptmcg <ptmcg@austin.rr.com> | 2022-07-09 15:32:30 -0500 |
commit | 9751d0c686583fa4ade133fa845297f0f342c718 (patch) | |
tree | 07f137885f18628f05048ae265be8b1f0e7f0beb | |
parent | 2e2f508122eca30b081c1760f1b3d93010dcf6e9 (diff) | |
download | pyparsing-git-9751d0c686583fa4ade133fa845297f0f342c718.tar.gz |
Add micro optimizations
-rw-r--r-- | pyparsing/__init__.py | 2 | ||||
-rw-r--r-- | pyparsing/core.py | 19 | ||||
-rw-r--r-- | pyparsing/exceptions.py | 13 |
3 files changed, 20 insertions, 14 deletions
diff --git a/pyparsing/__init__.py b/pyparsing/__init__.py index 622fce5..dd66063 100644 --- a/pyparsing/__init__.py +++ b/pyparsing/__init__.py @@ -121,7 +121,7 @@ class version_info(NamedTuple): __version_info__ = version_info(3, 0, 10, "final", 0) -__version_time__ = "09 Jul 2022 19:45 UTC" +__version_time__ = "09 Jul 2022 20:01 UTC" __version__ = __version_info__.__version__ __versionTime__ = __version_time__ __author__ = "Paul McGuire <ptmcg.gm+pyparsing@gmail.com>" diff --git a/pyparsing/core.py b/pyparsing/core.py index 13ebf16..0b875e3 100644 --- a/pyparsing/core.py +++ b/pyparsing/core.py @@ -274,11 +274,6 @@ def _trim_arity(func, max_limit=3): limit = 0 found_arity = False - def extract_tb(tb, limit=0): - frames = traceback.extract_tb(tb, limit=limit) - frame_summary = frames[-1] - return [frame_summary[:2]] - # synthesize what would be returned by traceback.extract_stack at the call to # user's parse action 'func', so that we don't incur call penalty at parse time @@ -302,8 +297,10 @@ def _trim_arity(func, max_limit=3): raise else: tb = te.__traceback__ + frames = traceback.extract_tb(tb, limit=2) + frame_summary = frames[-1] trim_arity_type_error = ( - extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth + [frame_summary[:2]][-1][:2] == pa_call_line_synth ) del tb @@ -4005,7 +4002,7 @@ class Or(ParseExpression): loc2 = e.try_parse(instring, loc, raise_fatal=True) except ParseFatalException as pfe: pfe.__traceback__ = None - pfe.parserElement = e + pfe.parser_element = e fatals.append(pfe) maxException = None maxExcLoc = -1 @@ -4063,7 +4060,7 @@ class Or(ParseExpression): if len(fatals) > 1: fatals.sort(key=lambda e: -e.loc) if fatals[0].loc == fatals[1].loc: - fatals.sort(key=lambda e: (-e.loc, -len(str(e.parserElement)))) + fatals.sort(key=lambda e: (-e.loc, -len(str(e.parser_element)))) max_fatal = fatals[0] raise max_fatal @@ -4167,7 +4164,7 @@ class MatchFirst(ParseExpression): ) except ParseFatalException as pfe: pfe.__traceback__ = None - pfe.parserElement = e + pfe.parser_element = e raise except ParseException as err: if err.loc > maxExcLoc: @@ -4354,7 +4351,7 @@ class Each(ParseExpression): tmpLoc = e.try_parse(instring, tmpLoc, raise_fatal=True) except ParseFatalException as pfe: pfe.__traceback__ = None - pfe.parserElement = e + pfe.parser_element = e fatals.append(pfe) failed.append(e) except ParseException: @@ -4373,7 +4370,7 @@ class Each(ParseExpression): if len(fatals) > 1: fatals.sort(key=lambda e: -e.loc) if fatals[0].loc == fatals[1].loc: - fatals.sort(key=lambda e: (-e.loc, -len(str(e.parserElement)))) + fatals.sort(key=lambda e: (-e.loc, -len(str(e.parser_element)))) max_fatal = fatals[0] raise max_fatal diff --git a/pyparsing/exceptions.py b/pyparsing/exceptions.py index 869141c..f008a1b 100644 --- a/pyparsing/exceptions.py +++ b/pyparsing/exceptions.py @@ -41,7 +41,7 @@ class ParseBaseException(Exception): else: self.msg = msg self.pstr = pstr - self.parser_element = self.parserElement = elem + self.parser_element = elem self.args = (pstr, loc, msg) @staticmethod @@ -116,7 +116,7 @@ class ParseBaseException(Exception): internal factory method to simplify creating one type of ParseException from another - avoids having __init__ signature conflicts among subclasses """ - return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) + return cls(pe.pstr, pe.loc, pe.msg, pe.parser_element) @property def line(self) -> str: @@ -146,6 +146,15 @@ class ParseBaseException(Exception): """ return col(self.loc, self.pstr) + # pre-PEP8 compatibility + @property + def parserElement(self): + return self.parser_element + + @parserElement.setter + def parserElement(self, elem): + self.parser_element = elem + def __str__(self) -> str: if self.pstr: if self.loc >= len(self.pstr): |