X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fconst.c;h=6d44d7741602d304cb1ab90ba71d3bbfc197fdb6;hb=698841dfdd4d70d24e0b7af25ac7100bc2cb26a4;hp=a40a0e2b0eb35a86e07b5fafae391c299acbb7aa;hpb=9bcb1df0786a8193d65949c857baaba2f4296e84;p=m6w6%2Fext-psi diff --git a/src/types/const.c b/src/types/const.c index a40a0e2..6d44d77 100644 --- a/src/types/const.c +++ b/src/types/const.c @@ -23,15 +23,24 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include "php_psi_stdinc.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# include "php_config.h" +#endif #include "data.h" -struct psi_const *psi_const_init(struct psi_const_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)); + struct psi_const *c = pecalloc(1, sizeof(*c), 1); + + 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); c->val = val; return c; } @@ -42,27 +51,30 @@ 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_const_type_free(&constant->type); - free(constant->name); + psi_token_free(&constant->token); + psi_impl_type_free(&constant->type); + zend_string_release(constant->name); psi_impl_def_val_free(&constant->val); free(constant); } } -void psi_const_dump(int fd, struct psi_const *cnst) +void psi_const_dump(struct psi_dump *dump, struct psi_const *cnst) { - dprintf(fd, "const "); - psi_const_type_dump(fd, cnst->type); - dprintf(fd, " %s = ", cnst->name); - psi_impl_def_val_dump(fd, cnst->val); - dprintf(fd, ";"); + PSI_DUMP(dump, "const "); + if (cnst->type) { + psi_impl_type_dump(dump, cnst->type); + } + PSI_DUMP(dump, " %s = ", cnst->name->val); + psi_impl_def_val_dump(dump, cnst->val); + PSI_DUMP(dump, ";"); } -bool psi_const_validate(struct psi_data *data, struct psi_const *c) +bool psi_const_validate(struct psi_data *data, struct psi_const *c, + struct psi_validate_scope *scope) { - /* FIXME */ + if (!psi_impl_def_val_validate(data, c->val, c->type, scope)) { + return false; + } return true; }