From 6713c3fd5fee2f09ee42f28dcc0a0b8b21bcb0b3 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Thu, 19 Jul 2012 18:04:57 +0200 Subject: [PATCH] Properly check if it's a function... checking the parameter count is not a correct check --- parser.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/parser.c b/parser.c index e12ff98..ac49967 100644 --- a/parser.c +++ b/parser.c @@ -67,7 +67,7 @@ typedef struct { } paramlist_t; MEM_VEC_FUNCTIONS(paramlist_t, ast_value*, p) -ast_value *parser_parse_type(parser_t *parser) +ast_value *parser_parse_type(parser_t *parser, bool *isfunc) { paramlist_t params; ast_value *var; @@ -76,19 +76,25 @@ ast_value *parser_parse_type(parser_t *parser) MEM_VECTOR_INIT(¶ms, p); + *isfunc = false; + if (!parser_next(parser)) return NULL; if (parser->tok == '(') { + *isfunc = true; while (true) { ast_value *param; + bool dummy; if (!parser_next(parser)) { MEM_VECTOR_CLEAR(¶ms, p); return NULL; } - param = parser_parse_type(parser); + param = parser_parse_type(parser, &dummy); + (void)dummy; + if (!param) { MEM_VECTOR_CLEAR(¶ms, p); return NULL; @@ -127,9 +133,10 @@ bool parser_do(parser_t *parser) { if (parser->tok == TOKEN_TYPENAME) { + bool isfunc = false; ast_function *func = NULL; lex_ctx ctx = parser_ctx(parser); - ast_value *var = parser_parse_type(parser); + ast_value *var = parser_parse_type(parser, &isfunc); if (!var) return false; @@ -150,7 +157,7 @@ bool parser_do(parser_t *parser) return false; } - if (var->params_count) { + if (isfunc) { /* a function was defined */ ast_value *fval; -- 2.39.2