+ if (!(predef = psi_parser_open_string(&parser, psi_cpp_predef, sizeof(psi_cpp_predef) - 1))) {
+ psi_parser_dtor(&parser);
+ return FAILURE;
+ }
+
+ if (!psi_parser_parse(&parser, predef)) {
+ psi_parser_input_free(&predef);
+ psi_parser_dtor(&parser);
+ return FAILURE;
+ }
+ psi_parser_input_free(&predef);
+
+ zend_hash_init(&psi_cpp_defaults, 0, NULL, NULL, 1);
+ zend_hash_copy(&psi_cpp_defaults, &parser.preproc->defs, NULL);
+
+ psi_parser_dtor(&parser);
+
+#define PSI_CPP_PRAGMA(name) \
+ zend_hash_str_add_ptr(&psi_cpp_pragmas, #name, strlen(#name), psi_cpp_pragma_ ## name)
+ zend_hash_init(&psi_cpp_pragmas, 0, NULL, NULL, 1);
+ PSI_CPP_PRAGMA(once);
+ PSI_CPP_PRAGMA(lib);
+ PSI_CPP_PRAGMA(blacklist_decl);
+ PSI_CPP_PRAGMA(blacklist_var);
+
+ return SUCCESS;