Function calls now work.
git-svn-id: http://picoc.googlecode.com/svn/trunk@21 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
69113a26c6
commit
a8008e9ac7
10
hello.c
10
hello.c
|
@ -1,9 +1,7 @@
|
||||||
int a;
|
void fred()
|
||||||
int b;
|
|
||||||
a = 1;
|
|
||||||
while (a<=10)
|
|
||||||
{
|
{
|
||||||
a = a + 1;
|
default
|
||||||
b = 42;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fred();
|
||||||
|
|
||||||
|
|
23
parse.c
23
parse.c
|
@ -91,16 +91,13 @@ void ParseParameterList(struct LexState *CallLexer, struct LexState *FuncLexer,
|
||||||
{
|
{
|
||||||
enum ValueType Typ;
|
enum ValueType Typ;
|
||||||
union AnyValue Identifier;
|
union AnyValue Identifier;
|
||||||
enum LexToken Token = TokenNone;
|
enum LexToken Token = LexGetPlainToken(FuncLexer); /* open bracket */
|
||||||
int ParamCount;
|
int ParamCount;
|
||||||
|
|
||||||
ParamCount = 0;
|
for (ParamCount = 0; ParamCount < ParameterUsed; ParamCount++)
|
||||||
while (ParamCount < ParameterUsed && Token != TokenCloseBracket)
|
|
||||||
{
|
{
|
||||||
ParseType(FuncLexer, &Typ);
|
ParseType(FuncLexer, &Typ);
|
||||||
Token = LexGetToken(FuncLexer, &Identifier);
|
Token = LexGetToken(FuncLexer, &Identifier);
|
||||||
if (Token != TokenCloseBracket)
|
|
||||||
{
|
|
||||||
if (Token != TokenIdentifier)
|
if (Token != TokenIdentifier)
|
||||||
ProgramFail(FuncLexer, "invalid parameter");
|
ProgramFail(FuncLexer, "invalid parameter");
|
||||||
|
|
||||||
|
@ -110,17 +107,16 @@ void ParseParameterList(struct LexState *CallLexer, struct LexState *FuncLexer,
|
||||||
ProgramFail(CallLexer, "parameter %d has the wrong type", ParamCount+1);
|
ProgramFail(CallLexer, "parameter %d has the wrong type", ParamCount+1);
|
||||||
|
|
||||||
VariableDefine(FuncLexer, &Identifier.String, &Parameter[ParamCount]);
|
VariableDefine(FuncLexer, &Identifier.String, &Parameter[ParamCount]);
|
||||||
ParamCount++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Token = LexGetPlainToken(FuncLexer);
|
Token = LexGetPlainToken(FuncLexer);
|
||||||
}
|
|
||||||
|
|
||||||
if (Token != TokenComma && Token != TokenCloseBracket)
|
if (Token != TokenComma && Token != TokenCloseBracket)
|
||||||
ProgramFail(FuncLexer, "comma expected");
|
ProgramFail(FuncLexer, "comma expected");
|
||||||
}
|
}
|
||||||
|
if (ParameterUsed == 0)
|
||||||
|
Token = LexGetPlainToken(FuncLexer);
|
||||||
|
|
||||||
if (ParamCount != 0 || Token != TokenCloseBracket)
|
if (Token != TokenCloseBracket)
|
||||||
ProgramFail(CallLexer, "wrong number of arguments");
|
ProgramFail(CallLexer, "wrong number of arguments");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +141,7 @@ void ParseFunctionCall(struct LexState *Lexer, struct Value *Result, Str *FuncNa
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Token = LexGetPlainToken(Lexer);
|
Token = LexGetPlainToken(Lexer);
|
||||||
if (TokenCloseBracket)
|
if (!TokenCloseBracket)
|
||||||
ProgramFail(Lexer, "bad argument");
|
ProgramFail(Lexer, "bad argument");
|
||||||
}
|
}
|
||||||
} while (Token != TokenCloseBracket);
|
} while (Token != TokenCloseBracket);
|
||||||
|
@ -361,8 +357,6 @@ int ParseStatement(struct LexState *Lexer, int RunIt)
|
||||||
enum ValueType Typ;
|
enum ValueType Typ;
|
||||||
enum LexToken Token = LexGetToken(Lexer, &LexerValue);
|
enum LexToken Token = LexGetToken(Lexer, &LexerValue);
|
||||||
|
|
||||||
printf("Token=%d\n", (int)Token);
|
|
||||||
|
|
||||||
switch (Token)
|
switch (Token)
|
||||||
{
|
{
|
||||||
case TokenEOF:
|
case TokenEOF:
|
||||||
|
@ -497,6 +491,11 @@ int ParseStatement(struct LexState *Lexer, int RunIt)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TokenDefault:
|
||||||
|
if (RunIt)
|
||||||
|
printf("Hello\n");
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
*Lexer = PreState;
|
*Lexer = PreState;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in a new issue