From c920ea177134c4277604da37a30aa9e6eb64e274 Mon Sep 17 00:00:00 2001 From: "zik.saleeba" Date: Sat, 31 Oct 2009 17:08:21 +0000 Subject: [PATCH] Problems with "return" fixed. Issue #50 git-svn-id: http://picoc.googlecode.com/svn/trunk@365 21eae674-98b7-11dd-bd71-f92a316d2d60 --- parse.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/parse.c b/parse.c index a8f5848..97a0c3b 100644 --- a/parse.c +++ b/parse.c @@ -502,14 +502,19 @@ enum ParseResult ParseStatement(struct ParseState *Parser) case TokenReturn: if (Parser->Mode == RunModeRun) { - if (!ExpressionParse(Parser, &CValue) && TopStackFrame->ReturnValue->Typ->Base != TypeVoid) - ProgramFail(Parser, "value required in return"); - if (TopStackFrame->ReturnValue->Typ->Base != TypeVoid) { + if (!ExpressionParse(Parser, &CValue)) + ProgramFail(Parser, "value required in return"); + ExpressionAssign(Parser, TopStackFrame->ReturnValue, CValue, TRUE, NULL, 0, FALSE); VariableStackPop(Parser, CValue); } + else + { + if (ExpressionParse(Parser, &CValue)) + ProgramFail(Parser, "value in return from a void function"); + } Parser->Mode = RunModeReturn; }