X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fconst.c;h=1a06e431eb3358492362b6cba62ab82449b7d9cb;hb=2559f07a178b681dc240e20153ff5abdff54cb34;hp=18e9da61d1e379a71a7bd6d87cab6c9a78d8b226;hpb=c9384515a81cb64d345b299908b2852f51bb8e6e;p=m6w6%2Fext-psi diff --git a/src/types/const.c b/src/types/const.c index 18e9da6..1a06e43 100644 --- a/src/types/const.c +++ b/src/types/const.c @@ -26,12 +26,17 @@ #include "php_psi_stdinc.h" #include "data.h" -struct psi_const *psi_const_init(struct psi_impl_type *type, const char *name, +struct psi_const *psi_const_init(struct psi_impl_type *type, zend_string *name, struct psi_impl_def_val *val) { struct psi_const *c = calloc(1, sizeof(*c)); + + if (name->val[0] == '\\') { + c->name = zend_string_init(&name->val[1], name->len-1, 1); + } else { + c->name = zend_string_copy(name); + } c->type = type; - c->name = strdup(name[0] == '\\' ? &name[1] : name); c->val = val; return c; } @@ -42,11 +47,9 @@ void psi_const_free(struct psi_const **constant_ptr) struct psi_const *constant = *constant_ptr; *constant_ptr = NULL; - if (constant->token) { - free(constant->token); - } + psi_token_free(&constant->token); psi_impl_type_free(&constant->type); - free(constant->name); + zend_string_release(constant->name); psi_impl_def_val_free(&constant->val); free(constant); } @@ -56,7 +59,7 @@ void psi_const_dump(int fd, struct psi_const *cnst) { dprintf(fd, "const "); psi_impl_type_dump(fd, cnst->type); - dprintf(fd, " %s = ", cnst->name); + dprintf(fd, " %s = ", cnst->name->val); psi_impl_def_val_dump(fd, cnst->val); dprintf(fd, ";"); }