Skip to content

Commit 269f200

Browse files
committed
feat(pegen): optimize memoize cache key
1 parent 2c75b63 commit 269f200

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

peg_parser/subheader.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@ def memoize(method: F) -> F:
106106
"""Memoize a symbol method."""
107107
method_name = method.__name__
108108

109-
def memoize_wrapper(self: P, *args: str | Token) -> Any:
109+
def memoize_wrapper(self: P) -> Any:
110110
mark = self._mark()
111-
key = mark, method_name, args
111+
key = mark, method_name
112112
# Fast path: cache hit, and not verbose.
113113
if key in self._cache and not self._verbose:
114114
tree, endmark = self._cache[key]
@@ -117,13 +117,12 @@ def memoize_wrapper(self: P, *args: str | Token) -> Any:
117117
# Slow path: no cache hit, or verbose.
118118
verbose, argsr, fill = self._verbose, "", ""
119119
if verbose:
120-
argsr = ",".join(repr(arg) for arg in args)
121120
fill = " " * self._level
122121
if key not in self._cache:
123122
if verbose:
124123
print(f"{fill}{method_name}({argsr}) ... (looking at {self.showpeek()})")
125124
self._level += 1
126-
tree = method(self, *args)
125+
tree = method(self)
127126
if verbose:
128127
self._level -= 1
129128
print(f"{fill}... {method_name}({argsr}) -> {tree!s:.200}")
@@ -146,7 +145,7 @@ def memoize_left_rec(method: Callable[[P], T | None]) -> Callable[[P], T | None]
146145

147146
def memoize_left_rec_wrapper(self: P) -> T | Any | None:
148147
mark = self._mark()
149-
key = mark, method_name, ()
148+
key = mark, method_name
150149
# Fast path: cache hit, and not verbose.
151150
if key in self._cache and not self._verbose:
152151
tree, endmark = self._cache[key]
@@ -273,7 +272,7 @@ def __init__(
273272
self._tokenizer = tokenizer
274273
self._verbose = verbose
275274
self._level = 0
276-
self._cache: dict[tuple[Mark, str, tuple[Any, ...]], tuple[Any, Mark]] = {}
275+
self._cache: dict[tuple[Mark, str], tuple[Any, Mark]] = {}
277276

278277
# Integer tracking wether we are in a left recursive rule or not. Can be useful
279278
# for error reporting.

tasks/simple.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,18 @@ def main():
5151
print(f"ast: {ast}", type(ast))
5252

5353

54+
def parse_large_file():
55+
from pathlib import Path
56+
57+
from peg_parser.parser import XonshParser
58+
59+
file = Path(__file__).parent.parent / "peg_parser" / "parser.py"
60+
parser = XonshParser
61+
parser.parse_file(file)
62+
63+
5464
if __name__ == "__main__":
55-
main()
65+
# main()
5666
# sm()
57-
print_memstats()
67+
# print_memstats()
68+
parse_large_file()

0 commit comments

Comments
 (0)