From a6bae51236677d95cb329d5b20806465c0260394 Mon Sep 17 00:00:00 2001 From: Scott MacVicar Date: Sat, 16 Jul 2011 14:43:01 -0700 Subject: [PATCH] Fixed PHP 5.4 building Summary: Fixed PHP 5.4 building * class names became constants * return_reference is stored in zend_function.fn_flags * deal with znode reorganisation Test Plan: Build against php 5.4 Build against php 5.3 Reviewers: scoates CC: Differential Revision: 682 --- extension/xhprof.c | 19 +++++++++++++++++-- 1 files changed, 17 insertions(+), 2 deletions(-) diff --git a/extension/xhprof.c b/extension/xhprof.c index 7001d12..33311b3 100644 --- a/extension/xhprof.c +++ b/extension/xhprof.c @@ -28,6 +28,7 @@ #include "php_ini.h" #include "ext/standard/info.h" #include "php_xhprof.h" +#include "Zend/zend_extensions.h" #include #include #include @@ -898,7 +899,7 @@ size_t hp_get_function_stack(hp_entry_t *entry, static char *hp_get_function_name(zend_op_array *ops TSRMLS_DC) { zend_execute_data *data; char *func = NULL; - char *cls = NULL; + const char *cls = NULL; char *ret = NULL; int len; zend_function *curr_func; @@ -942,7 +943,12 @@ size_t hp_get_function_stack(hp_entry_t *entry, /* we are dealing with a special directive/function like * include, eval, etc. */ +#if ZEND_EXTENSION_API_NO >= 220100525 + curr_op = data->opline->extended_value; +#else curr_op = data->opline->op2.u.constant.value.lval; +#endif + switch (curr_op) { case ZEND_EVAL: func = "eval"; @@ -1660,13 +1666,22 @@ ZEND_DLEXPORT void hp_execute_internal(zend_execute_data *execute_data, if (!_zend_execute_internal) { /* no old override to begin with. so invoke the builtin's implementation */ zend_op *opline = EX(opline); +#if ZEND_EXTENSION_API_NO >= 220100525 + temp_variable *retvar = &EX_T(opline->result.var); + ((zend_internal_function *) EX(function_state).function)->handler( + opline->extended_value, + retvar->var.ptr, + (EX(function_state).function->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? + &retvar->var.ptr:NULL, + EX(object), ret TSRMLS_CC); +#else ((zend_internal_function *) EX(function_state).function)->handler( opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference ? &EX_T(opline->result.u.var).var.ptr:NULL, EX(object), ret TSRMLS_CC); - +#endif } else { /* call the old override */ _zend_execute_internal(execute_data, ret TSRMLS_CC); -- 1.7.5.4