basic support for builtins
[m6w6/ext-psi] / src / types / cpp_macro_call.c
index 4bd3932..e1277ca 100644 (file)
 #include "cpp.h"
 #include "data.h"
 
-struct psi_cpp_macro_call *psi_cpp_macro_call_init(const char *name,
+struct psi_cpp_macro_call *psi_cpp_macro_call_init(zend_string *name,
                struct psi_plist *args)
 {
-       struct psi_cpp_macro_call *call = calloc(1, sizeof(*call));
-       call->name = strdup(name);
+       struct psi_cpp_macro_call *call = pecalloc(1, sizeof(*call), 1);
+       call->name = zend_string_copy(name);
        call->args = args;
        return call;
 }
@@ -40,14 +40,14 @@ struct psi_cpp_macro_call *psi_cpp_macro_call_init(const char *name,
 struct psi_cpp_macro_call *psi_cpp_macro_call_copy(
                struct psi_cpp_macro_call *call)
 {
-       struct psi_cpp_macro_call *copy = calloc(1, sizeof(*copy));
-       copy->name = strdup(call->name);
+       struct psi_cpp_macro_call *copy = pecalloc(1, sizeof(*copy), 1);
+       copy->name = zend_string_copy(call->name);
        if (call->token) {
                copy->token = psi_token_copy(call->token);
        }
        if (call->args) {
                copy->args = psi_plist_copy(call->args,
-                               (void (*)(void*)) psi_token_copy_ctor);
+                               (void (*)(void*)) psi_num_exp_copy_ctor);
        }
        return copy;
 }
@@ -59,13 +59,11 @@ void psi_cpp_macro_call_free(struct psi_cpp_macro_call **call_ptr)
 
                *call_ptr = NULL;
 
-               free(call->name);
+               zend_string_release(call->name);
                if (call->args) {
                        psi_plist_free(call->args);
                }
-               if (call->token) {
-                       free(call->token);
-               }
+               psi_token_free(&call->token);
                free(call);
        }
 }
@@ -75,7 +73,7 @@ void psi_cpp_macro_call_dump(int fd, struct psi_cpp_macro_call *call)
        size_t i = 0;
        struct psi_num_exp *num;
 
-       dprintf(fd, "%s(", call->name);
+       dprintf(fd, "%s(", call->name->val);
        while (psi_plist_get(call->args, i++, &num)) {
                if (i > 1) {
                        dprintf(fd, ", ");