Re: Returning References from Internal Functions
| From: | Andi Gutmans | Date: | Wed, 24 Aug 2005 00:24:14 +0000 |
| Subject: | Re: Returning References from Internal Functions | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-18330@lists.php.net to get a copy of this message | ||
OK thanks for the additional info. Will take a look.
At 05:05 PM 8/23/2005, Sara Golemon wrote:
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: staticZEND_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