diff --git a/includes/llvmlite/__function.vp b/includes/llvmlite/__function.vp index 37b8d61..18a963b 100644 --- a/includes/llvmlite/__function.vp +++ b/includes/llvmlite/__function.vp @@ -165,15 +165,20 @@ def new_function(pool: memhub.MemBuddy | t.CPtr, name: t.CChar | t.CPtr, def function_add_param(func: Function | t.CPtr, param: Param | t.CPtr): """将参数追加到函数参数链表""" if func is None or param is None: return - if func.Params is None: return - func.Params.append(param) + # 注意:必须先用局部变量 + 类型参数(对齐 function_move_block_to_end 注释), + # 链式 func.Params.append() 会被编译器解析成 LinkedNode.append 且 this 前移 + # sizeof(LinkedNode)(兄弟 Mixin 兜底误匹配),写穿容器前 48 字节破坏数据结构。 + params: GSList[Param] | t.CPtr = func.Params + if params is None: return + params.append(param) def function_add_block(func: Function | t.CPtr, block: BasicBlock | t.CPtr): """将基本块追加到函数块链表""" if func is None or block is None: return - if func.Blocks is None: return - func.Blocks.append(block) + blocks: GSList[BasicBlock] | t.CPtr = func.Blocks + if blocks is None: return + blocks.append(block) def function_move_block_to_end(func: Function | t.CPtr, block: BasicBlock | t.CPtr): @@ -221,8 +226,9 @@ def function_move_block_to_end(func: Function | t.CPtr, block: BasicBlock | t.CP def block_append_line(block: BasicBlock | t.CPtr, line: Line | t.CPtr): """将指令行追加到基本块""" if block is None or line is None: return - if block.Lines is None: return - block.Lines.append(line) + lines: GSList[Line] | t.CPtr = block.Lines + if lines is None: return + lines.append(line) def block_set_terminated(block: BasicBlock | t.CPtr, val: t.CInt):