diff options
author | Martijn Otto <martijn.otto@copernica.com> | 2016-05-17 13:47:20 +0200 |
---|---|---|
committer | Martijn Otto <martijn.otto@copernica.com> | 2016-05-17 13:47:20 +0200 |
commit | dd5f3a635053aa03417cdab1228e03c94b9c3136 (patch) | |
tree | 53178a459fcefdfa551eb501064e70453611788a /zend/callable.cpp | |
parent | 9f2e816c787c30ceeb139623c8dae594c4b4443d (diff) |
Fixed final compilation issues
Diffstat (limited to 'zend/callable.cpp')
-rw-r--r-- | zend/callable.cpp | 65 |
1 files changed, 16 insertions, 49 deletions
diff --git a/zend/callable.cpp b/zend/callable.cpp index f0dc3e8..1231b55 100644 --- a/zend/callable.cpp +++ b/zend/callable.cpp @@ -27,7 +27,7 @@ void Callable::invoke(INTERNAL_FUNCTION_PARAMETERS) { // find the function name const char *name = get_active_function_name(TSRMLS_C); - + // uncover the hidden pointer inside the function name Callable *callable = HiddenPointer<Callable>(name); @@ -44,7 +44,7 @@ void Callable::invoke(INTERNAL_FUNCTION_PARAMETERS) else { // construct parameters - ParametersImpl params(this_ptr, ZEND_NUM_ARGS() TSRMLS_CC); + ParametersImpl params(getThis(), ZEND_NUM_ARGS() TSRMLS_CC); // the function could throw an exception try @@ -52,11 +52,6 @@ void Callable::invoke(INTERNAL_FUNCTION_PARAMETERS) // get the result Value result(callable->invoke(params)); - // we're ready if the return value is not even used - if (!return_value_used) return; - - // @todo php 5.6 has a RETVAL_ZVAL_FAST macro that can be used instead (and is faster) - // return a full copy of the zval, and do not destruct it RETVAL_ZVAL(result._val, 1, 0); } @@ -70,10 +65,10 @@ void Callable::invoke(INTERNAL_FUNCTION_PARAMETERS) /** * Fill a function entry - * - * This method is called when the extension is registering itself, when the - * function or method introces himself - * + * + * This method is called when the extension is registering itself, when the + * function or method introduces himself + * * @param entry Entry to be filled * @param classname Optional class name * @param flags Is this a public property? @@ -83,12 +78,12 @@ void Callable::initialize(zend_function_entry *entry, const char *classname, int // fill the members of the entity, and hide a pointer to the current object in the name entry->fname = (const char *)_ptr; entry->handler = &Callable::invoke; - entry->arg_info = _argv; + entry->arg_info = _argv.get(); entry->num_args = _argc; entry->flags = flags; // we should fill the first argument as well - initialize((zend_arg_info *)entry->arg_info, classname); + initialize((zend_internal_function_info*)_argv.get(), classname); } /** @@ -96,51 +91,23 @@ void Callable::initialize(zend_function_entry *entry, const char *classname, int * @param info Info to be filled * @param classname Optional classname */ -void Callable::initialize(zend_arg_info *info, const char *classname) const +void Callable::initialize(zend_internal_function_info *info, const char *classname) const { -#if PHP_VERSION_ID >= 50400 - // up until php 5.3, the first info object is filled with alternative information, - // later it is casted to a zend_internal_function object - auto *finfo = (zend_internal_function_info *)info; - - // fill in all the members, note that return reference is false by default, - // because we do not support returning references in PHP-CPP, although Zend - // engine allows it. Inside the name we hide a pointer to the current object - finfo->_name = _ptr; - finfo->_name_len = ::strlen(_ptr); - finfo->_class_name = classname; + // store the classname + info->class_name = classname; // number of required arguments, and the expected return type - finfo->required_num_args = _required; - finfo->_type_hint = (unsigned char)_return; + info->required_num_args = _required; + info->type_hint = (unsigned char)_return; // we do not support return-by-reference - finfo->return_reference = false; - -# if PHP_VERSION_ID >= 50600 + info->return_reference = false; + // since php 5.6 there are _allow_null and _is_variadic properties. It's // not exactly clear what they do (@todo find this out) so for now we set // them to false - finfo->_allow_null = false; - finfo->_is_variadic = false; - -# else - // passing by reference is not used (only for php 5.4 and php 5.5) - finfo->pass_rest_by_reference = false; -# endif - -#else - // php 5.3 code - info->name = nullptr; - info->name_len = 0; - info->class_name = nullptr; - info->class_name_len = 0; - info->array_type_hint = false; info->allow_null = false; - info->pass_by_reference = false; - info->return_reference = false; - info->required_num_args = _required; -#endif + info->_is_variadic = false; } /** |