X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Freturn_exp.c;h=c5ee0a3bd92054e49781422a837cbdb468687216;hp=8718ecfc3877ba7b06a7616edd73ab6140f3d419;hb=c9384515a81cb64d345b299908b2852f51bb8e6e;hpb=b029005e56a8913fbb3d17ab497b4a37a00a211c;ds=sidebyside diff --git a/src/types/return_exp.c b/src/types/return_exp.c index 8718ecf..c5ee0a3 100644 --- a/src/types/return_exp.c +++ b/src/types/return_exp.c @@ -122,23 +122,32 @@ static inline bool psi_return_exp_validate_decl_args(struct psi_data *data, } bool psi_return_exp_validate(struct psi_data *data, struct psi_return_exp *exp, - struct psi_impl *impl) + struct psi_validate_scope *scope) { size_t i = 0; struct psi_decl *decl; const char *name = psi_return_exp_get_decl_name(exp); + + while (psi_plist_get(data->decls, i++, &decl)) { if (!strcmp(decl->func->var->name, name)) { - impl->decl = decl; - return psi_return_exp_validate_decl_args(data, exp, impl) && - psi_set_exp_validate(data, exp->set, impl, NULL); + scope->impl->decl = decl; + if (psi_return_exp_validate_decl_args(data, exp, scope->impl)) { + scope->current_set = exp->set; + if (psi_set_exp_validate(data, exp->set, scope)) { + scope->current_set = NULL; + return true; + } + scope->current_set = NULL; + } + return false; } } data->error(data, exp->token, PSI_WARNING, "Missing declaration '%s' for `return` statement of implementation %s", - name, impl->func->name); + name, scope->impl->func->name); return false; }