Files
TransPyC/lib/Projectrans
TermiNexus 4641777db1 perf(Phase2Translator/_split_ll): 括号计数走 C 级 str.count 快路径 + 调用点预筛
prof 基线(PROF/20260930_224857,主进程 433.69s)实测 _split_ll:
ncalls 53 / tottime 0.263s / cumtime 3.347s,其中
_count_braces_outside_strings 102,397 次 / tottime 1.999s / cumtime 2.769s
(占其 cumtime 的 83%);同函数内 strip 0.078s、startswith 0.084s 可忽略。

- _count_braces_outside_strings:行内不含 c" 时退化为 C 级
  str.count('{') - str.count('}'),不再逐字符跑 Python 循环。
  语义逐字等价:逐字符版唯一的额外分支就是"跳过 c" 字面量",而该分支
  只在出现子串 c" 时进入 ⇒ 无 c" 时等于纯括号计数。
- 两个调用点(in_define 函数体续行 / in_global_def 全局初始化器续行)加预筛
  `'{' in line or '}' in line`:无花括号的行必然返回 0,省掉一次函数调用。
- `stripped == '{'` 分支的 3 处 re.sub 字面量改用同模式串的预编译常量
  (_RE_DEFINE_PREFIX / _RE_DEFINE_LINKAGE / _RE_ALWAYSINLINE),与上面
  define 分支保持同一口径(模式串一字未改)。

顺带实测(供下一步参考):str.strip 179M 次 / 22.8s 是全流程最大项,但
cProfile 归属帧几乎全在 stdlib(re.match 5.25M、threading.wait 4.88M、
futures.as_completed 3.63M、json.load 0.66M、subprocess 各 ~0.4M);
本项目内只有 _extract_llvm_type_name 1.37M、_ParseDwarfLineRows 0.34M、
_split_ll 0.35M。
2026-09-30 23:18:29 +08:00
..