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:
parent
825c393240
commit
f4b2bdcc64
15
parse.c
15
parse.c
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue