From 9e882236d04e79b6bf83f159137ac852953d5e4b Mon Sep 17 00:00:00 2001 From: luke Date: Wed, 11 Jun 2025 22:52:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9loop=E7=9A=84int?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E6=9D=A1=E4=BB=B6=E4=B8=BAboolean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../semantic/analyzers/statement/LoopAnalyzer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java b/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java index 7b67005..a00d993 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java +++ b/src/main/java/org/jcnc/snow/compiler/semantic/analyzers/statement/LoopAnalyzer.java @@ -2,12 +2,12 @@ package org.jcnc.snow.compiler.semantic.analyzers.statement; import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.LoopNode; +import org.jcnc.snow.compiler.semantic.analyzers.TypeUtils; import org.jcnc.snow.compiler.semantic.analyzers.base.StatementAnalyzer; import org.jcnc.snow.compiler.semantic.core.Context; import org.jcnc.snow.compiler.semantic.core.ModuleInfo; import org.jcnc.snow.compiler.semantic.error.SemanticError; import org.jcnc.snow.compiler.semantic.symbol.SymbolTable; -import org.jcnc.snow.compiler.semantic.type.BuiltinType; import org.jcnc.snow.compiler.semantic.type.Type; /** @@ -17,7 +17,7 @@ import org.jcnc.snow.compiler.semantic.type.Type; * * 该分析器实现了 SCompiler 语言的块级作用域循环与类型健壮性,是健全语义分析的基础部分。 @@ -53,9 +53,9 @@ public class LoopAnalyzer implements StatementAnalyzer { // 3. 分析条件表达式(如 for(...; cond; ...) 或 while(cond)) var condAnalyzer = ctx.getRegistry().getExpressionAnalyzer(ln.condition()); Type condType = condAnalyzer.analyze(ctx, mi, fn, loopScope, ln.condition()); - // 条件类型必须为 int(即 bool),否则记录错误 - if (condType != BuiltinType.INT) { - ctx.getErrors().add(new SemanticError(ln, "loop 条件必须为 int 类型(表示真假)")); + // 条件类型必须为 boolean,否则记录错误 + if (TypeUtils.isLogic(condType)) { + ctx.getErrors().add(new SemanticError(ln, "loop 条件必须为 boolean")); } // 4. 分析更新语句(如 for(...; ...; update))