Hello internals,

  i digged a bit deeper regarding the assumption that zend_call_function()
is missing the abstract check and it shows that right now we delay error
generation. The following back trace shows that actually we have a special
opcode that is necessary to do so:

#0  zend_error (type=1, format=0x86adbf8 "Cannot call abstract method 
%v::%v()") at /usr/src/php-cvs/Zend/zend.c:1363
#1  0x084736de in ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER 
(execute_data=0xbf950114, tsrm_ls=0x878c248) at 
/usr/src/php-cvs/Zend/zend_vm_execute.h:461
#2  0x0847140c in execute (op_array=0x8946c10, tsrm_ls=0x878c248) at 
/usr/src/php-cvs/Zend/zend_vm_execute.h:92
#3  0x0843335a in zend_call_function (fci=0xbf950344, fci_cache=0x0, 
tsrm_ls=0x878c248) at /usr/src/php-cvs/Zend/zend_execute_API.c:981

That said i think moving the abstract test into zend_call_function() just
like it is inside the function call helper opcode is the way to go.

regards
marcus

Sunday, February 19, 2006, 11:57:04 AM, you wrote:

> Hello internals,

>   i just made up a tiny patch that allows us to deprecate functions. The
> background is that in the past we changed to issue E_STRICT or E_NOTICE
> for stuff we are going to change in later versions. This is right now not
> easily possible when we change to replace a functions name. The usual way
> to add the new name is to rename the function and add an alias with the old
> name but for the deprecation message we would need to have the function
> implementation twice so that one can issue the message. The patch now
> allows us to specify a function flag on the alias.

> I checked an early version of the patch with Andi and he didn't like the
> introduction of another if(). For the explicit calling handler i see no
> problem in adding it since it is just an integer comparision which makes
> out less than 0.1% of the zend_call_function() for the function-call
> opcode i hid the check behind the abstract check. So there is no new
> penalty. And actually i think the abstract check is neccessary for the
> the other part also. So the patch found an error and doesn't come with any
> additional penalty at all.

> Patch is available for both 5.1 and HEAD here:
> http://php.net/~helly/php/ext/ze2/ze2-deprecated-20060219-5_1.diff.txt
> http://php.net/~helly/php/ext/ze2/ze2-deprecated-20060219-HEAD.diff.txt

> Anyone against?

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

Reply via email to