X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fcontext.c;h=11b2abd00dcf1265e607e8b23e378aeaa7dfa316;hp=b98ecc2e4940cab596d9c5ce1632d804abda114a;hb=f74ce3f29e2dadd9f839c33ad5292e56e9203efd;hpb=894e0ce93f9ce82109e904ae35c249bf6abe54f1 diff --git a/src/context.c b/src/context.c index b98ecc2..11b2abd 100644 --- a/src/context.c +++ b/src/context.c @@ -284,34 +284,36 @@ zend_function_entry *psi_context_compile(struct psi_context *C) struct psi_const *c; while (psi_plist_get(C->consts, i++, &c)) { - zc.name = zend_string_init(c->name + (c->name[0] == '\\'), strlen(c->name) - (c->name[0] == '\\'), 1); - if (zend_get_constant(zc.name)) { - zend_string_release(zc.name); + if (zend_get_constant_str(c->name, strlen(c->name))) { continue; } - ZVAL_NEW_STR(&zc.value, zend_string_init(c->val->text, strlen(c->val->text), 1)); + zc.name = zend_string_init(c->name + (c->name[0] == '\\'), strlen(c->name) - (c->name[0] == '\\'), 1); switch (c->type->type) { case PSI_T_BOOL: - convert_to_boolean(&zc.value); + ZVAL_BOOL(&zc.value, c->val->ival.zend.bval); break; case PSI_T_INT: - convert_to_long(&zc.value); + ZVAL_LONG(&zc.value, c->val->ival.zend.lval); break; case PSI_T_FLOAT: - convert_to_double(&zc.value); + ZVAL_DOUBLE(&zc.value, c->val->ival.dval); break; case PSI_T_STRING: case PSI_T_QUOTED_STRING: + ZVAL_NEW_STR(&zc.value, zend_string_init(c->val->text, strlen(c->val->text), 1)); break; default: assert(0); + break; } + zend_register_constant(&zc); } } + if (C->enums) { size_t i = 0; struct psi_decl_enum *e;