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 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php