Re: Deprecation of functions
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?
Thread (8 messages)