Re: Always set return_value_ptr?
| From: | Anatol Belski | Date: | Sat, 03 Aug 2013 22:56:39 +0000 |
| Subject: | Re: Always set return_value_ptr? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-68365@lists.php.net to get a copy of this message | ||
Hi Nikita,
On Sat, 2013-08-03 at 20:16 +0200, Nikita Popov wrote:
> Why can't we always provide the retval ptr, even for functions that don't
> return by reference? This would allow returning zvals without having to
> copy them first (what RETVAL_ZVAL does).
were it not possible to zval_add_ref() the item one needs to return?
Possibly recursive. I can rebember doing similar to
array_init(return_value);
for(zend_hash_internal_pointer_reset(Z_ARRVAL_P(my_array));
zend_hash_has_more_elements(Z_ARRVAL_P(my_array)) == SUCCESS;
zend_hash_move_forward(Z_ARRVAL_P(my_array)))
{
zval **my_array_item;
if(zend_hash_get_current_data(Z_ARRVAL_P(my_array),
(void**)&my_array_item) == FAILURE) {
continue;
}
zend_hash_get_current_key(Z_ARRVAL_P(my_array), &string_key,
&num_key, 0)
zval_add_ref(my_array_item);
zend_hash_update(Z_ARRVAL_P(return_value), string_key,
strlen(string_key), my_array_item, sizeof(zval *), NULL);
}
That's still some overhead, but even in case my_array_item was non
scalar, that should be working. Unfortunately i've no access to that
code anymore. my_array were of course a flat array, for a complex array
it should be done recursive.
Regards
anatol