for (i = 0; i < n; ++i) {
char psi[MAXPATHLEN];
struct psi_parser P;
+ struct psi_parser_input *I;
if (MAXPATHLEN <= slprintf(psi, MAXPATHLEN, "%s/%s", ptr, entries[i]->d_name)) {
C->error(PSI_DATA(C), NULL, PSI_WARNING, "Path to PSI file too long: %s/%s",
psi, strerror(errno));
continue;
}
- if (!psi_parser_open_file(&P, psi)) {
+ if (!(I = psi_parser_open_file(&P, psi, true))) {
C->error(PSI_DATA(C), NULL, PSI_WARNING, "Failed to open PSI file (%s): %s",
psi, strerror(errno));
continue;
}
-
- while (0 < psi_parser_scan(&P)) {
- psi_parser_parse(&P, psi_token_alloc(&P));
- if (P.num == PSI_T_EOF) {
- break;
- }
- }
-
- psi_parser_parse(&P, NULL);
+ psi_parser_parse(&P, I);
psi_context_add_data(C, PSI_DATA(&P));
psi_parser_dtor(&P);
+ free(I);
}
}
zend_string *name = strpprintf(0, "psi\\%s\\%s", e->name, item->name);
zc.name = zend_string_dup(name, 1);
- ZVAL_LONG(&zc.value, psi_long_num_exp(item->num, NULL));
+ ZVAL_LONG(&zc.value, psi_long_num_exp(item->num, NULL, NULL));
zend_register_constant(&zc);
zend_string_release(name);
}