summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorptmcg <ptmcg@austin.rr.com>2022-07-09 15:32:30 -0500
committerptmcg <ptmcg@austin.rr.com>2022-07-09 15:32:30 -0500
commit9751d0c686583fa4ade133fa845297f0f342c718 (patch)
tree07f137885f18628f05048ae265be8b1f0e7f0beb
parent2e2f508122eca30b081c1760f1b3d93010dcf6e9 (diff)
downloadpyparsing-git-9751d0c686583fa4ade133fa845297f0f342c718.tar.gz
Add micro optimizations
-rw-r--r--pyparsing/__init__.py2
-rw-r--r--pyparsing/core.py19
-rw-r--r--pyparsing/exceptions.py13
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):