Re: how to add annotations to a C extension function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08.01.2022 at 09:12, Brett McBride wrote:

> This is a php-internals question.

And as such would better be asked on the internals mailing list, or
maybe on the PECL developers list[2]. :)

> I'm trying to fix some php8.1 deprecation notices in a C extension
> (google/protobuf). They mostly relate to ArrayAccess and Iterator now
> requiring return types:
>
> Deprecated: Return type of
> Google\Protobuf\Internal\RepeatedField::offsetGet($index) should either be
> compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the
> #[\ReturnTypeWillChange] attribute should be used to temporarily suppress
> the notice in Unknown on line 0
>
> I've been able to fix the methods that require standard return types (int,
> void, etc), via ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX macro.

Consider to use stub files, instead of maintaining the arginfo manually.
 As of PHP 8.0.0, there is build/gen_stub.php which allows to generate
arginfo.h files from the stubs.  See
<https://github.com/laruence/yac/blob/master/yac.stub.php> for an
example.  Note that the generate-legacy-arginfo annotation causes a PHP
7 compatible arginfo.h to be generated as well.

> The ones I can't fix (due to needing to maintain BC to php7.0) involve the
> "mixed" type, so as an interim solution I want to add the
> #[\ReturnTypeWillChange]
> annotation to some methods, but I can't find a way to do that.

Frankly, I don't know.  But given how that is checked[3], I think that
it could be possible to call zend_add_attribute()[4] during MINIT to add
the attribute the methods.

> This is cross-posted on stack overflow, if anybody is after points:
> https://stackoverflow.com/questions/70620027/how-to-create-a-php-extension-function-with-a-return-type-hint-plus-annotation

[1] <https://www.php.net/mailing-lists.php#internals>
[2] <https://pecl.php.net/support.php>
[3]
<https://github.com/php/php-src/blob/php-8.1.1/Zend/zend_inheritance.c#L991-L995>
[4]
<https://github.com/php/php-src/blob/php-8.1.1/Zend/zend_attributes.h#L80-L82>

Christoph




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux