Re: Parameter parsing for zval type?
| From: | Matt Wilmas | Date: | Tue, 11 Aug 2015 18:00:05 +0000 |
| Subject: | Re: Parameter parsing for zval type? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-87712@lists.php.net to get a copy of this message | ||
Hi again,
----- Original Message -----
From: "Matt Wilmas"
Sent: Tuesday, August 11, 2015
Hi Dmitry, all, Help me understand this. :-) It's been more puzzling to me recently since just coming to the part of optimizing traditional ZPP (sharing part with FAST_ZPP...). With the FAST_ZPP inline macros, why is there a Z_PARAM_ZVAL and Z_PARAM_ZVAL_DEREF? It seems the zpp 'z' specifier is always like ZVAL_DEREF, right? So Z_PARAM_ZVAL has no equivalent in traditional zpp. At the very least, this would seem to suggest a difference in behavior/functionality. But I haven't found any (or bug reports, if tests didn't cover something).Oops! No, plain zpp 'z' does not have ZVAL_DEREF() applied, of course. But it's also using zend_parse_arg_zval_DEREF(), which is wrong... (in the case of "z!" with reference to IS_NULL?).
At first I assumed Z_PARAM_ZVAL would keep IS_REFERENCE types, since it doesn't do ZVAL_DEREF(), but this obviously isn't happening with references. (It seems they're getting DEREF()'d in VM when sending params, I guess...?)Still stands though that IS_REFERENCE doesn't seem to get through anyway (and would break functions). Is any ZVAL_DEREF() *not* necessary? - Matt