* threaded parser
[m6w6/ext-psi] / src / module.c
index 9de278f96cf8ca66c0d2a3de5f71b53128559770..c369dc604f896d6f71f1f118df27812354efc42f 100644 (file)
@@ -166,19 +166,18 @@ static PHP_FUNCTION(psi_dump)
 {
        php_stream *s;
        zval *r = NULL;
-       int fd = STDOUT_FILENO;
+       struct psi_dump dump = {.fun = (psi_dump_cb) php_stream_printf};
 
        if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS(), "|r!", &r)) {
                return;
        }
        if (r) {
                php_stream_from_zval(s, r);
-
-               if (SUCCESS != php_stream_cast(s, PHP_STREAM_AS_FD | PHP_STREAM_CAST_INTERNAL, (void **)&fd, 1)) {
-                       RETURN_FALSE;
-               }
+               dump.ctx.hn = s;
+       } else {
+               dump.ctx.hn = php_stream_open_wrapper("php://output", "w", REPORT_ERRORS, NULL);
        }
-       psi_context_dump(PSI_G(context), fd);
+       psi_context_dump(&dump, PSI_G(context));
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_psi_validate, 0, 0, 1)
@@ -217,7 +216,7 @@ static PHP_FUNCTION(psi_validate)
        psi_parser_parse(&P, I);
        psi_data_ctor(&D, P.error, P.flags);
        psi_validate_scope_ctor(&S);
-       S.defs = &P.preproc->defs;
+       S.cpp = P.preproc;
 
        RETVAL_BOOL(psi_validate(&S, &D, PSI_DATA(&P)));
 
@@ -269,7 +268,7 @@ static PHP_FUNCTION(psi_validate_string)
        psi_parser_parse(&P, I);
        psi_data_ctor(&D, P.error, P.flags);
        psi_validate_scope_ctor(&S);
-       S.defs = &P.preproc->defs;
+       S.cpp = P.preproc;
 
        RETVAL_BOOL(psi_validate(&S, &D, PSI_DATA(&P)));
 
@@ -286,6 +285,7 @@ static PHP_FUNCTION(psi_validate_string)
 }
 
 PHP_MINIT_FUNCTION(psi_cpp);
+PHP_MINIT_FUNCTION(psi_builtin);
 PHP_MINIT_FUNCTION(psi_context);
 static PHP_MINIT_FUNCTION(psi)
 {
@@ -305,6 +305,9 @@ static PHP_MINIT_FUNCTION(psi)
        psi_object_handlers.free_obj = psi_object_free;
        psi_object_handlers.clone_obj = NULL;
 
+       if (SUCCESS != PHP_MINIT(psi_builtin)(type, module_number)) {
+               return FAILURE;
+       }
        if (SUCCESS != PHP_MINIT(psi_cpp)(type, module_number)) {
                return FAILURE;
        }
@@ -316,11 +319,13 @@ static PHP_MINIT_FUNCTION(psi)
 }
 
 PHP_MSHUTDOWN_FUNCTION(psi_cpp);
+PHP_MSHUTDOWN_FUNCTION(psi_builtin);
 PHP_MSHUTDOWN_FUNCTION(psi_context);
 static PHP_MSHUTDOWN_FUNCTION(psi)
 {
        PHP_MSHUTDOWN(psi_context)(type, module_number);
        PHP_MSHUTDOWN(psi_cpp)(type, module_number);
+       PHP_MSHUTDOWN(psi_builtin)(type, module_number);
 
        UNREGISTER_INI_ENTRIES();