From 4ac95dd5ef112e9e9dc95e71a6419496648efcc4 Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 1 Sep 2025 16:42:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20Struct=20=E5=A4=9A?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=E9=99=8D=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 lowerAndRegisterStruct 方法以支持多个构造函数 - 为每个构造函数生成独立的降级版本,命名格式为 StructName.__init__N --- .../compiler/ir/builder/IRProgramBuilder.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) 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(