Re: [PHP-DEV] Call for participation: Annotating internal function argument and return types
Hi, I'd be happy to donate some time to this effort as well. If you just assign me a file or directory (not too much at once please) I can create a PR that covers that part of the code base. Would that work for you? Regards, Dik On 10-08-19 12:56, Nikita Popov wrote: > Hi, > > Lack of type information for internal functions in Reflection is a > long-standing issue. In PHP 8 we finally have all the necessary technical > groundwork done to support argument and return type annotations on internal > functions at scale. > > The only thing left is to actually add those type annotations ... to many > hundreds of functions. This is something everyone can help with, as it does > not need expertise in C. > > I've opened a sample PR to show the process: > https://github.com/php/php-src/pull/4499 > > Here, we take some existing arginfo structures in basic_functions.c and > convert them into stubs in basic_functions.stub.php. We can take the > argument names from the existing arginfo. To figure out the types, we need > to look at the implementation (the php.net documentation tends to lie about > details). > > For example, the first function, set_time_limit is defined in > https://github.com/php/php-src/blob/172c71980df0fe4c9d62c3365f0a2cdb139e3e86/main/main.c#L1501. > We see that it accepts an "l" parameter, which is an int. We see that it > uses RETVAL_TRUE and RETVAL_FALSE, which means the return value is a bool. > > Once this is done, we need to auto-generate new arginfo data. If you have a > development setup, this is done automatically when running "make". > Otherwise, it's possible to manually run "php scripts/dev/gen_stub.php > ext/standard/basic_functions.stub.php". > > Any help would be appreciated :) > > Regards, > Nikita > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Call for participation: Annotating internal function argument and return types
On Sat, Aug 10, 2019 at 2:00 PM Stephen Reay wrote: > > > On 10 Aug 2019, at 17:56, Nikita Popov wrote: > > > > Hi, > > > > Lack of type information for internal functions in Reflection is a > > long-standing issue. In PHP 8 we finally have all the necessary technical > > groundwork done to support argument and return type annotations on > internal > > functions at scale. > > > > The only thing left is to actually add those type annotations ... to many > > hundreds of functions. This is something everyone can help with, as it > does > > not need expertise in C. > > > > I've opened a sample PR to show the process: > > https://github.com/php/php-src/pull/4499 > > > > Here, we take some existing arginfo structures in basic_functions.c and > > convert them into stubs in basic_functions.stub.php. We can take the > > argument names from the existing arginfo. To figure out the types, we > need > > to look at the implementation (the php.net documentation tends to lie > about > > details). > > > > For example, the first function, set_time_limit is defined in > > > https://github.com/php/php-src/blob/172c71980df0fe4c9d62c3365f0a2cdb139e3e86/main/main.c#L1501 > . > > We see that it accepts an "l" parameter, which is an int. We see that it > > uses RETVAL_TRUE and RETVAL_FALSE, which means the return value is a > bool. > > > > Once this is done, we need to auto-generate new arginfo data. If you > have a > > development setup, this is done automatically when running "make". > > Otherwise, it's possible to manually run "php scripts/dev/gen_stub.php > > ext/standard/basic_functions.stub.php". > > > > Any help would be appreciated :) > > > > Regards, > > Nikita > > I’d like to help if I can. > > Some extensions have what appear to be conditional arginfo (for example > the LDAP extension, which I *assume* is to handle building against > different versions of underlying ldap library that support different > features) - is there a way / need to handle those in this stub format that > the generator script understands? > You can do the same as in the source code: #ifdef HAVE_LDAP_SASL function ldap_sasl_bind(...) {} #endif These conditions will be carried over in the generated code. Nikita
Re: [PHP-DEV] Call for participation: Annotating internal function argument and return types
Hi, Sorry if I’m missing something, but can’t the process be automated? i.e. parse the C source files with a script to generate the stubs? If correctly done, this could be much less error-prone than manual handling. Benjamin > Le 10 août 2019 à 14:00, Stephen Reay a écrit : > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Call for participation: Annotating internal function argument and return types
> On 10 Aug 2019, at 17:56, Nikita Popov wrote: > > Hi, > > Lack of type information for internal functions in Reflection is a > long-standing issue. In PHP 8 we finally have all the necessary technical > groundwork done to support argument and return type annotations on internal > functions at scale. > > The only thing left is to actually add those type annotations ... to many > hundreds of functions. This is something everyone can help with, as it does > not need expertise in C. > > I've opened a sample PR to show the process: > https://github.com/php/php-src/pull/4499 > > Here, we take some existing arginfo structures in basic_functions.c and > convert them into stubs in basic_functions.stub.php. We can take the > argument names from the existing arginfo. To figure out the types, we need > to look at the implementation (the php.net documentation tends to lie about > details). > > For example, the first function, set_time_limit is defined in > https://github.com/php/php-src/blob/172c71980df0fe4c9d62c3365f0a2cdb139e3e86/main/main.c#L1501. > We see that it accepts an "l" parameter, which is an int. We see that it > uses RETVAL_TRUE and RETVAL_FALSE, which means the return value is a bool. > > Once this is done, we need to auto-generate new arginfo data. If you have a > development setup, this is done automatically when running "make". > Otherwise, it's possible to manually run "php scripts/dev/gen_stub.php > ext/standard/basic_functions.stub.php". > > Any help would be appreciated :) > > Regards, > Nikita I’d like to help if I can. Some extensions have what appear to be conditional arginfo (for example the LDAP extension, which I *assume* is to handle building against different versions of underlying ldap library that support different features) - is there a way / need to handle those in this stub format that the generator script understands? Cheers Stephen -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Call for participation: Annotating internal function argument and return types
I'm happy to help. Am I correct in thinking that the best way to locate outstanding ones is to to search for any instances of *ZEND_BEGIN_ARG_INFO* or *ZEND_BEGIN_ARG_INFO_EX* in *.c files? As once they've been converted they'll only appear in stub and header files?