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:
1 parent
c2b04f5026
commit
e25095da43
2 files changed
+14
-3
No files matched your search
+2
-2
@@ -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
|
||||
|
||||
Reference in new issue
Block a user