Problems with "return" fixed.
Issue #50 git-svn-id: http://picoc.googlecode.com/svn/trunk@365 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
2493d1ff01
commit
c920ea1771
11
parse.c
11
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue