From: Michael Wallner Date: Fri, 2 Nov 2018 08:32:13 +0000 (+0100) Subject: administrativa X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=09529efcde471127419e141807b83b37077003a0;p=m6w6%2Fext-psi administrativa --- diff --git a/Makefile.frag b/Makefile.frag index 7ad6301..5a7a877 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -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) diff --git a/src/context.c b/src/context.c index 8fdbf22..22fd915 100644 --- a/src/context.c +++ b/src/context.c @@ -58,6 +58,58 @@ #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) { diff --git a/src/cpp.c b/src/cpp.c index 05efac1..0f048b4 100644 --- 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; } diff --git a/src/marshal.c b/src/marshal.c index 9804fe0..cb0aa10 100644 --- a/src/marshal.c +++ b/src/marshal.c @@ -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); } } diff --git a/src/module.c b/src/module.c index 5ff4b50..9de278f 100644 --- a/src/module.c +++ b/src/module.c @@ -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();