From 16231050058131860f710073c17d3bca7c6637eb Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 18 Oct 2026 06:05:53 +0000 Subject: feat(operators): support global binary operator overloads Resolve exact operand types and preserve declared operator return types. Reject implicit STRING to BOOLEAN conversion at typed expression boundaries. Co-Authored-By: Claude Opus 5.5 --- lib/CodeGen/ControlFlowGen.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'lib/CodeGen/ControlFlowGen.cc') diff --git a/lib/CodeGen/ControlFlowGen.cc b/lib/CodeGen/ControlFlowGen.cc index 17f43f2..0cf0c34 100644 --- a/lib/CodeGen/ControlFlowGen.cc +++ b/lib/CodeGen/ControlFlowGen.cc @@ -204,6 +204,14 @@ void CodeGen::emitCaseStmt(CaseStmtAST *Stmt) { return nullptr; } Value *LabelValue = emitExpr(Label); + auto Overload = resolveOperator(Op, SelectorType, LabelType); + if (Overload.Signature && !Overload.Ambiguous) { + const TypeInfo *Result = resolveType(Overload.Signature->ReturnTypeName); + if (!Result || Result->Kind != TypeKind::Boolean) { + reportError("CASE comparison must return BOOLEAN"); + return nullptr; + } + } return emitBinaryOp(Op, Selected, SelectorType, LabelValue, LabelType, Branch.Line); }; if (!Branch.Lower) { -- cgit v1.3.1-4-g156e