H Dmitry,

----- Original Message -----
From: "Dmitry Stogov"
Sent: Tuesday, August 11, 2015

On Tue, Aug 11, 2015 at 11:10 PM, Matt Wilmas <php_li...@realplain.com>
wrote:

[...]

Look at e.g. is_numeric() or strpos() (needle). Plain zval param parsing,
so NO ZVAL_DEREF() occurs (FAST_ZPP or traditional).  These 2 example
functions don't handle IS_REFERENCE type, so they would break.

Or is there no way for them (or any function?) to get a IS_REFERENCE?
Then *why* is there ZVAL_DEREF() in param parsing functions?  We could
remove it!


We probably may remove ZVAL_DEREF() for functions arguments passed by
value, but we don't know if argument was passed by value or by reference in
ZPP functions. Actually, in FAST_ZPP for scalars we may probably assume
passing by value and remove ZVAL_DEREF(), but I'm not sure if this is 100%
safe.

Yes, speaking of scalars, I had already noticed that it doesn't make sense to have a "separate" argument for the FAST_ZPP scalar _EX macros, as there's nothing to separate (same with traditional '/') on simple values. I was changing those macros, and don't think they're used anyway.

Also, I think those simple/scalar types wouldn't be used with by-reference arguments (?), as there would be nothing to update...

Like I said in reply to Nikita, it seems like separating is needed for by-reference args, so only need DEREF if *also* separating? It looks like that was the idea with Z_PARAM_ZVAL_EX(). And for other types, separating only applies to arrays or strings, I believe.

As far as not 100% safe, you mean IS_REFERENCE type causing an error about wrong type? Shouldn't that only happen if developer indicated by-ref arg, but then used wrong type in parsing?

On the other hand, it seems like always using ZVAL_DEREF() won't hurt anything? e.g. part of my confusion was that I thought IS_REFERENCE was wanting to be *kept* in some cases (after parsing), but it seems to not be the case. :-)

Speaking of confusion, it also seems the DEREF stuff is unnecessary in type.c:php_is_type(), for example.

Thanks. Dmitry.

Thanks,
Matt

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

Reply via email to