diff options
Diffstat (limited to 'sem_check.c')
-rw-r--r-- | sem_check.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sem_check.c b/sem_check.c index fd85c98..e30d8c5 100644 --- a/sem_check.c +++ b/sem_check.c @@ -206,3 +206,30 @@ ptree *t; yyerror("Incorrect types in fuction arguments"); } + +int func_ret(t, name) +ptree *t; +char *name; +{ + if (!t) + return 0; + + if (t->type == ASSIGNOP && t->l) + if (t->l->type == ID && !strcmp(t->l->attr.nval->name, name)) + return 1; + + return func_ret(t->l, name) || func_ret(t->r, name); +} + +void check_func_return(t,name) +ptree *t; +char *name; +{ + char buf[100]; + + if (!func_ret(t,name)) { + snprintf(buf, 100, "Function %s does not return a value\n", + name); + yyerror(buf); + } +} |