From 5d5c14920a9aa3397d4b479c22e37392be5557f4 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 13 Oct 2026 08:47:52 +0000 Subject: feat: support comma-separated OUTPUT expressions Co-Authored-By: Claude Fable 5.1 --- lib/CodeGen/CodeGen.cc | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'lib/CodeGen/CodeGen.cc') diff --git a/lib/CodeGen/CodeGen.cc b/lib/CodeGen/CodeGen.cc index d5942e9..c0da7ee 100644 --- a/lib/CodeGen/CodeGen.cc +++ b/lib/CodeGen/CodeGen.cc @@ -1138,20 +1138,23 @@ void CodeGen::emitStmt(StmtAST *Stmt) { } if (auto *Out = dynamic_cast(Stmt)) { - bool Handled = Arrays->tryEmitArrayOutput(Out->getExpr(), *this); - if (Handled) return; - - Value *Val = emitExpr(Out->getExpr()); - const TypeInfo *TypeInfo = getExprTypeInfo(Out->getExpr()); - if (!TypeInfo) { - reportError("Cannot infer the type of the OUTPUT expression"); - return; - } - if (TypeInfo->isVoid()) { - reportError("Cannot OUTPUT the result of a PROCEDURE call"); - return; + const auto &Exprs = Out->getExprs(); + for (size_t I = 0; I < Exprs.size(); ++I) { + ExprAST *Expr = Exprs[I].get(); + if (Arrays->tryEmitArrayOutput(Expr, *this)) continue; + + Value *Val = emitExpr(Expr); + const TypeInfo *TypeInfo = getExprTypeInfo(Expr); + if (!TypeInfo) { + reportError("Cannot infer the type of the OUTPUT expression"); + continue; + } + if (TypeInfo->isVoid()) { + reportError("Cannot OUTPUT the result of a PROCEDURE call"); + continue; + } + emitOutputValue(Val, TypeInfo, I + 1 == Exprs.size()); } - emitOutputValue(Val, TypeInfo, true); return; } -- cgit v1.3.1-4-g156e