diff --git a/src/main/java/org/jcnc/snow/compiler/ir/builder/IRProgramBuilder.java b/src/main/java/org/jcnc/snow/compiler/ir/builder/IRProgramBuilder.java index ac5f2b4..1dfad68 100644 --- a/src/main/java/org/jcnc/snow/compiler/ir/builder/IRProgramBuilder.java +++ b/src/main/java/org/jcnc/snow/compiler/ir/builder/IRProgramBuilder.java @@ -138,9 +138,9 @@ public final class IRProgramBuilder { // ===================== Struct 降级:方法/构造 → 普通函数 ===================== /** - * 将一个 Struct 的构造函数(init)和方法(methods)降级为普通 Function,并注册进 IRProgram: + * 将一个 Struct 的所有构造函数(inits)和方法(methods)降级为普通 Function,并注册进 IRProgram: *
降级规则:
@@ -155,17 +155,20 @@ public final class IRProgramBuilder { private void lowerAndRegisterStruct(StructNode structNode, IRProgram out) { String structName = structNode.name(); - // 1) 降级处理构造函数(如有) - if (structNode.init() != null) { - FunctionNode loweredInit = lowerStructCallable( - structNode.init(), - structName + ".__init__", - structName - ); - out.add(buildFunction(loweredInit)); + // 1. 多构造函数:降级为 StructName.__init__N + if (structNode.inits() != null) { + for (FunctionNode initFn : structNode.inits()) { + String loweredName = structName + ".__init__" + initFn.parameters().size(); + FunctionNode loweredInit = lowerStructCallable( + initFn, + loweredName, + structName + ); + out.add(buildFunction(loweredInit)); + } } - // 2) 降级处理所有普通方法 + // 2. 降级处理所有普通方法 if (structNode.methods() != null) { for (FunctionNode m : structNode.methods()) { FunctionNode loweredMethod = lowerStructCallable(