X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fimpl_var.c;h=7b690bb0b074769e02a3a45cf07b2b92fe99d245;hb=ee06f0b1266635ca3cf20dd0373d358d71037ba2;hp=c793500836e4b0351bbcc4397ef25e9c7a37a771;hpb=9bcb1df0786a8193d65949c857baaba2f4296e84;p=m6w6%2Fext-psi diff --git a/src/types/impl_var.c b/src/types/impl_var.c index c793500..7b690bb 100644 --- a/src/types/impl_var.c +++ b/src/types/impl_var.c @@ -67,21 +67,27 @@ void psi_impl_var_free(struct psi_impl_var **var_ptr) } } +void psi_impl_var_dump(int fd, struct psi_impl_var *var, bool vararg) +{ + dprintf(fd, "%s%s%s", + var->reference ? "&" : "", + vararg ? "..." : "", + var->name); +} bool psi_impl_var_validate(struct psi_data *data, struct psi_impl_var *ivar, - struct psi_impl *impl, struct psi_let_exp *let_exp, - struct psi_set_exp *set_exp) + struct psi_validate_scope *scope) { - struct psi_let_exp *current_let_exp = let_exp; - struct psi_set_exp *current_set_exp = set_exp; + if (scope && scope->current_let) { + struct psi_let_exp *current_let_exp = scope->current_let; - if (current_let_exp) { while ((current_let_exp = current_let_exp->outer)) { struct psi_impl_var *svar = psi_let_exp_get_impl_var(current_let_exp); ivar->fqn = psi_impl_var_name_prepend(ivar->fqn, svar->name + 1); } - } else if (current_set_exp) { + } else if (scope && scope->current_set) { + struct psi_set_exp *current_set_exp = scope->current_set; while ((current_set_exp = current_set_exp->outer)) { struct psi_impl_var *svar = psi_set_exp_get_impl_var(current_set_exp);