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)
#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) {
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;
}
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);
}
}
#include "parser.h"
#include "cpp.h"
-#define PSI_CPP_SEARCH
-#include "php_psi_cpp.h"
-
#if HAVE_LIBJIT
# include "libjit.h"
# ifndef HAVE_LIBFFI
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();
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();