#include "php_psi_stdinc.h"
#include "data.h"
-struct psi_decl_abi *psi_decl_abi_init(const char *convention)
+struct psi_decl_abi *psi_decl_abi_init(zend_string *convention)
{
- struct psi_decl_abi *abi = calloc(1, sizeof(*abi));
- abi->convention = strdup(convention);
+ struct psi_decl_abi *abi = pecalloc(1, sizeof(*abi), 1);
+ abi->convention = convention
+ ? zend_string_copy(convention)
+ : zend_string_init_interned(ZEND_STRL("default"), 1);
return abi;
}
struct psi_decl_abi *abi = *abi_ptr;
*abi_ptr = NULL;
- if (abi->token) {
- free(abi->token);
- }
- free(abi->convention);
+ psi_token_free(&abi->token);
+ zend_string_release(abi->convention);
free(abi);
}
}
-void psi_decl_abi_dump(int fd, struct psi_decl_abi *abi)
+void psi_decl_abi_dump(struct psi_dump *dump, struct psi_decl_abi *abi)
{
- dprintf(fd, "%s", abi->convention);
+ PSI_DUMP(dump, "%s", abi->convention->val);
}
static const char * const abi_ccs[] = {
"default", /* \ */
"extern", /* > - all the same */
"cdecl", /* / */
- "mscdecl",
"stdcall",
"fastcall",
};
size_t i;
for (i = 0; i < sizeof(abi_ccs) / sizeof(char *); ++i) {
- if (strcasecmp(abi->convention, abi_ccs[i])) {
+ if (!strcasecmp(abi->convention->val, abi_ccs[i])) {
return true;
}
}