Merge branch 'slimconfigure'
[m6w6/ext-psi] / src / types / free_exp.c
index 19c7a60abf60e499d146168de2265e57008e2aba..9f5361151dcc412d018b7f2a3c246c8f2ca15523 100644 (file)
@@ -86,7 +86,7 @@ static inline struct psi_decl *locate_free_decl(struct psi_plist *decls,
 }
 
 bool psi_free_exp_validate(struct psi_data *data, struct psi_free_exp *exp,
-               struct psi_impl *impl)
+               struct psi_validate_scope *scope)
 {
        size_t i;
        struct psi_decl_var *free_var;
@@ -95,23 +95,22 @@ bool psi_free_exp_validate(struct psi_data *data, struct psi_free_exp *exp,
        if (!locate_free_decl(data->decls, exp)) {
                data->error(data, exp->token, PSI_WARNING,
                                "Missing declaration '%s' in `free` statement"
-                               " of implementation '%s'", exp->func, impl->func->name);
+                               " of implementation '%s'", exp->func, scope->impl->func->name);
                return false;
        }
 
        /* now check for known vars */
        exp->let = calloc(psi_plist_count(exp->vars), sizeof(*exp->let));
        for (i = 0; psi_plist_get(exp->vars, i, &free_var); ++i) {
-               if (!psi_decl_arg_get_by_var(free_var, impl->decl->args,
-                               impl->decl->func)) {
+               if (!psi_impl_get_decl_arg(scope->impl, free_var)) {
                        data->error(data, free_var->token, PSI_WARNING,
                                        "Unknown variable '%s' of `free` statement"
                                        " of implementation '%s'",
-                                       free_var->name, impl->func->name);
+                                       free_var->name, scope->impl->func->name);
                        return false;
                }
 
-               exp->let[i] = psi_impl_get_let(impl, free_var);
+               exp->let[i] = psi_impl_get_let(scope->impl, free_var);
                assert(exp->let[i]);
        }
 
@@ -124,8 +123,9 @@ void psi_free_exp_exec(struct psi_free_exp *f, struct psi_call_frame *frame)
        void **args;
        struct psi_decl_var *dvar;
        struct psi_call_frame *free_call;
+       struct psi_context *ctx = psi_call_frame_get_context(frame);
 
-       free_call = psi_call_frame_init(frame->context, f->decl, NULL);
+       free_call = psi_call_frame_init(ctx, f->decl, NULL);
        psi_call_frame_enter(free_call);
 
        args = psi_call_frame_get_arg_pointers(free_call);