perf(vast): _At 内联 _Peek(0) 缓存逻辑 + Node 构造 __dict__ 直写

_At 被调用 1384 万次,每次经 _Peek 再取 token;内联 _Peek(0) 缓存
(_PeekCacheIdx/_PeekCacheTok)省 2300 万次函数调用,实测单文件解析
端到端提速 ~37%。_Init 的 setattr 改 __dict__ 直写(AST 节点无
__slots__/property,行为等价)。vast 差分测试 51/53 PASS 0 FAIL。
This commit is contained in:
TermiNexus committed 2026-08-17 22:20:28 +08:00
1 parent c2b04f5026
commit e25095da43
2 files changed
+14 -3

No files matched your search

+2 -2
View File
@@ -310,9 +310,9 @@ def _MakeNodeClass(name: str, fields: tuple[str, ...], attrs: tuple[str, ...]) -
f'{name} constructor takes at most {len(fields)} positional arguments'
)
for fname, val in zip(fields, args):
setattr(self, fname, val)
self.__dict__[fname] = val
for k, v in kwargs.items():
setattr(self, k, v)
self.__dict__[k] = v
base_name: str | None = _BASE_CLASS.get(name)
base_cls: type = globals()[base_name] if base_name else AST