Re: Bison 3 support for PHP 5.5
| From: | John Bafford | Date: | Fri, 23 May 2014 01:44:29 +0000 |
| Subject: | Re: Bison 3 support for PHP 5.5 | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-74438@lists.php.net to get a copy of this message | ||
Hi Rasmus,
On May 22, 2014, at 20:28, Rasmus Lerdorf <rasmus@lerdorf.com> wrote:
> On 5/22/14, 6:01 PM, John Bafford wrote:
>> Hi,
>>
>> I’ve submitted a PR (https://github.com/php/php-src/pull/683) to add support for Bison
>> 3.0 to PHP 5.5.
>>
>> I’ve run the tests on this patch, with no unexpected errors, with Bison 2.4 (minimum
>> version for PHP 5.5 and 5.6), 2.7, and 3.0, with and without --enable-maintainer-zts against the
>> current PHP-5.5 and (with minor changes) master branches.
>
> Could you explain your changes a bit? You removed %pure-parser, for
> example, and you shuffled globals around. This looks like more than just
> adding support for Bison 3.
>
> -Rasmus
I replaced %pure-parser (which was deprecated) with %pure_parser (its replacement). (Also,
YYERROR_VERBOSE, which also was deprecated, with %error-verbose.)
Most of the changes in the PR revolve around this change in Zend/zend_language_parser.y:
-%code requires {
-#ifdef ZTS
-# define YYPARSE_PARAM tsrm_ls
-# define YYLEX_PARAM tsrm_ls
-#endif
-}
+%parse-param { void *tsrm_ls }
+%lex-param { void *tsrm_ls }
YYPARSE_PARAM and YYLEX_PARAM were deprecated, and then removed, and replaced with %parse-param and
%lex-param. However, you cannot (or I did not see a way to) conditionally define parameters, as PHP
was previously doing here.
So instead, I created the TSRMLS_DN and TSRMLS_CN macros which, in the ZTS case, work like
TSRMLS_D/TSRMLS_C, but when ZTS is off, still resolve to a parameter (that must always be present),
which is passed NULL.
-John
Attachment: [application/pgp-signature] Message signed with OpenPGP using GPGMail signature.asc
Attachment: [application/pgp-signature] Message signed with OpenPGP using GPGMail signature.asc