From 94b174c8a09e8e78fad76386aff23ed5779bcf4d Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 3 Oct 2026 21:17:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(tpv):=20=E8=A1=A5=E9=BD=90=20asm=5Farg=5Fca?= =?UTF-8?q?p=20=E5=A3=B0=E6=98=8E=E4=B8=8E=E5=B5=8C=E5=A5=97=E6=95=B0?= =?UTF-8?q?=E7=BB=84=20element=20=E9=A2=84=E7=AE=97=E6=BC=8F=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一条提交(3426139)中两处改动实际未落盘(编辑动作报告成功但文件内容未变), 导致 TransPyC 编译报 NameError: 未定义名称 'asm_arg_cap'。 - CallGenCBuiltin:补 asm_arg_cap 声明(按操作数个数给足内联汇编实参表容量), args_buf 改用该容量分配(此前 4 处用法已改为 asm_arg_cap,声明却缺席) - TranslatorGenMixin:嵌套数组 element 预算 192 → 768(含子数组类型前缀) --- App/lib/core/Gen/Call/CallGenCBuiltin.vp | 5 ++++- App/lib/core/Gen/TranslatorGenMixin.vp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/App/lib/core/Gen/Call/CallGenCBuiltin.vp b/App/lib/core/Gen/Call/CallGenCBuiltin.vp index c547295..f0f6d71 100644 --- a/App/lib/core/Gen/Call/CallGenCBuiltin.vp +++ b/App/lib/core/Gen/Call/CallGenCBuiltin.vp @@ -1418,7 +1418,10 @@ novirtual class CallGenCBuiltin(CallGenBase.CallGenBase): # ============================================================ # 6. 构建参数列表文本(仅输入操作数) # ============================================================ - args_buf: str = pool.alloc(ASM_ARGS_BUF_SIZE) + # 每个实参 = 类型文本(MLIR 内联具名结构体完整字段体,可达 512 字节) + # + 值名;固定 ASM_ARGS_BUF_SIZE(512) 只够一个短类型,须按操作数个数给足。 + asm_arg_cap: sizet = sizet(operand_count + 1) * 544 + 64 + args_buf: str = pool.alloc(asm_arg_cap) if args_buf is None: return None args_buf[0] = '\0' diff --git a/App/lib/core/Gen/TranslatorGenMixin.vp b/App/lib/core/Gen/TranslatorGenMixin.vp index e729ca1..cb57200 100644 --- a/App/lib/core/Gen/TranslatorGenMixin.vp +++ b/App/lib/core/Gen/TranslatorGenMixin.vp @@ -242,7 +242,7 @@ novirtual class TranslatorGenMixin: pass if is_nested_arr != 0: cnt_total_n: sizet = sizet(arr_count) - buf_size_n: sizet = 128 + cnt_total_n * 192 + buf_size_n: sizet = 128 + cnt_total_n * 768 buf_n: str = pool.alloc(buf_size_n) if buf_n is None: return None