On Mon, Jun 22, 2015 at 6:57 PM, Rasmus Lerdorf <ras...@lerdorf.com> wrote:
> On 06/22/2015 07:54 PM, Stanislav Malyshev wrote:
>> Hi!
>>
>> So I tried to remove the checks for ZEND_ACC_HAS_TYPE_HINTS:
>> https://github.com/php/php-src/pull/1354
>>
>> Turns out there is a lot of tests that assume function with wrong
>> arguments throws Error, but ZPP and type checks work differently - ZPP
>> first checks argument number (and doesn't throw if number is wrong but
>> instead creates warning), while type checks (that shouldn't really
>> happen on internals but do) check types first and not check argument number.
>>
>> So I wonder which way is the best to proceed here. Looks like this comes
>> from 5.6 where internal function types were verified in executor:
>> https://github.com/php/php-src/blob/PHP-5.6/Zend/zend_vm_def.h#L1974
>>
>> I'm not sure what to do with it - on one side, I think ZPP should handle
>> it for internal functions, otherwise we're doing the same work twice. On
>> the other side, that would be pretty substantial, even if maybe correct,
>> BC break. Should we keep the ZEND_ACC_HAS_TYPE_HINTS type checks and
>> accept the fact that this way we're checking everything twice, or should
>> be clean it up?
>
> Is it a BC break against real code though? Fixing tests isn't a big
> deal. What kind of real code would break by turning calls with the wrong
> number of args from an error to a warning?
>
> I suppose it is a bit late in the game to fix this, but it really does
> seem very broken to the point where I wonder if we shouldn't just
> disable reflection on internal functions entirely since the arginfo is
> so woefully incomplete. Plus the double-checking is super messy.

One thing I really want to work towards in the future is consistency
between user-land and internal functions. There are currently multiple
observable differences. Maybe it would be best to post-pone these
changes until 8.0 where we can do a large consistency pass and handle
it then.

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

Reply via email to