administrativa
authorMichael Wallner <mike@php.net>
Fri, 2 Nov 2018 08:32:13 +0000 (09:32 +0100)
committerMichael Wallner <mike@php.net>
Fri, 2 Nov 2018 08:32:13 +0000 (09:32 +0100)
Makefile.frag
src/context.c
src/cpp.c
src/marshal.c
src/module.c

index 7ad6301..5a7a877 100644 (file)
@@ -71,19 +71,6 @@ psi-clean: psi-clean-objects
 psi-clean-generated:
        -rm -f $(PHP_PSI_GENERATED)
 
-.PHONY: psi-clean-aux
-psi-clean-aux: psi-clean-aux-bin psi-clean-aux-src
-
-.PHONY: psi-clean-aux-src
-psi-clean-aux-src:
-       -rm -f $(PHP_PSI_BUILDDIR)/lempar.c $(PHP_PSI_BUILDDIR)/lemon.c
-
-.PHONY: psi-clean-aux-bin
-psi-clean-aux-bin:
-       -rm -f $(PHP_PSI_BUILDDIR)/lemon
-
-psi-clean: psi-clean-aux
-
 .PHONY: psi-clean-depend
 psi-clean-depend:
        -rm -f $(PHP_PSI_DEPEND)
index 8fdbf22..22fd915 100644 (file)
 
 #include "php_psi_posix.h"
 
+PHP_MINIT_FUNCTION(psi_context)
+{
+       unsigned flags = 0;
+       struct psi_context_ops *ops = NULL;
+
+#ifdef HAVE_LIBJIT
+       if (!strcasecmp(PSI_G(engine), "jit")) {
+               ops = psi_libjit_ops();
+       } else
+#endif
+#ifdef HAVE_LIBFFI
+               ops = psi_libffi_ops();
+#endif
+
+       if (!ops) {
+               php_error(E_WARNING, "No PSI engine found");
+               return FAILURE;
+       }
+
+       PSI_G(ops) = ops;
+       if (ops->load && SUCCESS != ops->load()) {
+               return FAILURE;
+       }
+
+       if (psi_check_env("PSI_DEBUG")) {
+               flags |= PSI_DEBUG;
+       }
+       if (psi_check_env("PSI_SILENT")) {
+               flags |= PSI_SILENT;
+       }
+
+       PSI_G(context) = psi_context_init(NULL, PSI_G(ops), psi_error_wrapper, flags);
+       psi_context_build(PSI_G(context), PSI_G(directory));
+
+       return SUCCESS;
+}
+
+PHP_MSHUTDOWN_FUNCTION(psi_context)
+{
+       if (psi_check_env("PSI_DUMP")) {
+               psi_context_dump(PSI_G(context), STDOUT_FILENO);
+       }
+
+       psi_context_free(&PSI_G(context));
+
+       if (PSI_G(ops)->free) {
+               PSI_G(ops)->free();
+       }
+
+       return SUCCESS;
+}
+
 struct psi_context *psi_context_init(struct psi_context *C, struct psi_context_ops *ops, psi_error_cb error, unsigned flags)
 {
        if (!C) {
index 05efac1..0f048b4 100644 (file)
--- a/src/cpp.c
+++ b/src/cpp.c
@@ -43,6 +43,9 @@ PHP_MINIT_FUNCTION(psi_cpp)
        struct psi_parser parser;
        struct psi_parser_input *predef;
 
+       PSI_G(search_path) = pemalloc(strlen(PSI_G(directory)) + strlen(psi_cpp_search) + 1 + 1, 1);
+       sprintf(PSI_G(search_path), "%s:%s", PSI_G(directory), psi_cpp_search);
+
        if (!psi_parser_init(&parser, NULL, 0)) {
                return FAILURE;
        }
index 9804fe0..cb0aa10 100644 (file)
@@ -732,7 +732,7 @@ void psi_set_to_array(zval *return_value, struct psi_set_exp *set, impl_val *r_v
 
                ZVAL_NULL(&ele);
                psi_set_exp_exec_ex(sub_exp, &ele, sym->ptr, frame);
-               add_assoc_zval(return_value, ivar->name->val + 1, &ele);
+               add_assoc_zval_ex(return_value, ivar->name->val + 1, ivar->name->len - 1, &ele);
        }
 }
 
index 5ff4b50..9de278f 100644 (file)
@@ -36,9 +36,6 @@
 #include "parser.h"
 #include "cpp.h"
 
-#define PSI_CPP_SEARCH
-#include "php_psi_cpp.h"
-
 #if HAVE_LIBJIT
 # include "libjit.h"
 # ifndef HAVE_LIBFFI
@@ -288,35 +285,11 @@ static PHP_FUNCTION(psi_validate_string)
        psi_parser_input_free(&I);
 }
 
-static ZEND_RESULT_CODE psi_ops_load()
-{
-       struct psi_context_ops *ops = NULL;
-#ifdef HAVE_LIBJIT
-       if (!strcasecmp(PSI_G(engine), "jit")) {
-               ops = psi_libjit_ops();
-       } else
-#endif
-#ifdef HAVE_LIBFFI
-               ops = psi_libffi_ops();
-#endif
-
-       if (!ops) {
-               php_error(E_WARNING, "No PSI engine found");
-               return FAILURE;
-       }
-
-       PSI_G(ops) = ops;
-       if (ops->load) {
-               return ops->load();
-       }
-       return SUCCESS;
-}
-
 PHP_MINIT_FUNCTION(psi_cpp);
+PHP_MINIT_FUNCTION(psi_context);
 static PHP_MINIT_FUNCTION(psi)
 {
        zend_class_entry ce = {0};
-       unsigned flags = 0;
 
        REGISTER_INI_ENTRIES();
 
@@ -335,40 +308,18 @@ static PHP_MINIT_FUNCTION(psi)
        if (SUCCESS != PHP_MINIT(psi_cpp)(type, module_number)) {
                return FAILURE;
        }
-
-       if (SUCCESS != psi_ops_load()) {
+       if (SUCCESS != PHP_MINIT(psi_context)(type, module_number)) {
                return FAILURE;
        }
 
-       if (psi_check_env("PSI_DEBUG")) {
-               flags |= PSI_DEBUG;
-       }
-       if (psi_check_env("PSI_SILENT")) {
-               flags |= PSI_SILENT;
-       }
-
-       PSI_G(search_path) = pemalloc(strlen(PSI_G(directory)) + strlen(psi_cpp_search) + 1 + 1, 1);
-       sprintf(PSI_G(search_path), "%s:%s", PSI_G(directory), psi_cpp_search);
-
-       PSI_G(context) = psi_context_init(NULL, PSI_G(ops), psi_error_wrapper, flags);
-       psi_context_build(PSI_G(context), PSI_G(directory));
-
        return SUCCESS;
 }
 
 PHP_MSHUTDOWN_FUNCTION(psi_cpp);
+PHP_MSHUTDOWN_FUNCTION(psi_context);
 static PHP_MSHUTDOWN_FUNCTION(psi)
 {
-       if (psi_check_env("PSI_DUMP")) {
-               psi_context_dump(PSI_G(context), STDOUT_FILENO);
-       }
-
-       psi_context_free(&PSI_G(context));
-
-       if (PSI_G(ops)->free) {
-               PSI_G(ops)->free();
-       }
-
+       PHP_MSHUTDOWN(psi_context)(type, module_number);
        PHP_MSHUTDOWN(psi_cpp)(type, module_number);
 
        UNREGISTER_INI_ENTRIES();