TermiNexus
|
ebb291daeb
|
feat(lsp): 增加补全与签名帮助
作用域/成员/import 路径补全;签名帮助支持当前参数与同名重载;成员来自 live 文档、索引或按需解析的 .vpi。
|
2026-10-26 17:11:51 +08:00 |
|
TermiNexus
|
4aba50d60e
|
feat(lsp): 支持 ping 并宽容未知协议方法
健康检查在 initialize 前即可响应;未知请求记录 stderr 后返回 null,未知通知记录后忽略,避免插件因 MethodNotFound 判定服务端故障。
|
2026-10-26 16:31:52 +08:00 |
|
TermiNexus
|
1b21ef14d5
|
feat(lsp): 增加符号索引与导航
documentSymbol、workspace/symbol、definition、references、documentHighlight、hover 全部基于 includes/ast;索引使用独立池并在打开/关闭/保存时失效。
|
2026-10-26 16:21:44 +08:00 |
|
TermiNexus
|
dee324ed06
|
feat(lsp): 发布解析诊断
didOpen/didChange/didSave 推送 publishDiagnostics,didClose 清空;诊断解析使用按次重置的 scratch 池。
|
2026-10-26 14:55:23 +08:00 |
|
TermiNexus
|
93cd0f1ea5
|
feat(lsp): 增加 UTF-16 位置往返验证
- viper/lspPosition:line/character -> offset -> line/character
- probe Gate 1:随机 10k 个有效位置往返,覆盖 CRLF/中文/emoji
|
2026-10-26 14:27:33 +08:00 |
|
TermiNexus
|
c42ae889d1
|
feat(lsp): Gate 1 文档同步、UTF-16 位置与工作区
- LspPositions:UTF-8 字节列 / UTF-16 code unit 转换,支持 LF/CRLF/emoji
- LspDocuments:didOpen/didChange/didClose/didSave,增量与全量替换,双池复用
- LspWorkspace:file URI 解码、project.vpj 向上查找、source_dir/includes
- LspServer:请求池 mark/reset、textDocumentSync、viper/lspStats 与 viper/lspDocument
- probe --gate1:文档编辑、UTF-16 代理对、10k 次编辑与池稳定性
- 依赖 includes/memhub 的 NewMemBuddy 堆构造工厂(单独提交 fa7591e)
|
2026-10-26 14:23:12 +08:00 |
|
TermiNexus
|
3f54946af9
|
fix(pure): format pure_str in print, printf and f-strings
|
2026-10-26 13:52:09 +08:00 |
|
TermiNexus
|
d88cafa12c
|
feat(pure): integrate pure_str with lifetime and NLL
|
2026-10-26 13:52:00 +08:00 |
|
TermiNexus
|
ab562764b4
|
feat(lsp): Gate 0 协议骨架与生命周期
- 新增 lib/lsp:协议常量、stdio framing、JSON-RPC 响应、lifecycle server
- viperc --lsp:独立池、互斥校验、stdout 仅输出协议帧
- 新增 Tools/lsp/probe.py 与 ast_check.py
- Gate 0 行为验证:--build-self 后 lifecycle 探针通过
|
2026-10-26 13:48:07 +08:00 |
|
TermiNexus
|
782b4d63ff
|
feat(build): 增加 --build-self 与 copyself
- 新增 copyself:延迟后删除目标并复制文件/目录
- ViperC 新增 --build-self:自举到 __vpcbuild_2__ 后由 copyself 替换 __vpcbuild__
- 同步当前 ViperC 工作区已有的 Gen/Diag/Stub 改动
- .gitignore 忽略 __vpcbuild_* 与 _sha1_map.txt
|
2026-10-26 02:09:45 +08:00 |
|
TermiNexus
|
da636a5422
|
fix(cif): 平台宏按目标 triple 求值,属性形式不再依赖跨模块 define
- _cif_attr_value 先查平台内建宏(triple 是唯一真相源),再查本地/跨模块 DefineT:
跨模块查不到时会静默得到 0,曾把 platmacro.IS_WINDOWS 判成 0,
导致 Windows 构建误走非 Windows 分支(_io 选了 posix.fileio)
- _get_platform_macro_value 补齐 platmacro 的平台名:IS_WINDOWS/IS_WIN64/IS_LINUX/
IS_MACOS/IS_X86_64/IS_ARM64
注:本文件含此前未提交的既有改动,按整文件一并提交。
|
2026-10-25 13:05:51 +08:00 |
|
TermiNexus
|
3febb87abf
|
refactor(app): 改为直接 import io,用 io.File / io.MODE
不再用 'import io as fileio' 别名:20 个文件统一 'import io',
所有 fileio.X 调用点改为 io.X(win32.fileio 等模块路径出现在注释里的保持原样)。
|
2026-10-25 12:51:28 +08:00 |
|
TermiNexus
|
94515ddf12
|
refactor(app): win32.fileio 全部切换到跨平台 io
20 个文件把 'import win32.fileio as fileio' 改为 'import io as fileio',
文件 IO 统一走 includes/io.vp(编译期 cif 选择 win32.fileio / posix.fileio)。
依赖编译器新增的模块级 cif 条件 import(a282918)。
注:这些文件中存在此前未提交的既有改动,按整文件一并提交。
|
2026-10-25 12:45:49 +08:00 |
|
TermiNexus
|
a2829182b8
|
feat(imports): 支持模块级 cif 条件 import
- ImportsGenMixin 新增 translate_cif_imports / _collect_cif_imports_in:
用 cif 求值只收集选中分支的 Import/ImportFrom,celif 的 orelse 递归求值,
celse 按普通语句收集;普通模块级 if 原样忽略
- Translator._translate_module_level 的 import 预扫描新增 If 分支(mode 0)
- TranslatorGenMixin.translate_children 在 declare/import-scan 模式补收集(mode != 0),
避免与预扫描重复写入 from_imports
- GenApi 增加 translate_cif_imports 转发
未选中分支的模块不进入依赖闭包,因此不会被编译/链接,
可用于在平台专有模块之间二选一(如 win32.fileio / posix.fileio)。
|
2026-10-25 12:28:29 +08:00 |
|
TermiNexus
|
a20bc312ab
|
docs(classgen): 声明前置注释示例 FileW -> File
FileW 已在 includes/win32/fileio.vp 中删除,示例改用 File.__init__(同样在 self.seek 之前定义)。
|
2026-10-25 12:07:59 +08:00 |
|
TermiNexus
|
9c3ebc8a2c
|
fix(ffilib): 为 runtime CDLL thunk 创建 entry block 并移除失败静默返回
- new_builder 的 CurBlock 初值为 None,_emit 会静默丢弃指令,导致 thunk 生成空函数体(mlir-opt: empty block)
- 补 create_block + position_at_end,随后再把全部静默 return None 改为 fatal_error
- 移除两处 [ffiprobe] 调试探针
|
2026-10-24 23:57:09 +08:00 |
|
TermiNexus
|
2caf6f0795
|
fix(ffilib): runtime=True 时把 _ffilib 登记为导入模块,进入可达性扫描
Pass 0 的 _AddPending 只影响 viperbuild 的闭包 BFS,不影响 Phase1/Phase2 的 includes 可达性扫描(后者由 tr._imported_modules 驱动),所以 _ffilib 仍然没被收录、拿不到 SHA1。改为在 translate_import 里判断:若存在 runtime=True 的句柄(ViperBuild.HasRuntimeFfiHandle),则随 import ffilib 一并 NotePlainImport("_ffilib")。
|
2026-10-24 23:20:14 +08:00 |
|
TermiNexus
|
796a2f5921
|
fix(ffilib): 仅在 runtime=True 时引入 _ffilib 运行时依赖
runtime CDLL 的 thunk 需要 _ffilib.Load/Sym,但 includes 是按需可达性扫描:没有 import _ffilib 就不会收录、拿不到 SHA1。改为在 _RegisterFfiHandle 里按 runtime 判定——runtime=True 才 _AddPending("_ffilib"),纯链接期(runtime=False)的工程不会多编译这个运行时库。_check_import_sha1 也放行 _ffilib(它由生成代码引用,不是用户手写 import)。
|
2026-10-24 23:16:06 +08:00 |
|
TermiNexus
|
2411ceff8c
|
fix(ffilib): 把 _ffilib 拉进依赖闭包(Pass 0 pending + import 白名单)
thunk 生成时报 module _ffilib 未在 includes 扫描中:includes 是按需可达性扫描,没有任何文件 import _ffilib 就不会收录它。Pass 0 的 import 处理里对 ffilib 追加 pending(_ffilib);_check_import_sha1 也放行 _ffilib(防止显式 import 时报无 SHA1)。若可达性仍不生效,改用方案 B:thunk 直接调 LoadLibraryA/GetProcAddress(裸名、无需模块 SHA1),去掉对 _ffilib 的依赖。
|
2026-10-24 23:15:31 +08:00 |
|
TermiNexus
|
ecd4a0b14a
|
fix(ffilib): thunk 复用已有 declare,而不是遇到同名就跳过
探针显示 ffi_lib=add_c2 / rt=1 都已正确,说明断点在去重守卫:@add 在 declaration 阶段/vpi 注入已存在为 declare,find_func_in_module 命中后跳过了 thunk,最终留下普通 declare 导致 undefined symbol。改为按状态区分:已存在 declare -> IsDeclared 置 0 并复用(形参类型与名称沿用它的,否则函数体引用不到入参);已是指令体 define 才跳过;不存在则新建 define。
|
2026-10-24 23:03:14 +08:00 |
|
TermiNexus
|
1508563f1c
|
chore(ffilib): 临时探针(CDLL 抽取 + extern 分支的 ffi_lib/runtime)
现象与"exe 已含最新提交"矛盾:add_c2 仍生成全局、@add 无 thunk、无 _ffilib 引用。加两处 printf 定位断点:_HandleCDLL 入口打印句柄名;translate_function_def 的 extern 分支打印 fd.ffi_lib 与 FfiHandleRuntime 结果。定位后立即移除。
|
2026-10-24 22:51:31 +08:00 |
|
TermiNexus
|
c765cfa9d4
|
fix(ffilib): 模块级 ffilib.CDLL(...) 赋值不再生成全局变量
现场 main.vp 的 text.ll 里出现 @"<sha1>.add_c2"() : i32 全局,说明纯编译期配置的 CDLL 声明被当成普通模块级变量翻译了。ViperBuild 增加 IsCdlLDeclCall(复用 _IsCDLLCall,认别名与全名);TranslatorGenMixin 的模块级 Assign 分支先判它,命中则整条跳过 Pass 0 已抽取的声明。
|
2026-10-24 22:34:54 +08:00 |
|
TermiNexus
|
522075097e
|
fix(ffilib): translate_function_def 的 extern 分支也生成 runtime thunk
现场 temp/02/029af3a930989beb.text.ll 里 @add 是普通直接调用、没有 _ffilib 引用,说明 App 文件的 extern 走的是 translate_function_def 而不是 forward_declare_functions,thunk 校验挂错了地方。两处都挂:各自先查 find_func_in_module 去重;runtime=True 生成 thunk,runtime=False 保持原 declare 路径。
|
2026-10-24 22:33:14 +08:00 |
|
TermiNexus
|
36bfa4e061
|
fix(ffilib): runtime=True 不再把库路径写进 dynamic_libs
runtime=True 的库由 thunk 在运行期按绝对路径 LoadLibraryA,若同时进 dynamic_libs 会成为链接输入、生成 PE 导入表依赖,既与 thunk 重复又会重新带回 exe 同目录/PATH 的限制。改为只登记句柄与路径。
|
2026-10-24 22:31:10 +08:00 |
|
TermiNexus
|
0acbefafd8
|
feat(ffilib): runtime CDLL 生成 thunk(绝对路径 LoadLibraryA + 间接调用)
_emit_runtime_ffi_thunk 生成 define <name>(%p0..): Load(path) -> Sym(h,name) -> bitcast 成 <ret>(<params>)* -> call_indirect -> ret;符号名与普通 extern 一致(裸名),调用点零改动。路径与符号名用 ExprGenConst.create_global_string 落成常量操作数(GEP 由该助手处理)。约束:仅标量参数/返回值,结构体按值与变参 fail-fast;declare-only 阶段仍走普通 declare,避免同模块 define/declare 同名并存。
|
2026-10-24 22:20:55 +08:00 |
|
TermiNexus
|
5e038eae5e
|
feat(ffilib): 句柄表补记库路径,供 runtime thunk 使用
CDLL 句柄登记从 (名字, runtime) 扩为 (名字, runtime, 路径):_ffi_handles_path 与另外两张表平行,_RegisterFfiHandle 增加 path 参数(四条登记路径全部更新),新增 FfiHandlePath(name) 查询。runtime=True 的 thunk 将用该绝对路径调用 _ffilib.Load,从而绕开 PE 导入表的文件名查找规则。
|
2026-10-24 22:01:07 +08:00 |
|
TermiNexus
|
74a9d96d3c
|
feat(ffilib): extern <lib> name(...) 校验库句柄并按 runtime 决定行为
Pass 0 新增 CDLL 句柄表(变量名 -> runtime):_HandleCDLL 接收赋值目标名,_RegisterFfiHandle 登记,FfiHandleRuntime 提供查询(1=运行时/0=链接期/-1=未登记)。FuncGenDef 在前置声明阶段校验 ffi_lib:未绑定 ffilib.CDLL 报 NameError;runtime=True 报 NotImplementedError(需要 _ffilib 运行时符号绑定,绝不静默退化为静态链接);runtime=False 照常生成裸名 declare。
|
2026-10-24 21:12:55 +08:00 |
|
TermiNexus
|
1885370920
|
feat(ffilib): import 白名单登记 ffilib 宏模块
_check_import_sha1 对宏库有一份硬编码白名单(ctraits / viperbuild),宏库不产生代码也就没有模块 SHA1。ffilib 走同一条路,加入白名单后 import ffilib 不再报 has no registered SHA1;配置仍由 Pass 0 抽取。
|
2026-10-24 20:00:31 +08:00 |
|
TermiNexus
|
d2833f6e0c
|
fix(overload): _PyiClass 补传内存池,修复 undefined name mb
类内方法的重载后缀要调用 GenApi.overload_sig_suffix(pool, ...),但 _PyiClass 之前没有内存池参数。追加可选参数 mb 并从 _GeneratePyiFromAst 的两个调用点(模块级类、嵌套类)传下去;未传时 _PyiOverloadSuffix 返回 None,非重载路径行为不变。
|
2026-10-24 19:46:54 +08:00 |
|
TermiNexus
|
af445058b4
|
fix(overload): _translate_method 补传 ClassDef,修复 undefined name cd
方法重载需要在类体内统计同名 def 才能决定是否追加 _v{hash},但 _translate_method 之前没有 ClassDef 参数。改为从 _translate_oop_methods 把 cd 传下去(两处调用点:sig_only 预扫描与正式翻译),未传时 _method_slot_name 退回原方法名,保持非重载路径行为不变。
|
2026-10-24 19:34:22 +08:00 |
|
TermiNexus
|
51b30d3413
|
feat(ffilib): Pass 0 抽取 CDLL 构建配置
import ffilib 只记别名、不进 BFS;_ScanFile 的 Assign/Expr 分发先判 _IsCDLLCall,是则交给 _HandleCDLL。四分支:Project.StaticLib -> static_libs、Project.DynamicLib -> dynamic_libs、字符串 + runtime(True=dynamic/False=static,位置参数或关键字)、list 回退形式编译期 fail-fast。路径追加沿用 static_libs/dynamic_libs 的空格拼接格式,_ResetAll 同步清零 _ffi_alias。
|
2026-10-24 19:15:59 +08:00 |
|
TermiNexus
|
850bad4e8a
|
feat(overload): 跨模块调用 Mod.f(...) 接入重载决议
模块限定调用分支先按接收者路径解析目标模块 SHA1(含 from-import 别名),再以 prefix 模式在同名候选集里决议;vpi 注入的重载符号 {sha1}.f_v{hash} 与函数表项名 f_v{hash} 均能命中。单候选/非重载保持原 find_func_in_module 路径。至此模块级、实例方法、Class.m、静态方法、跨模块五条调用路径全部接入同一套 C++ 部分序决议。
|
2026-10-24 18:00:18 +08:00 |
|
TermiNexus
|
f54c365b20
|
feat(overload): vpi 写入端把签名后缀写进 def 名,签名 hash 与上下文无关
_overload_sig_text 算 hash 时固定传 imported_modules/from_imports/trans = None,只靠全局结构体表解析,使定义端、vpi 写入端(translator 尚未创建)、读取端天然算出同一个 hash,无需跨阶段搬运 import 上下文;解析不到即 fail-fast。Converter 新增 _PyiOverloadSuffix:同一作用域同名 def >=2 时追加 _v{hash}(方法跳过 self,@staticmethod 不跳;extern/state/export/main 不加)。读取端 _inject_function_declare 用 fd.name 拼符号,自动与定义端一致,返回/形参注解缓存也按后缀分组不再互相覆盖。
|
2026-10-24 17:29:51 +08:00 |
|
TermiNexus
|
20e31b8dbd
|
refactor(overload): 抽出不依赖 translator 的签名后缀计算(vpi 两端复用)
_overload_sig_text 拆成 _overload_sig_text_ctx(显式传 imported_modules/from_imports/trans)与薄包装;新增 _overload_sig_suffix_ctx 只返回 _v{16位签名hash}。GenApi.overload_sig_suffix 提供无 translator 的入口,供 vpi 写入端(写 def 名)与读取端(核对注入名)共用同一 hash,避免三处各算一套导致跨模块符号对不上。行为不变(尚无调用方)。注:本提交含此前未提交的既有改动。
|
2026-10-24 17:18:23 +08:00 |
|
TermiNexus
|
246d70f2fb
|
feat(overload): 静态方法与类方法的 Class.m(...) 调用接入重载决议
_translate_property_call 在候选 >=2 时用同一套决议:prefix 模式匹配 Class.m / Class.m_v{hash},静态方法 param_base=0(无 self/cls),类方法 param_base=1;新增 arg_start 参数让 cargs 跳过前 start_idx 个预置接收者(obj/cls)。call_name 仍由决议出的 Function 名生成,保证调用目标符号与定义一致。
|
2026-10-24 17:14:15 +08:00 |
|
TermiNexus
|
faea680116
|
feat(overload): 类方法与虚函数重载(符号/函数表键/vtable 槽名一致)
类内同名方法 >=2 时,方法短名追加 _v{参数签名hash}(跳过 self,static 不跳):LLVM 符号 {sha1}.Class.m_v{hash}、函数表键 Class.m_v{hash}、vtable 槽名 m_v{hash} 三者一致。vtable 收集改为先用 _method_slot_name 建槽名表:继承槽的覆盖判定按槽名比较(只有签名相同的同名方法才算覆盖),本类槽按槽名去重(重载各占一槽);__init__/__before_init__/__new__ 仍按原始名排除。实例方法调用与 Class.m(obj,...) 两条路径在候选 >=2 时用同一套决议(prefix 模式 + param_base=1),并把 method_name 换成带后缀的短名,使虚调用取到正确槽位。注:本提交含此前未提交的既有改动。
|
2026-10-24 17:02:33 +08:00 |
|
TermiNexus
|
c89a0d747c
|
feat(overload): 实参类型推导支持字段访问、函数调用结果与二元运算
字段访问按接收者类名找 FieldEntry.Spec(字段 Spec 已带注解符号性);裸名调用取被调者 Spec.Ret(被调者本身同名重载时视为未知,避免递归决议);二元运算按常规算术转换取结果类型(浮点优先、位宽取宽、同宽无符号优先,字符串拼接按左值),比较运算恒 bool。至此 ORFunc(s.f) / ORFunc(f()) / ORFunc(x + 1) 均可参与决议。
|
2026-10-24 16:42:26 +08:00 |
|
TermiNexus
|
42be750029
|
feat(overload): 实参类型推导支持 &x / *p / x[i]
此前只认常量与具名变量,ORFunc(&a) 被判成实参未定型而拒绝。补充 UnaryOp(AddrOf/Deref) 与 Subscript 的静态类型推导:&x 取 PtrLevel+1(数组取地址退化为元素指针),*p 与 x[i] 取元素/pointee 类型。
|
2026-10-24 16:40:16 +08:00 |
|
TermiNexus
|
c1d31cfafb
|
fix(overload): 决议时按需构建模块表项签名,并把调用节点传给报错
模块函数表项的 Spec 一直为 None(只有全局表由 update_global_func_spec 填写),导致所有候选被判成无签名、报 no overload matches。改为在决议时用 _build_func_spec 按需构建并缓存。同时把调用节点 cl.func 传进 resolve_overload_call,no-match/歧义/实参未定型三种报错都带上源码位置,不再缺栈帧。
|
2026-10-24 16:28:41 +08:00 |
|
TermiNexus
|
00c385dc94
|
fix(overload): 签名文本改用类内 _overload_append,避免跨 mixin 调用 FuncGenBase._append_str
FuncGenDef 与 FuncGenBase 是兄弟 mixin,MRO 中不含对方;在 FuncGenDef 里调用 self._append_str 会让调用点解析失败(method return type cannot be obtained precisely: _append_str)。改为 FuncGenDef 自己的有界追加,并把超长判定并进去重处理。
|
2026-10-24 16:19:23 +08:00 |
|
TermiNexus
|
195af1101e
|
feat(overload): 模块级函数重载决议与签名符号名
同名顶层 def 组成重载组时符号名为 {模块sha1}.{name}_v{规范参数签名hash}(仅重载组加后缀,其余保持 {sha1}.{name});签名由注解经 SpecFromLLVMType+SpecWithSign 生成,别名展开为 i32/u32,指针为 p:i32、结构体为 st:{模块sha1}.类名。调用点按 C++ 部分序决议:精确 > 提升/拓宽 > 转换(同宽符号性/指针到 void*) > 省略号,返回值不参与;唯一最优才通过,否则歧义、无匹配、实参类型无法定型均 fail-fast;默认参数参与可行性判定。重复签名、extern/state/export/main 同名、泛型同名均报错。注:本提交含此前未提交的既有改动。
|
2026-10-24 16:02:53 +08:00 |
|
TermiNexus
|
0158df6813
|
perf(TypeSpec): 驻留键与规范文本 scratch 改为 arena 常驻,类型解析零分配
SpecArenaInit 一次性分配 KeyBuf 与 (深度+2) 槽 scratch,InternSpec/_spec_to_text 不再逐次申请缓冲,只需在去重命中时归还临时 TypeSpec;main.vp 在 --detection/--detection-deep 下打开 memhub._memdbg_enable 以保留诊断。
|
2026-10-24 13:10:03 +08:00 |
|
TermiNexus
|
72eea1568c
|
fix(TypeSpec): 修复类型驻留临时对象泄漏导致 PermPool 耗尽
_spec_to_text 的逐层临时缓冲由 PermPool 改为 stdlib.malloc/free 并配对释放;InternSpec 的键缓冲在所有退出路径归还,去重命中时归还临时 TypeSpec 及独占的 BaseName(与驻留条目共享指针时不释放)。PermPool 永不 reset,此前每次类型解析泄漏一个键缓冲与临时实例,翻译大模块时耗尽 1 GiB(现场 includes/ast/parser.vp)。
|
2026-10-24 01:10:59 +08:00 |
|
TermiNexus
|
30e0a71cc6
|
fix(call): 类名与模块同名时不再误报“模块未导入”
- _fail_on_unimported_module_call 先按文件级类名表(is_file_class)与 (name, sha1) 判定类静态调用,再走模块判定
- 修复 TypeSpec.vp 中 TypeSpec.__sizeof__() 被当模块调用而报 NameError
- 注:本文件同时包含此前未提交的既有改动,按整文件提交
|
2026-10-24 00:48:17 +08:00 |
|
TermiNexus
|
e2192db72d
|
feat(viperbuild): 新增 proj.clean.all 总开关
- ViperBuild:clean.all 布尔字段 + CleanAll() 读取口
- main.vp:all 并入 build_dir / includes(个体字段写 False 无法关闭),等价整根清理 + includes 缓存
|
2026-10-24 00:43:08 +08:00 |
|
TermiNexus
|
024e61ce45
|
feat(viperbuild): build(run=, args=) 支持编译后直接运行
- ViperBuild:解析 run(bool) / args(list[str]);非空 args 隐含 run,含空格元素自动加引号,内嵌双引号 fatal
- Phase2:链接成功后按配置运行产物(命令行形式 "exe" args...),CLI --run 仍生效,phase2command 模式跳过
|
2026-10-24 00:25:47 +08:00 |
|
TermiNexus
|
22e4fc5d50
|
feat(viperbuild): 新增 proj.clean.{output,temp,build_dir,includes}
- ViperBuild:clean 嵌套布尔字段校验与 CleanOutput/CleanTemp/CleanBuildDir/CleanIncludes 读取口
- main.vp:编译前按开关清理 output / temp / 整个 buildroot(__vpcbuild__)/ includes 缓存;--clean 覆盖时跳过
|
2026-10-24 00:22:47 +08:00 |
|
TermiNexus
|
51b959de57
|
feat(viperbuild): 宏 list 解包与 proj.advanced.asan/traceback
- ViperBuild:_EvalList 同时识别 Starred 与 UnaryOp(Deref);新增 advanced 嵌套布尔字段、校验与 AdvancedAsan/AdvancedTraceback 读取口
- Translator:擦除 proj.advanced.* 宏赋值,避免生成无效 IR
- main.vp:Pass 0 后并入 BuildPipeline 模式,切换 includes 缓存后缀并清理,--repl 与 advanced 互斥
|
2026-10-24 00:14:49 +08:00 |
|
TermiNexus
|
52f3ff7f56
|
feat(define): 支持字符串 list 宏常量与 *list 解包
- AssignGenMixin:_register_cdefine_list 校验元素为字符串常量或 *other_list,\n 连接,不建全局
- TypeGenBase/TypeGenCDef:新增宏 list 常量表(register/lookup/clear),与 DefineT 同池
|
2026-10-24 00:14:08 +08:00 |
|
TermiNexus
|
8461a3da47
|
fix(viperc): typedef 强转补充 stdint/win32base 解析兜底
|
2026-10-19 19:16:46 +08:00 |
|