Skip to content

Commit 7fbbcbd

Browse files
committed
Revert transform_string perf penalty in _flatten (introduced in 3.2.0b2)
1 parent 336647a commit 7fbbcbd

2 files changed

Lines changed: 11 additions & 5 deletions

File tree

CHANGES

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ Version 3.3.0 - December, 2025
9696
(3.1.1 through 3.3.0), aggregating results into `perf_pyparsing.csv` at the repo root.
9797
- See `tests/README.md` for usage instructions.
9898

99+
- Used performance benchmarking to identify and revert an inefficient utility method used in
100+
`transform_string` (introduced in pyparsing 3.2.0b2).
101+
99102

100103
Version 3.2.5 - September, 2025
101104
-------------------------------

pyparsing/util.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -312,11 +312,14 @@ def no_escape_re_range_char(c: str) -> str:
312312

313313
def _flatten(ll: Iterable) -> list:
314314
ret = []
315-
to_visit = [*ll]
316-
while to_visit:
317-
i = to_visit.pop(0)
318-
if isinstance(i, Iterable) and not isinstance(i, str):
319-
to_visit[:0] = i
315+
for i in ll:
316+
# Developer notes:
317+
# - do not collapse this section of code, isinstance checks are done
318+
# in optimal order
319+
if isinstance(i, str):
320+
ret.append(i)
321+
elif isinstance(i, Iterable):
322+
ret.extend(_flatten(i))
320323
else:
321324
ret.append(i)
322325
return ret

0 commit comments

Comments
 (0)