commit after reset fuckup
[m6w6/ext-psi] / src / types / impl_func.c
index b728b0ccc92400d3675d3c0cca4aa331729b8207..56c61d8343f657c366fa799c8b86ec4551222c91 100644 (file)
 #include "php_psi_stdinc.h"
 #include "data.h"
 
-struct psi_impl_func *psi_impl_func_init(const char *name,
+struct psi_impl_func *psi_impl_func_init(zend_string *name,
                struct psi_plist *args, struct psi_impl_type *type)
 {
-       struct psi_impl_func *func = calloc(1, sizeof(*func));
+       struct psi_impl_func *func = pecalloc(1, sizeof(*func), 1);
 
-       func->name = strdup(name);
+       func->name = zend_string_copy(name);
        func->args = args ? : psi_plist_init((psi_plist_dtor) psi_impl_arg_free);
 
        func->return_type = type;
@@ -45,9 +45,7 @@ void psi_impl_func_free(struct psi_impl_func **f_ptr)
                struct psi_impl_func *f = *f_ptr;
 
                *f_ptr = NULL;
-               if (f->token) {
-                       free(f->token);
-               }
+               psi_token_free(&f->token);
 
                psi_impl_type_free(&f->return_type);
                psi_plist_free(f->args);
@@ -56,12 +54,13 @@ void psi_impl_func_free(struct psi_impl_func **f_ptr)
                        psi_impl_arg_free(&f->vararg);
                }
 
-               free(f->name);
+               zend_string_release(f->name);
                free(f);
        }
 }
 
-bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func)
+bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func,
+               struct psi_validate_scope *scope)
 {
        int def = 0;
        size_t i = 0;
@@ -70,7 +69,7 @@ bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func)
        while (psi_plist_get(func->args, i++, &iarg)) {
                if (iarg->def) {
                        def = 1;
-                       if (!psi_impl_def_val_validate(data, iarg->def, iarg->type->type, iarg->type->name)) {
+                       if (!psi_impl_def_val_validate(data, iarg->def, iarg->type, scope)) {
                                return 0;
                        }
                } else if (def) {
@@ -78,7 +77,7 @@ bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func)
                                        "Non-optional argument %zu '$%s' of implementation '%s'"
                                        " follows optional argument",
                                        i + 1,
-                                       iarg->var->name, func->name);
+                                       iarg->var->name->val, func->name->val);
                        return false;
                }
        }
@@ -86,25 +85,25 @@ bool psi_impl_func_validate(struct psi_data *data, struct psi_impl_func *func)
        return true;
 }
 
-void psi_impl_func_dump(int fd, struct psi_impl_func *func)
+void psi_impl_func_dump(struct psi_dump *dump, struct psi_impl_func *func)
 {
-       dprintf(fd, "function %s(", func->name);
+       PSI_DUMP(dump, "function %s(", func->name->val);
        if (func->args) {
                size_t i = 0;
                struct psi_impl_arg *iarg;
 
                while (psi_plist_get(func->args, i++, &iarg)) {
                        if (i > 1) {
-                               dprintf(fd, ", ");
+                               PSI_DUMP(dump, ", ");
                        }
-                       psi_impl_arg_dump(fd, iarg, false);
+                       psi_impl_arg_dump(dump, iarg, false);
                }
 
                if (func->vararg) {
-                       dprintf(fd, ", ");
-                       psi_impl_arg_dump(fd, func->vararg, true);
+                       PSI_DUMP(dump, ", ");
+                       psi_impl_arg_dump(dump, func->vararg, true);
                }
        }
-       dprintf(fd, ") : %s%s", func->return_reference ? "&" : "",
-                       func->return_type->name);
+       PSI_DUMP(dump, ") : %s%s", func->return_reference ? "&" : "",
+                       func->return_type->name->val);
 }