From a8008e9ac7feaaa8d7c67c9cd5d5411ecf06e9db Mon Sep 17 00:00:00 2001 From: "zik.saleeba" Date: Wed, 24 Dec 2008 03:27:53 +0000 Subject: [PATCH] Function calls now work. git-svn-id: http://picoc.googlecode.com/svn/trunk@21 21eae674-98b7-11dd-bd71-f92a316d2d60 --- hello.c | 10 ++++------ parse.c | 45 ++++++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/hello.c b/hello.c index e4096d3..23513eb 100644 --- a/hello.c +++ b/hello.c @@ -1,9 +1,7 @@ -int a; -int b; -a = 1; -while (a<=10) +void fred() { - a = a + 1; - b = 42; + default } +fred(); + diff --git a/parse.c b/parse.c index 253ded4..e49f0a7 100644 --- a/parse.c +++ b/parse.c @@ -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;