psi_parser_parse(&P, I);
psi_context_add(C, &P);
psi_parser_dtor(&P);
- free(I);
+ psi_parser_input_free(&I);
}
}
{
zend_constant zc;
- zc.flags = CONST_PERSISTENT|CONST_CS;
- zc.module_number = EG(current_module)->module_number;
+ ZEND_CONSTANT_SET_FLAGS(&zc, CONST_CS|CONST_PERSISTENT, EG(current_module)->module_number);
if (C->consts) {
size_t i = 0;
while (psi_plist_get(C->consts, i++, &c)) {
- if (zend_get_constant_str(c->name, strlen(c->name))) {
+ if (zend_get_constant(c->name)) {
continue;
}
- zc.name = zend_string_init(c->name, strlen(c->name), 1);
+ zc.name = zend_string_copy(c->name);
switch (c->type->type) {
case PSI_T_BOOL:
case PSI_T_STRING:
case PSI_T_QUOTED_STRING:
ZVAL_NEW_STR(&zc.value, zend_string_copy(c->val->ival.zend.str));
+ if (ZSTR_IS_INTERNED(Z_STR(zc.value))) {
+ Z_TYPE_FLAGS(zc.value) = 0;
+ }
break;
default:
assert(0);
zend_string *name;
if (psi_decl_type_is_anon(e->name, "enum")) {
- name = strpprintf(0, "psi\\%s", item->name);
+ name = strpprintf(0, "psi\\%s", item->name->val);
} else {
- name = strpprintf(0, "psi\\%s\\%s", e->name, item->name);
+ name = strpprintf(0, "psi\\%s\\%s", e->name->val, item->name->val);
}
if (zend_get_constant(name)) {
void psi_context_dump(struct psi_context *C, int fd)
{
size_t i;
- struct psi_data *D;
dprintf(fd, "// psi.engine=%s\n// %lu files\n",
(char *) C->ops->query(C, PSI_CONTEXT_QUERY_SELF, NULL),