Re: how to add annotations to a C extension function
| From: | Christoph M. Becker | Date: | Sat, 08 Jan 2022 12:34:08 +0000 |
| Subject: | Re: how to add annotations to a C extension function | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-327885@lists.php.net to get a copy of this message | ||
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øk¦�êó
> Çè6œæˆ
[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