module: depend on ext/standard for more basic constants like INF/NAN
[m6w6/ext-psi] / src / types / decl_var.c
index 60431d551a0eb8d530c99959db3b5fe79393efa7..990b9aeceb4ff3154331792314b4b9ca11a8e1e9 100644 (file)
@@ -80,20 +80,19 @@ void psi_decl_var_dump(int fd, struct psi_decl_var *var)
        dprintf(fd, "%s%s",
                        psi_t_indirection(var->pointer_level - !!var->array_size),
                        var->name ? var->name : "/**/");
-       if (var->array_size) {
+       if (var->array_size && var->arg->type->type != PSI_T_FUNCTION) {
                dprintf(fd, "[%u]", var->array_size);
        }
 }
 
 bool psi_decl_var_validate(struct psi_data *data, struct psi_decl_var *dvar,
-               struct psi_decl *decl, struct psi_let_exp *let_exp,
-               struct psi_set_exp *set_exp)
+               struct psi_validate_scope *scope)
 {
        bool okay = false;
-       struct psi_let_exp *current_let_exp = let_exp;
-       struct psi_set_exp *current_set_exp = set_exp;
 
-       if (current_let_exp) {
+       if (scope && scope->current_let) {
+               struct psi_let_exp *current_let_exp = scope->current_let;
+
                /* walk up the let expression tree until found */
                while ((current_let_exp = current_let_exp->outer)) {
                        struct psi_decl_var *svar = current_let_exp->var;
@@ -114,7 +113,9 @@ bool psi_decl_var_validate(struct psi_data *data, struct psi_decl_var *dvar,
                                dvar->fqn = psi_decl_var_name_prepend(dvar->fqn, svar->name);
                        }
                }
-       } else if (current_set_exp) {
+       } else if (scope && scope->current_set) {
+               struct psi_set_exp *current_set_exp = scope->current_set;
+
                /* walk up the set expression tree until found */
                while ((current_set_exp = current_set_exp->outer)) {
                        struct psi_decl_var *svar = psi_set_exp_get_decl_var(
@@ -137,7 +138,10 @@ bool psi_decl_var_validate(struct psi_data *data, struct psi_decl_var *dvar,
                }
        }
 
-       if (decl && !okay && psi_decl_get_arg(decl, dvar)) {
+       if (!okay && scope && scope->impl && psi_impl_get_decl_arg(scope->impl, dvar)) {
+               okay = true;
+       }
+       if (!okay && scope && scope->cb_decl && psi_decl_get_arg(scope->cb_decl, dvar)) {
                okay = true;
        }