TermiNexus
|
eb0c3dfd31
|
fix(gen): slife 登记表改为跨文件存活,并修正区间弹回
- _g_slife_owned 原先从 trans.Pool(每文件池)分配,Phase2 每文件 reset_to(mark2) 后表体即悬垂,第二个文件起每次登记都写坏活跃池数据(现场 access-violation on 0x0,崩点随分配漂移、ASan 无法给栈)
- _SlifeRestore 只还了 count、未还 top,top 随函数数量单调增长;上一文件/函数的陈旧条目留在扫描区间内,因每文件池地址复用被误判为新变量,_SlifeShadow 返回悬垂影子槽,_SlifeNoteStore 直接写坏内存
- 新增 _g_slife_save/_g_slife_depth:进入时保存 count/top 两个边界,退出时一起弹回
- _SlifeDropOwnedUnlessSame 补 Pointee==0 守卫(与 _SlifeEmitGuardedFree 同口径)
|
2026-10-09 13:04:26 +08:00 |
|
TermiNexus
|
dd24dc670f
|
fix(gen): P2 失效状态改存独立槽表,不再给 VarEntry 加字段
现象:任何工程编译都在函数形参注册刚结束处 access-violation(pc=0,逐字节可复现)。定位:逐层探针把崩点压到 FuncGenDef 的 pre_scan 段,而该段对 Check(body 仅 if+return)应为空操作,唯一变量是 VarEntry 这个热结构被加了 Freed 字段。修法:撤销 VarEntry.Freed,改用 VarGenMixin 的独立失效槽表 _g_freed_slots(键 = 变量槽 alloca,整次翻译内唯一,故全局累积、无需按函数 reset/restore);_FreedMark/_FreedCheck/_FreedClearSlot 三个 API 替换字段读写,P2 语义不变。同时清除全部 TEMP 探针。
|
2026-10-09 11:51:11 +08:00 |
|
TermiNexus
|
07ff906338
|
chore(dbg): add_var 逐行探针 a1..a8(TEMP)
崩点落在形参注册段,而这段里唯一的结构性改动是 VarEntry 加了字段。逐行埋点定位到具体哪一步(esz/cnt 也会打出来,可用于核对 sizeof 是否异常)。
|
2026-10-09 11:12:31 +08:00 |
|
TermiNexus
|
a2e1c651fc
|
fix(gen): 变量表 Freed 不再逐个字段写,统一依赖 init_vars 的整块清零
崩点已定位在普通函数形参注册段(auto_addr 之后、_SlifeReset 之前)。add_var 里对刚加过字段的 VarEntry 末端逐个写 entry.Freed 疑似越界/踩偏移;init_vars 本就 memset 整块,去掉冗余写入。
|
2026-10-09 11:01:08 +08:00 |
|
TermiNexus
|
b71ed43f10
|
feat(gen): P5 slife 登记表容量提到 256,超限 fail-fast
分配与上限判定共用 _SLIFE_MAX = 256(原 128 且满时静默停止登记)。_SlifeEnsureOwned 超限改为 fatal_error(LifetimeError):静默返回 None 会让该对象永不登记、永不释放(纯泄漏),与编译器自动管理的承诺矛盾。
|
2026-10-09 08:46:24 +08:00 |
|
TermiNexus
|
efb4a54428
|
fix(gen): P4 自别名重复赋值不得释放共持对象
q = p; q = p 这类自别名重复赋值在覆盖释放时会把两个槽共持的对象提前释放(q 与 p 同时悬垂)。新增 _SlifeDropOwnedUnlessSame:在 IR 里比较 target 与源槽的当前值,相同则跳过整个覆盖释放(含析构调度),不同才走常规保护式释放。P4 转移改用它。
|
2026-10-09 08:45:09 +08:00 |
|
TermiNexus
|
97313e9e55
|
feat(gen): P2 生命期标注 @life(willFree(...)) 驱动释放后使用与二次释放检查
标注面:@life(willFree(<形参名|0起序号>)),兼容叠加式 @willFree(...),可混用累加;序号按形参表下标、self/cls 计入。GenApi.compute_willfree_mask 解析标注并对非法标注 fail-fast。本文件表 StructGenMixin.WfTable + 跨模块 .vpi 行尾 wf=<mask>(Converter 写 / VpiReader 读 / CallGenBase 查)。调用点在实参全部翻译之后把对应实参变量槽置 VarEntry.Freed;其后的读取路径报 LifetimeError。重新赋值清除失效态。
|
2026-10-08 21:28:49 +08:00 |
|
TermiNexus
|
2178970ff7
|
feat(gen): slife 释放前调度析构 __del__,并禁止手动 del(§3.6 落地)
- 释放统一入口 _SlifeEmitGuardedFree 改为「先析构、再 free」;析构名定案 __del__(对齐 TPC LLVMCG/MemoryOps._emit_local_heap_frees 的释放路径;del obj 那条语句走的仍是 __delete__)。
- 查表沿 MRO / 跨模块 stub 回退(复用 ExprGenOps._resolve_dunder_by_class);类未定义 __del__ 时**不加任何分支**,常见路径零开销。
- 析构用条件分支而不是 select:未拥有的路径必须完全不进析构体(析构体里会解引用 self,传 null 进去会踩空);块标签走 trans._label_counter,避免同函数内重名。
- §2.4 判据5 扩展:对 slife 对象手动 del obj → LifetimeError(否则析构跑两次)。hlife 路径不受影响。
- 为把 trans 传进析构查找,_SlifeEmitFrees / _SlifeEmitGuardedFree / _SlifeDropOwned 加 trans 形参,9 处调用点同步。
|
2026-10-08 20:34:11 +08:00 |
|
TermiNexus
|
78b2052445
|
feat(gen): 接线 M3 owned slife 的 RAII 出口释放(函数级 scope guard)
- 所有权影子标志(i8,登记时入口块置 0)+ free(select(影子!=0, load 槽, null)) 保护式释放:赋值在分支/循环里而未执行 → free(NULL);槽里写入外来指针或别名 → 清影子,绝不 free 外来指针;循环反复 new → 赋值前覆盖释放上一轮,不累积。
- 三条函数体转译路径(FuncGenDef 主路径 / FuncGenMixin 嵌套函数提升为 __closure_* / ClassGenVTable 方法体)各自抬升与弹回登记区间;修两处漏 reset 导致内层出口 free 外层对象再被外层 free 一次 = double free(Windows STATUS_HEAP_CORRUPTION)。出口按槽去重做兜底。
- free 由模块前言统一声明(Translator.vp,紧挨 malloc);释放点只查表 + fail-fast,绝不吐指向未声明符号的 llvm.call。
- 赋值处记账:new heap slife → 登记 + 覆盖释放 + 影子置 1;其它 RHS(new stack / hlife / 别名 / 外来指针 / None)→ 已登记则交还所有权。手动 free slife 对象 → LifetimeError。
|
2026-10-08 20:03:54 +08:00 |
|
TermiNexus
|
1dd53ebff5
|
feat(gen): M3 owned slife 登记机制(函数级 scope guard 的底座)
登记本函数内由 new heap/memgr slife 直接绑定的变量 alloca,提供 Reset/Register/Owned/MarkAliased/EmitFrees/ReleaseOld 六个 API,供出口插桩与覆盖释放使用。
为什么是函数级而非块级(已核实):Stmt 层(if/while/for/with)不调用 enter_scope/exit_scope,局部存储一律入口块 alloca(函数级寿命)——块级释放会让"块之后仍可达的变量"变悬垂。别名(q = p)在覆盖释放时保守跳过(宁可泄漏不悬垂),函数出口释放不受别名影响。
本提交仅机制,尚未接线(无行为变化);下一步接 4 处钩子:函数入口/收尾、translate_return 的 3 个 build_ret、赋值处的登记与覆盖释放、以及 §4.3 手动 free 判据。
|
2026-10-08 18:41:52 +08:00 |
|
TermiNexus
|
a6e1957768
|
feat(gen): 控制流汇合 Meet(M2.2)
- VarGenMixin:life_capture/life_restore/life_join(作用域链快照,池上 [count,(entry,life)…] 数组)。 - StmtGenCifMixin.translate_if:进分支前快照、then 末快照、else 前复位、出口按 min 合并。 - StmtGenMixin:while/for 统一在语句分派处 capture→run→join(一处覆盖全部迭代形态与解糖,含 0 次迭代路径)。
|
2026-10-08 12:35:59 +08:00 |
|
TermiNexus
|
ec47401151
|
feat(gen): 生命期标签(LifeTag)与借用传播(M2.1)
- GenTypes:新增 define LIFE_VALUE/FRAME/HEAP/STATIC/UNKNOWN 与 VarEntry.Life。 - VarGenMixin:set_var_life/get_var_life/life_meet;add_var 初始化 Life=UNKNOWN。 - AssignGenMixin:life_of_expr(&local、数组退让、变量 Life 读取)、propagate_life(赋值传播)、fail_if_life_escapes(汇点检查,LifetimeError);在 AnnAssign 与单 Name Assign 处挂传播。 - GenApi.fail_if_stack_addr_escape 改为薄壳并委托 fail_if_life_escapes;原 (a)(b) 语法判据并入 life_of_expr。于是 s: str = l; return s 被拦截。
|
2026-10-08 12:22:10 +08:00 |
|
TermiNexus
|
7a9bc5ae75
|
chore(messages): TransPyV 运行时中文字符串英文化
把 TransPyV/App 下 57 个文件的运行时中文字符串(编译器报错/告警/日志、CLI 帮助与横幅、REPL 提示、Phase1/Phase2 流程日志、Codegen 各 Mixin 的类型与调用报错、Stub/Vpi 诊断等)共 1091 行译为英文。
口径:只改字符串字面量内部文字,行数零变化(+1092/-1092);printf 格式符与转义序列多重集合校验不变(_strcheck 异常 0);译文不引入撇号以免干扰单引号字面量解析。验证:三重重编 SUCCESS(136.20s)+ 全量 77/77 顺序回归通过 + VET 编译 SUCCESS / --search-paths 7 条 exit 0;新产物 help/日志输出已为英文。
|
2026-10-07 00:03:58 +08:00 |
|
TermiNexus
|
cd55a7e214
|
refactor: rawptr[T] -> T*(R14)+ 修 REnum 前向占位未就地填充
R14:rawptr[X] -> X*(56 文件 / 834 行改动);保留 6 处 rawptr[t.CPtr](存纯裸指针的规范例外)。 修复:class X(t.REnum) 的变体字段写成自引用 X* 时,字段解析在变体扫描期经 ensure_forward_class 建了一个 opaque 前向占位;末尾 register_struct 按 Ty 指针去重会再建第二个同名 entry,而 find_struct 取首个(占位,0 字段)→ X.__sizeof__() == 0,报「已注册但大小为 0(字段链表未填充)」。改为注册前若命中同模块前向占位则就地填充(与 ensure_forward_class 文档口径一致)。TPC 无此问题,属 TPV 侧缺口。 验证:自举三重重编 SUCCESS;全量 77/77 顺序回归通过(修复前卡在 LLvmLiteTest)。
|
2026-10-05 17:38:28 +08:00 |
|
TermiNexus
|
0f4aeeceff
|
docs(tpv): R11 注释与 docstring 英文化并压缩到 2 行内
按 wiki/新规范:注释只讲作用、不掺杂历史原因、避免超长、尽可能英文(含三引号 __doc__)。全文 79 个 .vp:# 注释 16269 行(中文 13808)与 docstring(中文 1381 处)全部改英文;超 2 行的注释块(2093)与 docstring(397)全部压到 2 行。运行时可见文本未动(fatal_error/VLogger 的中文报错文案、stdio.printf 的横幅格式串)。校验:屏蔽注释与三引号后逐行比对各文件代码骨架,0 漂移。验证:自举重建 153.48s 通过(跨模块内联完成);TPV 顺序回归 77/77 全通过。
|
2026-10-05 13:38:22 +08:00 |
|
TermiNexus
|
f2ef1bb240
|
refactor(tpv): 新语法 R10 括号内隐式续行并一行(1140 处 / 67 文件)
|
2026-10-05 07:14:14 +08:00 |
|
TermiNexus
|
4a685d478f
|
refactor(tpv): 新语法 R10 单语句块并一行(7722 处 if/for/while 单语句体)
|
2026-10-05 03:10:55 +08:00 |
|
TermiNexus
|
30a3da4cd4
|
refactor(tpv): 新语法 R10(反斜杠续行合并)+ 回退 R5(语义不等价)
- 反斜杠续行合并为单行(304 处),呼应"尽可能不换行"。
- 回退 c.DerefAs(p, v) → *p = v 两处(StructGenMixin):原写法是 bitcast 后
store 指针位,新写法按 pointee 值类型赋值,类型不符(i8* → List 值),
语义不等价,保留 c.DerefAs。
种子自举通过。
|
2026-10-04 22:56:27 +08:00 |
|
TermiNexus
|
185a2196ca
|
refactor(tpv): 迁移新语法 R1/R2/R7/R8/R3/R4/R5(指针 T*、短别名、define、&/*、__asm__)
按 wiki/新规范:
- T | t.CPtr → T*(无 | 标准)
- t.CInt/t.CUInt64T/t.CChar/t.CDouble 等 → int/uint64/char/double 等短别名
- X: t.CDefine = Y → define X = Y
- c.Asm → __asm__,c.AsmInp/c.AsmOut → asminp/asmout,t.ASM_DESCR. → ASM_DESCR.
- c.Addr(x) → &x,c.Deref(p) → *p,c.DerefAs(p, v) → *p = v
种子自举通过(96s)。
|
2026-10-04 22:49:01 +08:00 |
|
TermiNexus
|
7b3e814524
|
refactor(backend): 单端 MLIR —— 发射器全树改名 mlirlite 并删除 --backend 开关
- App/Test 的 .vp 中 llvmlite 全部改名为 mlirlite(import、限定名、类型注解、注释)
- 删除后端开关:Config.set_backend/is_mlir_backend/alias_module_name、BackendTarget/BackendIsMlir、CLI --backend、options.backend/options.target 读取,以及 IncludesScanner/StubMergerIR 的模块别名调用
- BuildPipeline 的 mlir-opt -> mlir-translate 降级管线去掉开关门,改为恒执行
- backend_dir_suffix 改名 mlir_dir_suffix 并恒返回 _mlir:TempDir/OutputDir/includes 缓存继续落在 *_mlir,避免复用旧 LLVM 后端的 .ll/obj
- project.vpj 删除已失效的 options.target
|
2026-10-03 19:26:24 +08:00 |
|
TermiNexus
|
c2d7480f3d
|
fix(transpyv): 槽视图统一 cast 到声明类型(47 处,含 codegen 自身)
同 includes 的同类修正:把一级指针 i8* 隐式塞进二级注解(i8** / str*)。
TransPyV 侧 coerce(ExprGenBase._ptr_cast_reason)没有 TPC 那样的「值侧是显式
指针 cast ⇒ 按 bitcast 重解释」豁免,故一旦用新构建的 TransPyV 编到这些文件
必然 fail-fast(回归测试首爆点在 includes/llvmlite 侧,本仓同形态站点随后必然
同样触发)。
涉及的两种形态:
· `slot: str | t.CPtr = (t.CPtr)(addr)` —— cast 目标是一级 t.CPtr
· `nm_slot: str* = (t.CPtr)(addr)` —— 注解 str* 即 i8**
统一改为 cast 到声明类型:`(str | t.CPtr)(addr)` / `str*(addr)`(后者与
includes/sys.vp `argv_arr: str* = str*(...)` 同一写法)。
本仓 47 处 / 6 文件:
App/lib/core/Gen/VarGenMixin.vp 3
App/lib/core/Gen/TranslatorGenMixin.vp 8
App/lib/core/Gen/Func/FuncGenMixin.vp 13
App/lib/core/Gen/AsyncGenMixin.vp 15
App/lib/core/Gen/DebugInfoGen.vp 6
App/lib/Stub/StubGen/Converter.vp 2
Converter.vp:107 的 `_g_pyi_cdef_names: str | t.CPtr = None` 保持原样
(None 即空指针,任何指针类型均可,不属本类问题)。
只提交本 6 个文件;本仓其余未提交改动(CallGenBase/CallGenDispatch/CallGenFd/
CallGenProp/Generator/Translator/VLogger)与本迁移无关,保持不动。
|
2026-09-29 15:10:33 +08:00 |
|
TermiNexus
|
aa52cf157d
|
revert(transpyv): 回滚跨模块链表 Next 改访问器(改由编译器沿继承链解析字段名)
回滚 13080f6 的 110 处访问器调用,恢复裸字段访问 `x.Next`。
理由:该批访问器是把访问移到定义模块内执行,**绕开**了"继承字段名解析",
属于规避而非修复;缺陷本体在 TPC 侧(导入侧继承展平把泛型基类的继承字段
记成 __inherited_N 占位名,名字丢失)。TPC 已按语义修正:
· e6451a07 继承展平沿继承链取真实字段名(泛型特化回退模板名),
展平表直接落 `[("Next", <槽位类型>), ...]`,属性访问是普通表命中;
· 3ca46c01 顺带修掉 _get_or_create_struct 里"同名枚举成员遮蔽类定义"的 i32 出口。
因此源码侧恢复为唯一写法(裸字段访问),由编译器负责解析。
注:本 commit 只回滚访问器;13080f6 里夹带的 CallGenProp.vp 续行合并(非访问器改动)
已在工作区保留(未提交)。
|
2026-09-28 21:48:53 +08:00 |
|
TermiNexus
|
13080f646f
|
fix(transpyv): 跨模块链表 Next 字段改用访问器(消除 __inherited_N 占位名 fail-fast)
c 源码违规:llvmlite 的 Value/ParamNode/Function/Param/GlobalVariable/PhiIncoming/
SwitchCase 的 Next 继承自泛型基类 GSListNode[T],而其泛型特化体不在任何 .vpi 中
⇒ 导入侧 class_members 只有 __inherited_N 占位名;严格属性解析(回退已移除)下
裸写 `x.Next` fail-fast。现场:CallGenCall.vp `cur_fb = cur_fb.Next` 报
"[fast-fail] 属性 Next 在类 ParamNode 中找不到(class_members=[__inherited_0, Ty])"。
按仓库既有约定(_Type.md:链表遍历用 paramnode_get_next/paramnode_set_next;
VarGenMixin/TypeSpec/StructGenMixin/VpiReader 等已如此书写)统一改为访问器:
value_get_next/value_set_next、paramnode_get_next/paramnode_set_next、
function_get_next、param_get_next、globalvariable_get_next、
phiincoming_set_next、switchcase_set_next
覆盖 24 个文件共 110 处(含 CallGenProp.vp:122 的嵌套读 cur_arg_pc.Next)。
访问器在 includes 侧为定义模块内直通实现(None 守卫 + x.Next),语义等价、零行为
变化。已全量扫描 core\Gen 全 47 文件与 Stub/Phase/core/main:App 侧已无裸继承字段
访问(剩余 .Next 命中全部在注释里)。
|
2026-09-28 21:20:58 +08:00 |
|
TermiNexus
|
d579d70113
|
fix(TransPyV): 修正形参/字段链节点的注解为 llvmlite.ParamNode*
c 类(源码违规):这些变量由 new_param_node 构造、或取自 get_struct_fields /
param_list_append / function_get_param_head,实际是 llvmlite.ParamNode 链节点,
注解却写成 llvmlite.Function*。旧的无条件指针 bitcast 掩盖了该错误,严格指针规则下暴露。
涉及:VarGenMixin / CallGenVt / VpiReader / ClassGenEnum / ClassGenVTable /
ExprGenName / FuncGenMixin / FuncGenDef / TypeGenResolve / TypeSpec /
StmtGenCifMixin / AssignGenMixin(纯注解替换,零语义变化)。15 行。
|
2026-09-28 17:54:13 +08:00 |
|
TermiNexus
|
a7af34bd7e
|
修正了部分代码的表达方式,最后可用版本,mlirlite 已基本完善
|
2026-09-23 17:41:49 +08:00 |
|
TermiNexus
|
951b89be36
|
修正了部分代码的表达方式,最后可用版本,正在为 mlirlite 做准备
|
2026-09-23 16:09:32 +08:00 |
|
TermiNexus
|
a5ceb3d4eb
|
增加 JIT REPL
|
2026-09-21 16:17:19 +08:00 |
|
TermiNexus
|
9910e05760
|
修复了一些错误,更改了一点语法
|
2026-09-18 20:00:40 +08:00 |
|
TermiNexus
|
9e2ccbfab7
|
将部分 | t.CPtr 修正为 rawptr[T]
|
2026-09-18 17:56:24 +08:00 |
|
TermiNexus
|
cb0836de8a
|
清理了 t.CVoid
|
2026-09-16 16:06:48 +08:00 |
|
TermiNexus
|
9a191daa8d
|
错拼 rowptr 改为 rawptr
|
2026-09-16 11:42:28 +08:00 |
|
TermiNexus
|
7cba4cbc95
|
chore: 清理超长历史注释,并一并提交并行会话的代码改动
注释清理(65 文件 / 约 -2578 行 / 约 516 处):删除/压缩叙述式历史注释——多行根因叙事、工作代号段(D25/D30/N11/B5/S4/阶段E 等)、改前改后与先例叙述、逐条推导块,压成一行讲清作用信息;契约类注释(用途、参数与返回、关键约束与不变量、IR 结构说明)与被注释掉的代码一律保留
存疑 标记 6 处一字未动:StubMergerStore.vp、VpiReader.vp、VLogger.vp、AssignGenMixin.vp、CallGenLib.vp、CallGenLeafKit.vp
本次一并带入并行会话的代码改动(同批文件,按文件粒度无法拆分):fileio.File -> rowptr[fileio.File] 等
已知副作用/残留:① CallGenDispatch.vp 有 2 行非注释行的行尾被 LF->CRLF 规范化(纯字节变化,无文本改动);② core/Gen 区约 24 处压缩因并行会话整文件覆写被写回原样,尚未生效(StmtGenCifMixin/ClassGenVTable/FuncGenDef/ClassGenEnum/StructGenMixin/TypeSpec 等)
清单与复跑判据见 Debugger/comment_cleanup_summary.md(该目录不受版本控制)
|
2026-09-16 11:27:05 +08:00 |
|
TermiNexus
|
cb430bf00a
|
perf(gen): 结构体/CTypedef 查名加索引,热点线性查名补首字符预筛
StructGenMixin.find_struct:索引可信且查询名非空时,未命中即判定确无同名条目,跳过 O(n) 精确扫描(此前索引只短路命中、未命中仍全表扫描,实测 527 万次逐条 strcmp 即源于此)。
TypeGenCType:新增 CTypedef 名索引(开放寻址、槽存 index+1、Built==len 才可信、不可信或未命中回退线性扫描、clear_ctypedefs 同步复位),消除 lookup_ctypedef 约 445 万次 strcmp。
补首字符预筛:StubMergerIR._FindSha1ByModName、CallGenBase._ensure_method_declare、VarGenMixin.find_var、CallGenLeafKit.find_func_entry_in_table(_owned)(首字符不等即判不等,匹配结果与顺序不变)。
|
2026-09-14 04:15:36 +08:00 |
|
TermiNexus
|
17f109e204
|
fix(tpv): 修复 vpi 重导出包前缀与 D25 变量名悬垂,补齐 fatal_error 刷盘
VpiReader 包 __init__ 重导出补包前缀,类注册与方法声明两遍化,按需注入依赖 vpi(先登记后注入防环,失败撤销登记);VarGenMixin 的 add_var 深拷贝变量名,符号表条目不再依赖 AST tree 生命周期;CallGenCall 的 list 内建与泛型基类判定类名来源回退到接收者实际 struct 名;TypeGenErr 的 fatal_error 退出前 fflush;StubMergerBuild 每模块重置 vpi 注入去重表
|
2026-09-12 19:00:19 +08:00 |
|
TermiNexus
|
82eea2719f
|
refactor(tpv): rowptr[T] 迁移 + D 表定长缓冲改精确分配 + SHA1 前缀判定收敛(D1/D3/D4/D5/D6/D7/C10)
|
2026-09-12 11:09:35 +08:00 |
|
TermiNexus
|
a4bc5dc0ce
|
refactor(tpv): 删除 IsPtrElement 字段,指针元素语义承载于 Spec.ElemBits
- TypeSpec 抽 _spec_clone(消除 SpecWithSign/Source/ElemBits 三处重复逐字段拷贝)
- 新增 SpecWithElemBits:覆盖元素槽位宽(独立副本不驻留,ElemBits 不在驻留键内)
- set_var_ptr_element 改写 Spec.ElemBits=64;Spec 不可承载(非指针/缺失)即 fail-fast
- 新增 var_is_ptr_element(PtrLevel>=1 且 Elem.Bits==8 且 ElemBits==64,排除真实 i64* 与纯 str)
- ExprGenName 4 处下标读写切读该入口;GenTypes 删 VarEntry.IsPtrElement
|
2026-09-11 22:09:18 +08:00 |
|
TermiNexus
|
9e461d21cb
|
refactor(tpv): 删除 AnnotClassName 字段,注解类名统一承载于 Spec.SourceName
- GenTypes 删 VarEntry.AnnotClassName / FieldEntry.AnnotClassName
- set_var_annot_class_name / add_field 改为写入 Spec(Spec 为 None 时建 TS_UNKNOWN 承载,
不表态具体类型,等价原 Spec 缺失);删 1b 的 AnnotClassName 专属深拷贝
- var_annot_class_name / get_field_annot_class_name 去旧字段回退分支
- 剩余 7 处直读(StmtGenCifMixin list/dict 5 处、CallGenMixin CPtr 2 处)改走封装
|
2026-09-11 22:06:00 +08:00 |
|
TermiNexus
|
95133d8483
|
refactor(tpv): 变量/字段注解类名读取统一走 Spec.SourceName 封装
- VarGenMixin 新增 var_annot_class_name(SourceName 优先,回退 AnnotClassName)
- 变量侧类名恢复与诊断读取切读:ExprGenAttr(5) / ExprGenOps(6) / ExprGenName(1)
/ CallGenDispatch(3) / CallGenCall / CallGenProp / CallGenVt / ExprGenCls / AssignGenMixin / MatchGenMixin
- ExprGenAttr 字段侧直读改走 get_field_annot_class_name
|
2026-09-11 22:02:28 +08:00 |
|
TermiNexus
|
029a423f55
|
feat(tpv): Spec 增 SourceName 承接注解来源名(类名块基础设施)
- TypeSpec 新增 SourceName 字段:注解书写形态名(裸名/模块限定名/t.XXX attr/mangled),
与 BaseName(LLVM 注册名)命名域不同;不参与驻留键,避免条目暴增与线性查找变慢
- 新增 SpecWithSource(独立副本、不驻留、幂等)/ SpecSourceName 读取入口 / _spec_set_source_name
- set_var_annot_class_name 与 add_field 注解侧填 SourceName
- get_field_annot_class_name 切读 SourceName 优先(3 个调用点自动生效)
|
2026-09-11 21:54:10 +08:00 |
|
TermiNexus
|
7fedf8daad
|
feat(tpv): Spec 注解侧填符号性(SpecWithSign + 变量/字段接入)
- TypeSpec 新增 SpecWithSign:整数 TS_INT↔TS_UINT 切换 + 驻留(SpecToText 键区分符号)
- set_var_annot_class_name 接入:注解类名提取符号性,补 Spec 无符号性
- add_field 接入:字段注解类名提取符号性,补 Spec 无符号性
|
2026-09-11 21:48:23 +08:00 |
|
TermiNexus
|
ff7caa57e8
|
feat(tpv): S3 条目双写接线,三个唯一创建点填 TypeSpec
- GenTypes: VarEntry / FieldEntry / FuncEntry 各加 Spec 字段(FuncEntry 合并为单个整签名 Spec,替代设计 D4 的 RetSpec+ParamSpecs,理由见注释)
- VarGenMixin: add_var 新增 _spec_of_var_alloca,用 alloca.Ty 的 pointee 构造 Spec(is_ptr_type 判定)
- StructGenMixin: add_field 统一在两条写入分支之后填 Spec(PermPool 驻留故无需 DeepCopyType)
- CallGenLeafKit: _register_global_func / add_func_to_table 初始化为 None;update_global_func_typestr 新增 _build_func_spec 填整签名 Spec(用 function_get_param_head 两遍遍历,变参取 func.IsVarArg,避免 SpecFromLLVMType 的 Func 分支丢变参)
- 注: 当前尚无读取方;驻留表溢出会导致该条目 Spec=None(已记录,S4 改 fatal)
|
2026-09-11 20:43:17 +08:00 |
|
TermiNexus
|
cfb92e5da5
|
初步清理 t. 类型异味
|
2026-09-11 18:36:32 +08:00 |
|
TermiNexus
|
d99b6268de
|
refactor(tpv): Gen 目录按前缀分组迁移子目录 + REnum.kind() 编译期转 __tag
- Gen/*.vp 按前缀分组迁入 Call/Class/Expr/Func/Stmt/Type 子目录,import 同步更新(BuildPipeline/Generator/StructGenMixin 等)
- CallGenDispatch: REnum.kind() 前置拦截 → bitcast i32* + load(读 __tag),杜绝方法查找兜底误绑 AST.kind(this 偏移语义错误)
- 留根:Assign/Async/Base/Imports/Match/Struct/Translator/Var 单文件前缀 + GenApi/GenTypes/Generator/__init__
|
2026-08-28 14:16:03 +08:00 |
|
TermiNexus
|
ab0f37e1a8
|
更新,可自举
|
2026-08-27 09:48:20 +08:00 |
|
TermiNexus
|
89995dffde
|
refactor(gen): 去除 Handles 委托层——链式化 + GenTypes/GenApi 迁移
- Gen 内部 1742 处 HandlesX.func() 改 self.Gen.Y.method() 链式调用
- 数据类/常量迁移 GenTypes.vp(10 类 + CLASS_META_*/META_*/SEQ_KIND_*/FIELD_MAX 等)
- 管线/保留文件经 GenApi.vp 模块级入口(48 函数带类型注解,从 Gen 方法签名自动生成)
- 删除 26 个纯委托 Handles 文件,仅留 5 个实体文件(Base/Translator/Expr/ExprCall/ExprCallTable)
- 修复字段分裂:TypeGenErr CurrentFile/TraceCount 链式化;CallGenBase TempDir/Cexport 真源化
|
2026-08-21 06:32:40 +08:00 |
|
TermiNexus
|
593332636f
|
全部整理上传
|
2026-08-17 04:27:29 +08:00 |
|
TermiNexus
|
6677da99f7
|
refactor(gen): P6 方法化 - StmtGen/AssignGen/VarGen/ImportsGen/TranslatorGen Mixin
5 个新 Mixin(92 方法)承接 HandlesBody/If/While/For/Return/Nonlocal/Match/Enum/AnnAssign/AugAssign/Var/Imports/Translator/Main 的无状态函数与 _g_ 全局;15 个 Handles 模块改为一行委托(调用方零改动);Generator 组合扩展至 12 Mixin,__init__ 初始化 8 个新字段;BuildPipeline/main 注入 14 个模块 set_global_gen;修复 ImportsGenMixin 与 TypeGenMixin 的 CurrentFile 重复字段冲突(改 HandlesType 委托,延迟 import 规避循环依赖)。
|
2026-08-10 18:42:07 +08:00 |
|