TermiNexus
|
369afb5011
|
fix(generic): 恢复泛型特化发射主路径
补回 _specialize_generic_class 的 deepcopy/改名/字段与方法 T 替换/_EmitClassLlvm 发射逻辑,list[...].__len__ 与 get 正常生成;源码不再支持 CPtr[...],统一写 T*;编译错误只由主进程输出一次。
|
2026-10-18 19:50:32 +08:00 |
|
TermiNexus
|
09553401e7
|
build(vast_c): 使用 mingw64 gcc 重建 _parser.pyd
修复 32/64 位 DLL 不匹配导致的 ImportError。
|
2026-10-18 19:29:49 +08:00 |
|
TermiNexus
|
c8e49a60ed
|
feat(vast): C 解析器补齐 T | None 与语句级声明
支持 T | None、typedef/define/static/export/extern/inline 变量形态;C 解析失败不再回退纯 Python,直接 fail-fast;同步重建 _parser.pyd。
|
2026-10-18 19:26:52 +08:00 |
|
TermiNexus
|
109e71a477
|
refactor: 删除保留性兼容兜底,仅保留新语法主路径
移除 len(list) 直读 __count__、list 方法裸模板回退、旧 C* 文本标记兼容、旧联合兼容;vast 扩展过期直接报错,已重建 _parser.pyd。
|
2026-10-18 19:22:32 +08:00 |
|
TermiNexus
|
660a15bef8
|
refactor(tpc): 删除类型联合语法并将修饰迁移为 AST 字段
类型注解不再接受任何 T1 | T2;const/volatile/static/export/extern/inline/define/typedef/__attribute__/BigEndian/LittleEndian/Bit 改为注解节点字段 Markers/Attributes/ByteOrder/BitWidth;指针与引用改为 CPtr[T]/CRef[T]/CTempRef[T]/CArrayPtr[T]/CAutoPtr[T];Python 与 vast_c 两套解析器、类型解析与声明端同步;C 扩展早于 vast_c.c 时自动回退纯 Python 解析器。
|
2026-10-18 13:35:34 +08:00 |
|
TermiNexus
|
f19d25782f
|
refactor(tpc): 退役 t/c 模块并将定宽类型升级为内建
删除 lib/includes/t.py、c.py,类型模型迁入 lib/core/TypeSystem.py;移除 IsTModule/_T_MODULE_NAMES 等名称判据,语法糖与内部标记统一为裸名;builtins 的 sizet/intN/uintN/fast/least/uchar/short/long 等改为编译器内建短名。
|
2026-10-18 13:00:58 +08:00 |
|
TermiNexus
|
b49b5c3ba6
|
chore(parse): 已删除的 CIf 家族名字表补齐 CElif/CElse/CEndif
ExprParser 的 _REMOVED_CIF_NAMES 与 vast_c.c 的 Interesting/Removed 名字表原本只认 CIf/CIfdef/CIfndef,现补齐三件套六个拼写(含 c. 前缀形式),使 parser 阶段即可给出指向 cif/celif/celse 的 FailFast;_parser.pyd 同步重编。
|
2026-10-07 19:59:28 +08:00 |
|
TermiNexus
|
2514cee4c9
|
feat(lang): 同步 cif/celif/celse、值引用注解与 assert 改译 testcheck.check
vast 双路径(Python Parser/ExprParser 与 C 扩展 vast_c.c)新增 cif-celif-celse 语句族与 &T / &temp T 参数注解解析,_parser.pyd 已同步重编。HandlesIf 改认 @CIf 标记并做编译期常量求值,含运行时变量一律 fail-fast,同时删除 c.CIf 家族(c.py)。HandlesAssert 合成 testcheck.check(cond, None, msg) 调用,非字符串字面量消息报 TypeError。FuncGen 调用点按形参模式自动取址(ref 仅接受左值,右值 fail-fast;temp 物化临时栈),SymbolUtils/TypeAnnotationResolver 提供模式识别;t.py 删除 CNeedPtr。
|
2026-10-07 19:03:29 +08:00 |
|
TermiNexus
|
305242aa8a
|
feat(parse): typedef 右值纳入类型位,支持 const T / T*
X: t.CTypedef = const str / = const uint16* 现按类型位解析(含 typedef X = T 语法糖):
- 文本层:_ExpandTypeDescriptors 新增 _IsTypedefAnnotationRhs(= 右侧且语句含 CTypedef);
- 解析层:vast.Parser._TryParseAnnAssign 对 CTypedef 注解的右值走 _ParseTypeAnnotation,vast_c.c 同步并重建 _parser.pyd;
- 文本回退:TypeAnnotationResolver._NormalizeTypedefRhsText 把 const T / T* 归一为 | 联合;
- 值解析:LLVMTypeMapper.resolve_typedef_value_type 把 CConst/CVolatile 限定符标记视为无类型(_TYPEDEF_VALUE_QUALIFIERS),修 const str 被误解析成 CConst * 导致 LPCSTR 登记失败。
|
2026-10-05 20:36:29 +08:00 |
|
TermiNexus
|
397bab1360
|
chore(vast_c): 同步 C 解析器二进制产物 _parser.pyd
重新编译 vast_c 源码后的 .pyd 产物(217027 -> 220943 字节)。
|
2026-10-05 09:26:26 +08:00 |
|
TermiNexus
|
d6eefcbece
|
fix(switch): case 标签支持裸名(按值引用)并给出常量标签 fail-fast
- 裸名在 match 里是捕获模式(MatchAs),switch 里对齐 C 的 `case NAME:` 语义,
三端解析均归一为 MatchValue(Name);`_` 仍作通配(等价 default)
- includes/ast/parser.vp、lib/vast/Parser.py、lib/vast_c/vast_c.c 同步实现
- HandlesMatch:case 标签求值非编译期常量时 fail-fast(原先会因取 .constant 崩成
AttributeError),报文明确“case 标签必须是编译期常量”
|
2026-10-03 00:14:51 +08:00 |
|
TermiNexus
|
5de9cb6527
|
fix(vast_c): C 解析器补齐 match 的 is_switch,并实现 switch / fallthrough
- ParseMatch:Match 由 2 字段改为 3 字段(subject, cases, is_switch=False),
修运行期 AttributeError: 'Match' object has no attribute 'is_switch'
- 新增 ParseSwitch:switch 脱糖为 is_switch=True 的 Match,支持 case 常量/枚举
变体/多值或模式与 default:(标签非法或不支持 if 守卫时 fail-fast)
- 新增 ParseFallThrough:fallthrough 脱糖为 c.NoBreak() 标记调用
- 语句分派:match / struct 改为硬关键字,新增 switch / fallthrough 分派
|
2026-10-02 23:34:33 +08:00 |
|
TermiNexus
|
a8f6ca006d
|
feat(struct): TPC 前端支持 struct 关键字(含 C 加速解析器)
与 TransPyV/includes 侧(c27ebc1)逐点对齐:`struct X:` / `struct X(Base):` 脱糖为
`@t.NoVTable class X(t.CStruct):`,禁止 virtual/novirtual 修饰、禁止类体内 def。
- lib/vast/Parser.py:软关键字分派(语句起始 + 后随标识符;`struct = 5` 不受影响)、
_ParseStructDef(复用 _ParseClassDef 全路径 + 合成 @t.NoVTable + 追加 t.CStruct
标记基类 + 类体禁 def 校验)、_StructSyntaxError 报文、_ParseVirtualModified
显式拦截 `virtual/novirtual struct`;@deco 前缀同样支持。
- lib/vast_c/vast_c.c:同构实现(ParseStatement / ParseDecorated 分派、
ParseStructDef、ParseVirtualModified 拦截)。
- lib/vast_c/_parser.pyd:按 README §4.3 的命令重建(gcc 15.2.0)。
验证(两条路径逐一对照):bases=[t.CStruct] / [Base, t.CStruct]、
decos=[t.NoVTable];`virtual struct` 与 `struct 内 def` 均 fail-fast;
`struct = 5` 仍解析为普通赋值。
|
2026-10-01 23:07:49 +08:00 |
|
TermiNexus
|
c83fc752c6
|
fix(sizeof,parse): 尺寸链去静默兜底,解析报错可定位,补 C 解析器缺口
StructGen: _get_struct_size/_get_align 去 opaque→8/ptr_size、未知→4 兜底并补 VectorType;LiteralStructType.fields→.elements(llvmlite 无 fields,必然 AttributeError)
HandlesClassDef: union 载荷尺寸经不存在的 ir.DataLayout 静默退化成 8 字节;HandlesExprCall/ExprBuiltin: sizeof 各静默 0 分支改 fail-fast,数组元素 sizeof 统一走 _get_struct_size
HandlesFor: nonlocal struct/array 堆分配不再退化成 malloc(8)
vast/vast_c: 补一元 * / & 解析,装饰器后 extern/export 分派修复,C 侧报错带 token 与行号;StubGen.Converter: 宏展开丢尾随空行修 .pyi 缩进非法
其余为 rawptr 迁移 / fail-fast 口径等历史改动一并入库
|
2026-09-26 19:27:22 +08:00 |
|
TermiNexus
|
015fbf17cf
|
fix(tpc): 跨模块模块级变量类登记与 Mod.Var.Field 链解析;并停止跟踪 __pycache__/*.pyc
|
2026-09-12 11:51:42 +08:00 |
|
TermiNexus
|
cc2f5d34eb
|
feat(tpc): includes 只认项目配置;ASan 改为显式链接 clang64 运行库
includes 目录不再回退仓库硬编码 TransPyCRoot/includes:Phase2Translator 新增 PROJECT_INCLUDE_DIRS(INCLUDE_DIRS 置空以兼容旧引用),Config.py 从 project.vpj 的 includes 同步;HandlesImports 的模块搜索、TypeAnnotationResolver._builtins_include_dirs 一律只读项目目录。
ASan:mingw64 clang 没有 x86_64-w64-windows-gnu 目标的 ASan runtime,新增 _FindAsanRuntimeDir 定位 clang64 运行库并按 -l: 显式链接(asan_dynamic-x86_64.dll.a + runtime_thunk),定位失败即报错退出。HandlesExprFormat:i32 不再写 'l' 长度修饰符(LP64 下 printf 会按 64 位读实参)。
|
2026-09-11 22:47:21 +08:00 |
|
TermiNexus
|
a433f79f54
|
基线重置,TransPyC 不再作为直接脚手架主仓库
|
2026-09-09 14:44:44 +08:00 |
|
TermiNexus
|
45e78ad107
|
基线重置,修复了一些 bug
|
2026-09-07 14:46:02 +08:00 |
|
TermiNexus
|
15faa1f7b1
|
perf(vast_c): slots 偏移直写绕过 Python _Init,解析加速 5.5x → 10.6x
- NewNode 改用 tp_new + tp_members.offset 直接写 slots 成员(绕过 Python 层 _Init 帧,_Init 201 万次 26s 是 worker 最大 tottime)
- 布局按 _fields 顺序构建并 PyCapsule 缓存(SlotsLayout);布局缺失/参数越界回退 PyObject_Vectorcall(行为与 vast 一致)
- 修正 PyCapsule_New 成功但 SetItem 失败时的双重释放
- 验证:差分 83/83 全绿;includes/ + TransPyV/App 201 文件 vast_c vs vast 结构与位置属性零差异;基准 8.69ms → 0.82ms(10.6x)
|
2026-08-18 07:37:30 +08:00 |
|
TermiNexus
|
94a065a386
|
perf(vast_c): 节点构造 tp_new 直构试验打平,回退 Vectorcall 并记录结论
- 实测 tp_new + 逐字段 SetAttr 与 PyObject_Vectorcall 打平(基准 0.9x,略慢):PyTuple_New(0) + _fields 缓存查询 + slots 名称线性查找开销抵消 Python 帧收益
- 回退并注释说明:要降低 _Init 19.7s 需 tp_members.offset 偏移直写(风险较高另行评估)
|
2026-08-18 07:23:41 +08:00 |
|
TermiNexus
|
e37cc8d792
|
fix(vast_c): alias/keyword 节点补位置属性,201 文件全量对比零差异
- ParseImport/ParseImportFrom/ParseImportAlias:alias 节点缺 lineno/col_offset(vast 有),编译器符号注册可能按节点位置关联
- MakeKeyword:keyword 节点缺位置属性(4 个调用点:函数调用/类定义的 k=v 与 **kwargs)
- 修复后 includes/ + TransPyV/App 全部 201 个 .vp 文件 vast_c vs vast 的 dump 与位置属性完全一致(此前差异 6 文件 keyword + 2 文件 alias)
|
2026-08-18 07:07:21 +08:00 |
|
TermiNexus
|
6350b81307
|
feat(vast_c): extern/export 完整语义(注解改写+标记)并接入 vast.parse
- ParseExternDef:支持 4 种语法(extern/export [def] A(...) -> T [': pass']),返回注解改写为 <原类型> | t.State(extern)/ <原类型> | t.CExport(export),节点设 Extern=True/Export=True(对齐 vast Parser._ParseExternDef/_ParseExportDef)
- MakeTAttrNode:构造 t.Attr 注解节点(Attribute(Name('t'), attr))
- vast.parse 接入:默认走 vast_c C 加速路径(VAST_USE_C=0 禁用,=strict fail-fast 直接抛),异常回退纯 Python vast
- 差分测试 83/83 全绿(新增 7 个 extern/export 用例);includes/ 与 TransPyV/App 4 个真实 .vp 文件 C 路径与纯 Python 输出一致
|
2026-08-18 06:59:10 +08:00 |
|
TermiNexus
|
d13b966604
|
fix(vast_c): 修复三处解析节点后未消费 token 的 bug(死循环/语法错误)
- ParseAtom 普通名字分支:MakeNameNode 前未 NextTok,'x = 1' 时 idx 恒 0 → ParseModule 死循环(True/False/None 分支有 NextTok,普通名字分支遗漏)
- ParseComparison TK_OP 分支:设置 OpName 后未 NextTok 消费 < > <= >= == != 比较符(is/in 分支有)→ 'a < b' 后比较符未消费导致 unexpected token
- ParseTarget NAME 分支:MakeNameNode 前未 NextTok → 'for i in' / 推导式 target 报 expected name
三处同款根因:构造节点后忘记推进 token 游标。
差分测试 76/76 全绿;基准 5.5x 加速(11.6ms -> 2.1ms/次,真实复杂源码)
|
2026-08-18 06:50:27 +08:00 |
|
TermiNexus
|
0d15e8cb7a
|
feat(vast_c): C 版解析器阶段 0——赋值/名字/数字子集,直接构造 vast.nodes 树
- MSYS2 MinGW gcc 编译 CPython 3.12 C 扩展(_parser.pyd,-lpython312 必须置于源文件后)
- Tokenizer + 表达式/赋值/模块解析,节点通过 PyObject_Vectorcall 直接实例化 lib.vast.Nodes 类
- 输出与 vast.parse 结构完全一致(含位置属性),eval 模式复用 vast.parse 语义
- 可行性验证:200 语句文件 × 200 次基准 9.0x 加速(6.17ms -> 0.685ms/次),C 侧开销主要在节点构造,后续可继续优化
|
2026-08-18 05:45:11 +08:00 |
|