On Mon, Mar 25, 2013 at 1:27 PM, Rasmus Lerdorf <ras...@lerdorf.com> wrote:
> On 03/24/2013 10:24 PM, Laruence wrote:
>> On Mon, Mar 25, 2013 at 1:19 PM, Laruence <larue...@php.net> wrote:
>>> On Mon, Mar 25, 2013 at 1:18 PM, Laruence <larue...@php.net> wrote:
>>>> On Mon, Mar 25, 2013 at 12:42 PM, Rasmus Lerdorf <ras...@lerdorf.com> 
>>>> wrote:
>>>>> On 03/24/2013 09:30 PM, Laruence wrote:
>>>>>> On Mon, Mar 25, 2013 at 7:38 AM, Rasmus Lerdorf <ras...@lerdorf.com> 
>>>>>> wrote:
>>>>>>> On 03/24/2013 10:35 AM, Felipe Pena wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> 2013/3/24 Rasmus Lerdorf <ras...@lerdorf.com>:
>>>>>>>>> On 03/22/2013 02:02 AM, Remi Collet wrote:
>>>>>>>>>> While build of 5.5 snapshot works perfectly, beta1 ZTS build is 
>>>>>>>>>> broken
>>>>>>>>>>
>>>>>>>>>> In file included from
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/ext/tokenizer/tokenizer.c:33:0:
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/build-ztscli/Zend/zend_language_parser.h:331:5:
>>>>>>>>>> error: conflicting types for 'zendparse'
>>>>>>>>>> In file included from
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_globals.h:28:0,
>>>>>>>>>>                  from 
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_compile.h:418,
>>>>>>>>>>                  from 
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_modules.h:26,
>>>>>>>>>>                  from 
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_API.h:26,
>>>>>>>>>>                  from /dev/shm/BUILD/php-5.5.0beta1/main/php.h:38,
>>>>>>>>>>                  from
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/ext/tokenizer/tokenizer.c:25:
>>>>>>>>>> /dev/shm/BUILD/php-5.5.0beta1/Zend/zend_globals_macros.h:35:5: note:
>>>>>>>>>> previous declaration of 'zendparse' was here
>>>>>>>>>>
>>>>>>>>>> Comparing the 201303201430 snapshot (very closed to beta1) and beta1 
>>>>>>>>>> archive
>>>>>>>>>>
>>>>>>>>>> 201303201430, in bison generated files:
>>>>>>>>>>     /* A Bison parser, made by GNU Bison 2.4.1.  */
>>>>>>>>>> beta1:
>>>>>>>>>>     /* A Bison parser, made by GNU Bison 2.6.1.  */
>>>>>>>>>>
>>>>>>>>>> So, it seems snapshot script don't use the same environment than the 
>>>>>>>>>> one
>>>>>>>>>> used to generate release.
>>>>>>>>>>
>>>>>>>>>> Any idea how to fix this ?
>>>>>>>>>
>>>>>>>>> I took a quick look at this. The Bison change causing this from their
>>>>>>>>> NEWS file is:
>>>>>>>>>
>>>>>>>>>   *** Features deprecated since Bison 1.875
>>>>>>>>>     YYPARSE_PARAM and YYLEX_PARAM, deprecated in favor of
>>>>>>>>>     %parse-param and %lex-param, will no longer be supported.
>>>>>>>>>
>>>>>>>>> I was hoping the fix would be as simple as doing:
>>>>>>>>>
>>>>>>>>> -#define YYPARSE_PARAM tsrm_ls
>>>>>>>>> -#define YYLEX_PARAM tsrm_ls
>>>>>>>>> +%parse-param { tsrm_ls }
>>>>>>>>> +%lex-param { tsrm_ls }
>>>>>>>>>
>>>>>>>>> but that doesn't quite do the trick. Need to read up more on how
>>>>>>>>> %parse-param and %lex-param work. If someone wants to do a little 
>>>>>>>>> light
>>>>>>>>> reading and report back it would be appreciated.
>>>>>>>>>
>>>>>>>>
>>>>>>>> http://www.gnu.org/software/bison/manual/html_node/Parser-Function.html#Parser-Function
>>>>>>>>
>>>>>>>> This page explain how to use it.
>>>>>>>
>>>>>>> Sure, I see how they work, but the problem is that they can't be inside
>>>>>>> the %{ ... %} code block there. They have to be outside and as such
>>>>>>> won't have access to the #ifdef ZTS. So I don't think we can
>>>>>>> conditionally create a reentrant parser like we did before without
>>>>>>> refactoring things a bit.
>>>>>> if %parse-param defined, then the paramenter also is added to yyerror,
>>>>>> yydestroctor etc.
>>>>>>
>>>>>> it will a little big change.
>>>>>
>>>>> Right, but if we handle it like we do with TSRMLS_C throughout the code
>>>>> and always set that %parse-param to this new magic macro we make up and
>>>>> have it point to void *compiler_globals for zendparse() under ZTS mode
>>>>> and void otherwise and make sure it is (re)defined correctly in other
>>>>> places? It might mean we need to refactor zenderror() to take a dummy
>>>>> first arg since it seems to prepend the parse-param type there. Messy.
>>>>
>>>> Hmm, seems fine,  a patch is attached:
>>>> https://bugs.php.net/patch-display.php?bug_id=64503&patch=bison_build.patch&revision=latest
>>>>
>>>>
>>>> but there must be some unused parameter term_ls while in non-zts build...
>>> unused parameter warning I mean, :)
>> hmm, how stupid I was, hehe , simply:
>>
>> #ifndef ZTS
>>    (void)tsrm_ls;
>> #endif
>
> Commit it to master so we can play with it. I think this is the right
> approach and we can pull it into 5.5b2. It would be really nice to have
> bison 2.6/2.7 support in 5.5.
>
> -Rasmus
>
Hey:
    after a deep look, it seems bison 2.7 still supports
YYPARSE_PARAM,  the different is, it starts to write the declaration
of yyparse into parse.h

    so,   we also needs the YYPARSE_PARAM defination into parse.h.

    following patch also works:

diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index ccbc9b1..3424fa7 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -38,16 +38,17 @@
 #define YYSIZE_T size_t
 #define yytnamerr zend_yytnamerr
 static YYSIZE_T zend_yytnamerr(char*, const char*);
-
 #define YYERROR_VERBOSE
 #define YYSTYPE znode
+
+%}
+
+%code requires {
 #ifdef ZTS
 # define YYPARSE_PARAM tsrm_ls
 # define YYLEX_PARAM tsrm_ls
 #endif
-
-
-%}
+}

 %pure_parser
 %expect 3


  could you verify it?


-- 
Laruence  Xinchen Hui
http://www.laruence.com/

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

Reply via email to