diff --git a/App/lib/core/Gen/Class/ClassGenVTable.vp b/App/lib/core/Gen/Class/ClassGenVTable.vp index dfb43d2..dd91c57 100644 --- a/App/lib/core/Gen/Class/ClassGenVTable.vp +++ b/App/lib/core/Gen/Class/ClassGenVTable.vp @@ -704,6 +704,11 @@ novirtual class ClassGenVTable(ClassGenBase.ClassGenBase): # declare、函数体整体丢失(对齐 FuncGenDef.vp:544-545)。 func.IsDeclared = 0 + # 形参表:下方"函数体段"(形参建 alloca + 登记符号)与参数创建块都要用, + # 必须声明在 decl_reuse 分支之外——复用前向声明时不再走参数创建块, + # 但函数体段仍要遍历形参,否则实参名不进符号表(NameError: 未定义名称)。 + args_node: ast.Arguments* = fd.args + if decl_reuse == 0: # 提取默认参数信息(普通方法 args[0] 是 self,不含在 param_count 中; # @staticmethod 无 self,param_count 为完整参数数) @@ -749,7 +754,7 @@ novirtual class ClassGenVTable(ClassGenBase.ClassGenBase): llvmlite.add_param(pool, func, self_ptr_ty, first_pname_buf) # 添加其他参数(支持类型注解;@staticmethod 从索引 0 开始,其余跳过索引 0 的 self/cls) - args_node: ast.Arguments* = fd.args + # args_node 已在 decl_reuse 分支之外声明(函数体段同样要用) if args_node is not None: ags: ast.Arguments* = ast.Arguments*(args_node) if ags.args is not None: