Function calls now work.

git-svn-id: http://picoc.googlecode.com/svn/trunk@21 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
zik.saleeba 2008-12-24 03:27:53 +00:00
parent 69113a26c6
commit a8008e9ac7
2 changed files with 26 additions and 29 deletions

10
hello.c
View file

@ -1,9 +1,7 @@
int a;
int b;
a = 1;
while (a<=10)
void fred()
{
a = a + 1;
b = 42;
default
}
fred();

45
parse.c
View file

@ -91,36 +91,32 @@ void ParseParameterList(struct LexState *CallLexer, struct LexState *FuncLexer,
{
enum ValueType Typ;
union AnyValue Identifier;
enum LexToken Token = TokenNone;
enum LexToken Token = LexGetPlainToken(FuncLexer); /* open bracket */
int ParamCount;
ParamCount = 0;
while (ParamCount < ParameterUsed && Token != TokenCloseBracket)
for (ParamCount = 0; ParamCount < ParameterUsed; ParamCount++)
{
ParseType(FuncLexer, &Typ);
Token = LexGetToken(FuncLexer, &Identifier);
if (Token != TokenCloseBracket)
{
if (Token != TokenIdentifier)
ProgramFail(FuncLexer, "invalid parameter");
if (Token != TokenIdentifier)
ProgramFail(FuncLexer, "invalid parameter");
if (RunIt)
{
if (Parameter[ParamCount].Typ != Typ)
ProgramFail(CallLexer, "parameter %d has the wrong type", ParamCount+1);
VariableDefine(FuncLexer, &Identifier.String, &Parameter[ParamCount]);
ParamCount++;
}
Token = LexGetPlainToken(FuncLexer);
if (RunIt)
{
if (Parameter[ParamCount].Typ != Typ)
ProgramFail(CallLexer, "parameter %d has the wrong type", ParamCount+1);
VariableDefine(FuncLexer, &Identifier.String, &Parameter[ParamCount]);
}
Token = LexGetPlainToken(FuncLexer);
if (Token != TokenComma && Token != TokenCloseBracket)
ProgramFail(FuncLexer, "comma expected");
}
}
if (ParameterUsed == 0)
Token = LexGetPlainToken(FuncLexer);
if (ParamCount != 0 || Token != TokenCloseBracket)
if (Token != TokenCloseBracket)
ProgramFail(CallLexer, "wrong number of arguments");
}
@ -145,7 +141,7 @@ void ParseFunctionCall(struct LexState *Lexer, struct Value *Result, Str *FuncNa
else
{
Token = LexGetPlainToken(Lexer);
if (TokenCloseBracket)
if (!TokenCloseBracket)
ProgramFail(Lexer, "bad argument");
}
} while (Token != TokenCloseBracket);
@ -361,8 +357,6 @@ int ParseStatement(struct LexState *Lexer, int RunIt)
enum ValueType Typ;
enum LexToken Token = LexGetToken(Lexer, &LexerValue);
printf("Token=%d\n", (int)Token);
switch (Token)
{
case TokenEOF:
@ -496,6 +490,11 @@ int ParseStatement(struct LexState *Lexer, int RunIt)
VariableDefine(Lexer, &LexerValue.String, &InitValue);
}
break;
case TokenDefault:
if (RunIt)
printf("Hello\n");
break;
default:
*Lexer = PreState;