Fixed a bug which was causing declarations in functions to run even when just scanning.

git-svn-id: http://picoc.googlecode.com/svn/trunk@315 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
zik.saleeba 2009-06-02 06:07:59 +00:00
parent 825c393240
commit f4b2bdcc64

15
parse.c
View file

@ -36,6 +36,9 @@ struct Value *ParseFunctionDefinition(struct ParseState *Parser, struct ValueTyp
struct ParseState FuncBody;
int ParamCount = 0;
if (TopStackFrame != NULL)
ProgramFail(Parser, "nested function definitions are not allowed");
LexGetToken(Parser, NULL, TRUE); /* open bracket */
ParamParser = *Parser;
Token = LexGetToken(Parser, NULL, TRUE);
@ -60,15 +63,18 @@ struct Value *ParseFunctionDefinition(struct ParseState *Parser, struct ValueTyp
FuncValue->Val->FuncDef.ParamName = (void *)FuncValue->Val->FuncDef.ParamType + sizeof(struct ValueType *) * ParamCount;
for (ParamCount = 0; ParamCount < FuncValue->Val->FuncDef.NumParams; ParamCount++)
{ /* harvest the parameters into the function definition */
{
/* harvest the parameters into the function definition */
if (ParamCount == FuncValue->Val->FuncDef.NumParams-1 && LexGetToken(&ParamParser, NULL, FALSE) == TokenEllipsis)
{ /* ellipsis at end */
{
/* ellipsis at end */
FuncValue->Val->FuncDef.NumParams--;
FuncValue->Val->FuncDef.VarArgs = TRUE;
break;
}
else
{ /* add a parameter */
{
/* add a parameter */
TypeParse(&ParamParser, &ParamType, &ParamIdentifier);
FuncValue->Val->FuncDef.ParamType[ParamCount] = ParamType;
FuncValue->Val->FuncDef.ParamName[ParamCount] = ParamIdentifier;
@ -127,7 +133,8 @@ int ParseDeclaration(struct ParseState *Parser, enum LexToken Token)
if (Token == TokenVoidType && Identifier != StrEmpty)
ProgramFail(Parser, "can't define a void variable");
NewVariable = VariableDefine(Parser, Identifier, NULL, Typ, TRUE);
if (Parser->Mode == RunModeRun)
NewVariable = VariableDefine(Parser, Identifier, NULL, Typ, TRUE);
if (LexGetToken(Parser, NULL, FALSE) == TokenAssign)
{