> We'll take a look at it as this should actually work today.
>
That's what I'd thought coming into this, but all my attempts to return a
reference failed:

My Arg Info struct:
static
    ZEND_BEGIN_ARG_INFO_EX(php_sample_retref_arginfo, 0, 1, 0)
    ZEND_END_ARG_INFO()

My reference linking:
    if (return_value_ptr) {
        zval_ptr_dtor(return_value_ptr);
    }
    SEPARATE_ZVAL_TO_MAKE_IS_REF(&val);
    ZVAL_ADDREF(val);
    *return_value_ptr = val;



There's some commented out code in there that refers to bug 34045:
/*  We shouldn't fix bad extensions here,
    because it can break proper ones (Bug #34045)
        if (!EX(function_state).function->common.return_reference) {
            EX_T(opline->result.u.var).var.ptr->is_ref = 0;
            EX_T(opline->result.u.var).var.ptr->refcount = 1;
        }
*/

With that code in there returning references would certainly never work so
I'd be curious about the events leading up to that removal as much as
anything.

> As to back porting, I don't think we should touch the stable branches.
>
Eh, it's a 50/50 on this one since the bug only effects internals code and
(last I checked) there's nothing internal that's trying to return a
reference other that OOP code (because it gets shoved into being a reference
anyway).  I only came across this because I was trying to come up with some
example code "If you wanted to do this you could...".

I know I personally would like to see it work in 5.1 at the least (being shy
of final such as we are...).  As for 5.0... yeah let's sleeping dogs lie.

-Sara

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to