TermiNexus
|
369afb5011
|
fix(generic): 恢复泛型特化发射主路径
补回 _specialize_generic_class 的 deepcopy/改名/字段与方法 T 替换/_EmitClassLlvm 发射逻辑,list[...].__len__ 与 get 正常生成;源码不再支持 CPtr[...],统一写 T*;编译错误只由主进程输出一次。
|
2026-10-18 19:50:32 +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
|
ceb557314a
|
feat(type): 支持 T | None,等价于 T
仅允许一侧为 None 的联合;解析时剥离 None 后按剩余类型处理,其他联合仍 fail-fast。
|
2026-10-18 18:10:01 +08:00 |
|
TermiNexus
|
0bded58999
|
refactor(type): 全面清理旧联合与 t/c 标记判断
审计并修复 23 个文件:类型注解中的 T1 | T2 一律 fail-fast;typedef/define/export/extern/static/const/volatile/attribute 优先读取 Markers/Attributes/ByteOrder/BitWidth;指针统一 CPtr/rawptr/CRef/CTempRef/CArrayPtr/CAutoPtr Subscript;stub 输出统一新语法。
|
2026-10-18 18:01:20 +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
|
8d27747c7c
|
支持 tls 关键字,全面准备清退 t, c
|
2026-10-17 23:39:41 +08:00 |
|
TermiNexus
|
23b47053d9
|
chore: 同步 TransPyV→ViperC 改名、new 表达式支持与定宽字面量/窄化适配
|
2026-10-12 20:59:39 +08:00 |
|
TermiNexus
|
15f77da9d3
|
chore: 改名同步 TransPyV -> ViperC(源码/配置内的纯替换)
|
2026-10-12 15:06:48 +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
|
6a7b27e14f
|
chore(c): 清理已删除的 c.CIf 家族残留
c.py 删除 CElif/CElse/CEndif 三个类及其 Library_C 登记;HandlesSpecialCall 删除无人调用的 _HandleCIfLlvm;_REMOVED_CIF_CALL_MSG 的报文补齐 CElif/CElse/CEndif 六个拼写。Converter.py 去掉已无意义的注释掉守卫与 c.CIfndef/c.CEndif 时代注释,示例改为仍在用的 c.CUndef/c.CPragma;ExprParser/ConstEvaluator/HandlesIf 的注释把内部标记统一写成 c.@CIfdef 与 cif 标记。
|
2026-10-07 19:09:59 +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
|
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
|
74cfaeb917
|
feat(switch): 新增 switch 语句并禁止 match 内 fallthrough
- vast/Nodes.py:Match 增加 is_switch 字段(含默认值)
- vast/Parser.py:新增 _ParseSwitch(case <常量|枚举变体> / default:,desugar 为 Match(is_switch=True));match / struct / fallthrough 改为硬关键字
- vast/Unparser.py:round-trip 忠实还原 switch 与 default:
- HandlesMatch / HandlesBody:新增 in_switch_case 门控,fallthrough 只允许出现在 switch 的 case 体内
- HandlesFor:补齐嵌套函数的 saved_loop_break/continue_targets 定义(修 NameError),并隔离 in_switch_case
- LLVMCG/BaseGen:新增 in_switch_case 状态
|
2026-10-02 23:15:42 +08:00 |
|
TermiNexus
|
cc0615e519
|
feat(match): fallthrough 软关键字 + case 内 break 跳出 match
- vast/Parser:语句位置识别裸 `fallthrough`(仅整条语句命中),脱糖为 c.NoBreak()
标记调用;作标识符的写法不受影响
- HandlesBody:`c.NoBreak()` 标记语句不产出 IR(语义由 HandlesMatch 消费)
- HandlesMatch:新增 _HandleMatchCaseBody(case 内 break 目标 = match 的 AfterBB,
经 loop_break_targets 压栈/出栈,不影响外层循环)与 _FallThroughTarget;
9 处 fallthrough 由"只留无终结符块"改为显式 br 下一个 case body
|
2026-10-02 22:33:26 +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
|
e5a6616f8b
|
feat(static): static 修饰符改为语句起始前置 + 新增 static def(旧的注解位置响亮失败)
vast/Parser.py:ParseStatement 与 _ParseDecorated 新增 static def 分派(判据要求第 2 个 token 是 def,故 static = 5 / static x = 5 不会被误吃成函数定义);新增 _ParseStaticDef,镜像 _ParseExportDef 但**不改写返回注解**、而是在既有装饰器之后合成 @t.CStatic
SymbolUtils.py:_TYPE_DESCRIPTOR_MARKERS 删掉 static;新增 _StaticPositionSyntaxError 与 _InStaticOldAnnotationPosition,旧注解位置(名字: static 类型)一律 SyntaxError 并提示前置形式,绝不静默改写;_EXPORT_EXTERN_MODIFIERS 加入 static,_ExpandExportExternVar 新增前置分支——export/extern 追加在类型右侧(或 t.CExport / 或 t.State),static **前置在类型最左**(t.CStatic 加竖线),允许初值;数组前缀展开仍在修饰符展开之前
与 includes/ast/parser.vp 的 pending_static 通道同源:static 名字: 类型 = 值 产出与手写 名字: t.CStatic | 类型、装饰器 @t.CStatic 逐字段同形
|
2026-09-28 13:49:28 +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
|
63bc435723
|
feat(tpc): 注解支持 C 风格指针后缀 T*(int* → int | t.CPtr 多级展开)
|
2026-08-28 08:01:03 +08:00 |
|
TermiNexus
|
0230385891
|
feat(tpc): 新增单目 * / & 运算符(Deref/AddrOf)AST 节点与 LLVM 翻译
|
2026-08-28 07:34:58 +08:00 |
|
TermiNexus
|
567d925235
|
perf(tpc): PROF 热点优化——vast 节点 _Init unroll 特化 + isfile 结果缓存
- vast/Nodes.py:_MakeNodeClass 动态生成 __init__,全位置参数路径按字段
索引直赋(unroll,去 zip 迭代器),语义与通用路径完全等价
(PROF:_Init 158 万次 29s 最大纯 Python 热点,实测 ~1.4x)
- Phase2Translator.py:新增模块级 _CachedIsFile(编译进程内文件状态稳定),
替换全部 os.path.isfile 存在性检查(PROF:2.6 万次 16.4s)
|
2026-08-22 03:08:29 +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
|
043c65ee52
|
fix(vast): FunctionDef 槽位补 Extern/Export,修 __slots__ 回归 AttributeError
_ParseExternDef/_ParseExportDef 设置 node.Extern/node.Export(动态属性),
__slots__ 类无 __dict__ 导致 AttributeError: 'FunctionDef' object has no
attribute 'Extern'。FunctionDef/AsyncFunctionDef 的 attrs 补
Extern/Export(_FUNC_ATTRS),槽位随之包含;unparse 用 getattr 读取兼容。
extern/export 冒烟 + vast 差分 51/53 0 FAIL。
|
2026-08-18 05:12:09 +08:00 |
|
TermiNexus
|
9605af8ea1
|
perf(vast): AST 节点类加 __slots__,去 __dict__ 提速降内存
AST 基类 __slots__=(),131 个动态节点类按 fields+attrs 生成 __slots__,
_Init 改 object.__setattr__;类默认值改为 _node_defaults 字典(原类属性
与 __slots__ 冲突)。解析提速 ~9%,实例内存 Name 由 48B+独立 dict 降为
80B 平铺,无 __dict__ 残留。Python 3.12 pickle 对 __slots__ 类开箱即用
(__reduce_ex__(2)),131 类 pickle roundtrip 全过,vast 差分 51/53 0 FAIL。
|
2026-08-17 23:27:43 +08:00 |
|
TermiNexus
|
e25095da43
|
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。
|
2026-08-17 22:20:28 +08:00 |
|
TermiNexus
|
7e710d1e9a
|
perf(vast): _Peek(0) 增加游标缓存,命中率 87% 降低解析热点开销
TokenStream._Peek 是 cProfile 最大热点(1588 万次调用,累计 4.86s)。
递归下降解析常在同一游标位置重复窥视(_At/_AtOp/_AtName 等),
增加 _PeekCacheIdx/_PeekCacheTok 字段缓存最近一次 offset=0 结果,
命中时跳过 len() 与列表索引;游标移动后 Idx 失配自然失效。
实测大文件解析命中率 87.1%(6503 次调用仅 717 次真实访问),
vast 差分测试 51/53 通过、0 FAIL,正确性无回归。
|
2026-08-17 20:29:34 +08:00 |
|
TermiNexus
|
2dbf348329
|
perf(vast): 回滚 _PosInfo 增量行查找(Python while 慢于 C bisect)
新 cProfile(232s)显示 _PosInfo tottime 1.74s→2.84s:增量 while 顺延的 Python 循环开销大于 _bisect(C 级 O(log n)),且 _Make 先 start 后 end 两次调用跨行时退化。回滚为 bisect + 保留 isascii 快速路径(避免 encode 分配)。
|
2026-08-17 19:46:14 +08:00 |
|
TermiNexus
|
58ce673f01
|
perf(compile): TPC 编译提速——并行 worker 满核 + vast 解析器热点优化
cProfile 分析(206s 全量重编译 TPV):~163s 为 ProcessPool 等待(16 核机器仅用 8 worker),vast.parse 35.9s(1231 次)为最大 Python 计算热点。
- Phase2Translator:4 处 n_workers 上限 8 → os.cpu_count()(16 核满负荷),并行翻译/llc 编译利用率翻倍
- vast/Tokenizer._PosInfo:isascii 快速路径 + 行索引增量查找(~300 万次调用,免每次 bisect+encode)
- vast/Tokenizer._EmitOp:运算符按首字符分组,58 万次调用从 42 项全表 startswith 降到 2-3 项
- vast/Tokenizer._ScanName:内联 _IsIdentPart(70 万次循环免函数调用)
- Projectrans/Utils:find_reachable 用 deque + 后缀索引替代 pop(0)/全表扫描;topological_sort 用反向邻接表 + heapq 替代每轮 sort+全图扫描
|
2026-08-17 18:56:55 +08:00 |
|
TermiNexus
|
5d93692baa
|
feat(vast/ast): 新增 export 软关键字声明 CExport 函数(等价 t.CExport)
允许 4 种语法(配不配 def 都一样):export def A(...) / export A(...),
与 extern 对称。返回注解改写为 <原类型> | t.CExport,复用既有 CExport
路径(符号名裸名、不加模块 SHA1 头);无 body 形式消费本行 NewLine。
TPC 侧 vast:_ParseExportDef + Unparser 还原(Export=True);
TPV 侧 includes/ast:Keyword.Export + FLAG_IS_EXPORT=16(追加末尾)+
_is_funcdef_kw/_parse_funcdef 支持。
|
2026-08-17 12:12:32 +08:00 |
|
TermiNexus
|
ce568e10b7
|
feat(vast/ast): 新增 extern 软关键字声明 FFI 函数(等价 t.State)
TPC 侧 vast:
- extern [def] A(...) [-> T] [: pass] 四种语法解析为 FunctionDef
- 返回注解改写为 <原类型> | t.State,复用 TPC 的 IsState 外部函数路径
- 设 Extern 标记,Unparser 还原 extern 语法(round-trip 一致)
TPV 侧 includes/ast(自举前端):
- Keyword.Extern 枚举与 intern,_is_funcdef_kw 软判定
(extern def / extern Name+'( 或 '[')
- _parse_funcdef 支持无冒号声明、FLAG_IS_EXTERN 标记、
returns 改写为 <原类型> | t.State(vpi 含 State → 定义端裸名 + 不生成函数体)
|
2026-08-17 10:41:44 +08:00 |
|
TermiNexus
|
aa9042173e
|
fix(vast): 修复 match 类模式与 or 模式解析与 CPython 不一致
- case ClassName.attr(...) 类模式:扫描属性链末尾判断 '(',
此前只查首 token 后 '(',LLVMType.Ptr(...) 被误解析为
MatchValue(Call) → TPC 对 renum match 走值模式分支,对枚举
构造表达式运行时求值生成 ptrtoint SSA,LLVM switch 报
'case value is not a constant integer'
- case 0 | 1 值模式:字面量/符号不再消费顶层 '|',留给
_ParsePattern 组 MatchOr(此前 ParseExpr 吞掉 '|' 成 BinOp)
|
2026-08-17 10:22:29 +08:00 |
|
TermiNexus
|
d7213d2197
|
fix(vast): 修复 Tokenizer 行号登记与 import/f-string 位置属性与 CPython 不一致
- _ScanStringBody 三引号内引号对 Pos+=1 后未 continue,双重自增
跳过一个字符,若恰为换行则漏登 _LineStarts 行首,导致其后所有
行号偏移 -1、字面量 col_offset 超行尾,TPC 引号判断失败将
单引号单字符误推断为 i8*(1.LOG 编译错误根因)
- alias 节点位置改为名称起始(asname 结束),与 CPython 一致
- f-string 内部表达式绝对偏移补上 FSTRING token 源码起始
|
2026-08-17 10:08:43 +08:00 |
|
TermiNexus
|
920c0ba677
|
fix(vast): 修复分号分隔语句误将 AST 节点传给 _FixLoc 导致 AttributeError
ParseModule/_ParseSuite 的分号分隔分支曾用 stmt 节点调用 _FixLoc,
应传入 Token。改为不补位置(extra 由内部解析器自设位置),
修复 'Assign' object has no attribute 'Line' 崩溃。
|
2026-08-17 09:38:00 +08:00 |
|
TermiNexus
|
6fc9e19e24
|
feat(vast): 新增自研 Viper/Python 语法解析器取代标准库 ast
TPC 侧取缔对 Python 标准库 ast 模块的依赖,改用 lib/vast 包:
- Nodes: 与 CPython 3.12 ast 完全同构的 131 个节点类(含抽象基类继承)
- Tokenizer: 词法分析(缩进/字符串/f-string/数字/运算符/软关键字)
- ExprParser: 表达式递归下降解析(优先级/lambda/推导式/f-string/切片)
- Parser: 语句解析(def/class/if/for/try/with/match/import/注解)
- Utils/Unparser: walk/dump/unparse/copy_location/literal_eval 等辅助
- 软关键字 fn/fun/func/function 并入解析器, 废除 ExpandSoftKeywords 预处理
- lib/_bootstrap 将 lib 目录加入 sys.path, import vast as ast 零修改替换
- 52 个文件 import ast 替换为 import vast as ast; 94 文件差分测试 0 失败
|
2026-08-17 09:36:38 +08:00 |
|