From e881bffe859e4dd04031f7aa0b19e7b8bdc5cfaa Mon Sep 17 00:00:00 2001 From: zhangxun <1958638841@qq.com> Date: Thu, 10 Jul 2025 21:08:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=87=BD=E6=95=B0=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=87=8D=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../parser/function/FunctionParser.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/parser/function/FunctionParser.java b/src/main/java/org/jcnc/snow/compiler/parser/function/FunctionParser.java index 5ba02fc..37cdea5 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/function/FunctionParser.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/function/FunctionParser.java @@ -8,16 +8,14 @@ import org.jcnc.snow.compiler.parser.base.TopLevelParser; import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.ParameterNode; import org.jcnc.snow.compiler.parser.ast.base.StatementNode; +import org.jcnc.snow.compiler.parser.context.ParseException; import org.jcnc.snow.compiler.parser.context.ParserContext; import org.jcnc.snow.compiler.parser.context.TokenStream; import org.jcnc.snow.compiler.parser.factory.StatementParserFactory; import org.jcnc.snow.compiler.parser.utils.FlexibleSectionParser; import org.jcnc.snow.compiler.parser.utils.FlexibleSectionParser.SectionDefinition; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * {@code FunctionParser} 是顶层函数定义的语法解析器, @@ -77,6 +75,17 @@ public class FunctionParser implements TopLevelParser { body.add(new ReturnNode(null, new NodeContext(line, column, file))); } + Set set = new HashSet<>(); + parameters.forEach((node) -> { + final String name = node.name(); + if (set.contains(name)) { + throw new ParseException(String.format("参数 `%s` 重定义", name), + node.context().line(), node.context().column()); + } + + set.add(name); + }); + parseFunctionFooter(ts); return new FunctionNode(functionName, parameters, returnType[0], body, new NodeContext(line, column, file));