zval passthru
[m6w6/ext-psi] / src / module.c
index c3728a71b961137540d7d51ae747da5824588333..aff784dbc28235c13f65583f69c58f6962638d25 100644 (file)
@@ -37,12 +37,18 @@ zend_class_entry *psi_object_get_class_entry()
        return psi_class_entry;
 }
 
-void psi_error_wrapper(PSI_Token *t, int type, const char *msg, ...)
+void psi_error_wrapper(void *context, PSI_Token *t, int type, const char *msg, ...)
 {
        va_list argv;
        const char *fn = NULL;
        unsigned ln = 0;
 
+       if (context) {
+               if (PSI_DATA(context)->flags & PSI_PARSER_SILENT) {
+                       return;
+               }
+       }
+
        if (t) {
                fn = t->file;
                ln = t->line;
@@ -50,7 +56,7 @@ void psi_error_wrapper(PSI_Token *t, int type, const char *msg, ...)
                fn = zend_get_executed_filename();
                ln = zend_get_executed_lineno();
        } else if (zend_is_compiling()) {
-               fn = zend_get_compiled_filename();
+               fn = zend_get_compiled_filename()->val;
                ln = zend_get_compiled_lineno();
        }
 
@@ -151,6 +157,8 @@ static PHP_MINIT_FUNCTION(psi)
 {
        PSI_ContextOps *ops = NULL;
        zend_class_entry ce = {0};
+       unsigned flags = psi_check_env("PSI_DEBUG") ? PSI_PARSER_DEBUG : (
+                       psi_check_env("PSI_SILENT") ? PSI_PARSER_SILENT : 0);
 
        REGISTER_INI_ENTRIES();
 
@@ -177,7 +185,7 @@ static PHP_MINIT_FUNCTION(psi)
                return FAILURE;
        }
 
-       PSI_ContextInit(&PSI_G(context), ops, psi_error_wrapper);
+       PSI_ContextInit(&PSI_G(context), ops, psi_error_wrapper, flags);
        PSI_ContextBuild(&PSI_G(context), PSI_G(directory));
 
        if (psi_check_env("PSI_DUMP")) {