fix(gen): c.Asm/c.LLVMIR void 调用 hit_box 命中标记,修复 StringTest 编译报 Asm 外部函数未登记
拆分后 _tc_h2_c_special 以 None 表示未命中,但 translate_c_asm/ translate_c_llvmir 对 void(无输出)asm 返回 None 表示已处理无返回值, 两者混淆导致 translate_call 继续走外部函数路径 → WARN 外部函数返回 类型未登记 Asm/AsmInp + t.ASM_DESCR 被当 CDefine 常量赋值 FATAL。 新增 hit_box(t.CPtr,[0]=1)区分命中,Asm/LLVMIR 分支置位, translate_call 命中且返回 None 时视为已处理直接返回。
This commit is contained in:
1 parent
9f44abe645
commit
2f3320ffde
3 files changed
+34
-5
No files matched your search
@@ -163,12 +163,13 @@ def _tc_h2_c_special(pool: memhub.MemBuddy | t.CPtr,
|
||||
trans: HT.Translator | t.CPtr,
|
||||
func_name: str,
|
||||
cargs: list[ast.AST | t.CPtr] | t.CPtr,
|
||||
can: t.CSizeT) -> llvmlite.Value | t.CPtr:
|
||||
can: t.CSizeT,
|
||||
hit_box: t.CPtr = None) -> llvmlite.Value | t.CPtr:
|
||||
"""c.Deref/Asm/LLVMIR 等特殊调用(委托到 gen._tc_h2_c_special)"""
|
||||
import lib.core.Gen.Generator as Generator
|
||||
g: Generator.Generator | t.CPtr = (Generator.Generator | t.CPtr)(t.CVoid(HandlesExprCall._g_gen, t.CPtr))
|
||||
if g is not None:
|
||||
return g._tc_h2_c_special(pool, builder, mod, cl, funcs_ptr, func_count, trans, func_name, cargs, can)
|
||||
return g._tc_h2_c_special(pool, builder, mod, cl, funcs_ptr, func_count, trans, func_name, cargs, can, hit_box)
|
||||
return None
|
||||
def _tc_h3_stdarg_cast(pool: memhub.MemBuddy | t.CPtr,
|
||||
builder: llvmlite.IRBuilder | t.CPtr,
|
||||
|
||||
Reference in new issue
Block a user