#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);
+ call->name = zend_string_copy(name);
call->args = args;
return call;
}
struct psi_cpp_macro_call *call)
{
struct psi_cpp_macro_call *copy = calloc(1, sizeof(*copy));
- copy->name = strdup(call->name);
+ copy->name = zend_string_copy(call->name);
if (call->token) {
copy->token = psi_token_copy(call->token);
}
*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);
}
}
+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->val);
+ while (psi_plist_get(call->args, i++, &num)) {
+ if (i > 1) {
+ dprintf(fd, ", ");
+ }
+ psi_num_exp_dump(fd, num);
+ }
+ dprintf(fd, ")");
+}