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:
|
case TokenReturn:
|
||||||
if (Parser->Mode == RunModeRun)
|
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 (TopStackFrame->ReturnValue->Typ->Base != TypeVoid)
|
||||||
{
|
{
|
||||||
|
if (!ExpressionParse(Parser, &CValue))
|
||||||
|
ProgramFail(Parser, "value required in return");
|
||||||
|
|
||||||
ExpressionAssign(Parser, TopStackFrame->ReturnValue, CValue, TRUE, NULL, 0, FALSE);
|
ExpressionAssign(Parser, TopStackFrame->ReturnValue, CValue, TRUE, NULL, 0, FALSE);
|
||||||
VariableStackPop(Parser, CValue);
|
VariableStackPop(Parser, CValue);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ExpressionParse(Parser, &CValue))
|
||||||
|
ProgramFail(Parser, "value in return from a void function");
|
||||||
|
}
|
||||||
|
|
||||||
Parser->Mode = RunModeReturn;
|
Parser->Mode = RunModeReturn;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue