PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - Zend - zend_language_parser.y (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 481 499 96.4 %
Date: 2014-04-18 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : %{
       2             : /*
       3             :    +----------------------------------------------------------------------+
       4             :    | Zend Engine                                                          |
       5             :    +----------------------------------------------------------------------+
       6             :    | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
       7             :    +----------------------------------------------------------------------+
       8             :    | This source file is subject to version 2.00 of the Zend license,     |
       9             :    | that is bundled with this package in the file LICENSE, and is        |
      10             :    | available through the world-wide-web at the following url:           |
      11             :    | http://www.zend.com/license/2_00.txt.                                |
      12             :    | If you did not receive a copy of the Zend license and are unable to  |
      13             :    | obtain it through the world-wide-web, please send a note to          |
      14             :    | license@zend.com so we can mail you a copy immediately.              |
      15             :    +----------------------------------------------------------------------+
      16             :    | Authors: Andi Gutmans <andi@zend.com>                                |
      17             :    |          Zeev Suraski <zeev@zend.com>                                |
      18             :    +----------------------------------------------------------------------+
      19             : */
      20             : 
      21             : /* $Id$ */
      22             : 
      23             : /*
      24             :  * LALR shift/reduce conflicts and how they are resolved:
      25             :  *
      26             :  * - 2 shift/reduce conflicts due to the dangling elseif/else ambiguity. Solved by shift.
      27             :  *
      28             :  */
      29             : 
      30             : 
      31             : #include "zend_compile.h"
      32             : #include "zend.h"
      33             : #include "zend_list.h"
      34             : #include "zend_globals.h"
      35             : #include "zend_API.h"
      36             : #include "zend_constants.h"
      37             : 
      38             : 
      39             : #define YYERROR_VERBOSE
      40             : #define YYSTYPE znode
      41             : #ifdef ZTS
      42             : # define YYPARSE_PARAM tsrm_ls
      43             : # define YYLEX_PARAM tsrm_ls
      44             : #endif
      45             : 
      46             : 
      47             : %}
      48             : 
      49             : %pure_parser
      50             : %expect 2
      51             : 
      52             : %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
      53             : %left ','
      54             : %left T_LOGICAL_OR
      55             : %left T_LOGICAL_XOR
      56             : %left T_LOGICAL_AND
      57             : %right T_PRINT
      58             : %left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
      59             : %left '?' ':'
      60             : %left T_BOOLEAN_OR
      61             : %left T_BOOLEAN_AND
      62             : %left '|'
      63             : %left '^'
      64             : %left '&'
      65             : %nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL
      66             : %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
      67             : %left T_SL T_SR
      68             : %left '+' '-' '.'
      69             : %left '*' '/' '%'
      70             : %right '!'
      71             : %nonassoc T_INSTANCEOF
      72             : %right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
      73             : %right '['
      74             : %nonassoc T_NEW T_CLONE
      75             : %token T_EXIT
      76             : %token T_IF
      77             : %left T_ELSEIF
      78             : %left T_ELSE
      79             : %left T_ENDIF
      80             : %token T_LNUMBER
      81             : %token T_DNUMBER
      82             : %token T_STRING
      83             : %token T_STRING_VARNAME
      84             : %token T_VARIABLE
      85             : %token T_NUM_STRING
      86             : %token T_INLINE_HTML
      87             : %token T_CHARACTER
      88             : %token T_BAD_CHARACTER
      89             : %token T_ENCAPSED_AND_WHITESPACE
      90             : %token T_CONSTANT_ENCAPSED_STRING
      91             : %token T_ECHO
      92             : %token T_DO
      93             : %token T_WHILE
      94             : %token T_ENDWHILE
      95             : %token T_FOR
      96             : %token T_ENDFOR
      97             : %token T_FOREACH
      98             : %token T_ENDFOREACH
      99             : %token T_DECLARE
     100             : %token T_ENDDECLARE
     101             : %token T_AS
     102             : %token T_SWITCH
     103             : %token T_ENDSWITCH
     104             : %token T_CASE
     105             : %token T_DEFAULT
     106             : %token T_BREAK
     107             : %token T_CONTINUE
     108             : %token T_GOTO
     109             : %token T_FUNCTION
     110             : %token T_CONST
     111             : %token T_RETURN
     112             : %token T_TRY
     113             : %token T_CATCH
     114             : %token T_THROW
     115             : %token T_USE
     116             : %token T_GLOBAL
     117             : %right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC
     118             : %token T_VAR
     119             : %token T_UNSET
     120             : %token T_ISSET
     121             : %token T_EMPTY
     122             : %token T_HALT_COMPILER
     123             : %token T_CLASS
     124             : %token T_INTERFACE
     125             : %token T_EXTENDS
     126             : %token T_IMPLEMENTS
     127             : %token T_OBJECT_OPERATOR
     128             : %token T_DOUBLE_ARROW
     129             : %token T_LIST
     130             : %token T_ARRAY
     131             : %token T_CLASS_C
     132             : %token T_METHOD_C
     133             : %token T_FUNC_C
     134             : %token T_LINE
     135             : %token T_FILE
     136             : %token T_COMMENT
     137             : %token T_DOC_COMMENT
     138             : %token T_OPEN_TAG
     139             : %token T_OPEN_TAG_WITH_ECHO
     140             : %token T_CLOSE_TAG
     141             : %token T_WHITESPACE
     142             : %token T_START_HEREDOC
     143             : %token T_END_HEREDOC
     144             : %token T_DOLLAR_OPEN_CURLY_BRACES
     145             : %token T_CURLY_OPEN
     146             : %token T_PAAMAYIM_NEKUDOTAYIM
     147             : %token T_NAMESPACE
     148             : %token T_NS_C
     149             : %token T_DIR
     150             : %token T_NS_SEPARATOR
     151             : 
     152             : %% /* Rules */
     153             : 
     154             : start:
     155       29118 :         top_statement_list      { zend_do_end_compilation(TSRMLS_C); }
     156       29118 : ;
     157             : 
     158             : top_statement_list:
     159      432229 :                 top_statement_list  { zend_do_extended_info(TSRMLS_C); } top_statement { HANDLE_INTERACTIVE(); }
     160      432229 :         |       /* empty */
     161             : ;
     162             : 
     163             : namespace_name:
     164      436217 :                 T_STRING { $$ = $1; }
     165      436217 :         |       namespace_name T_NS_SEPARATOR T_STRING { zend_do_build_namespace_name(&$$, &$1, &$3 TSRMLS_CC); }
     166         289 : ;
     167             : 
     168             : top_statement:
     169      196459 :                 statement                                               { zend_verify_namespace(TSRMLS_C); }
     170      196458 :         |       function_declaration_statement  { zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
     171       13545 :         |       class_declaration_statement             { zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
     172        5679 :         |       T_HALT_COMPILER '(' ')' ';'             { zend_do_halt_compiler_register(TSRMLS_C); YYACCEPT; }
     173         122 :         |       T_NAMESPACE namespace_name ';'  { zend_do_begin_namespace(&$2, 0 TSRMLS_CC); }
     174         120 :         |       T_NAMESPACE namespace_name '{'  { zend_do_begin_namespace(&$2, 1 TSRMLS_CC); }
     175          15 :                 top_statement_list '}'              { zend_do_end_namespace(TSRMLS_C); }
     176          11 :         |       T_NAMESPACE '{'                                 { zend_do_begin_namespace(NULL, 1 TSRMLS_CC); }
     177           2 :                 top_statement_list '}'                  { zend_do_end_namespace(TSRMLS_C); }
     178           2 :         |       T_USE use_declarations ';'      { zend_verify_namespace(TSRMLS_C); }
     179          43 :         |       constant_declaration ';'                { zend_verify_namespace(TSRMLS_C); }
     180          32 : ;
     181             : 
     182             : use_declarations:
     183             :                 use_declarations ',' use_declaration
     184             :         |       use_declaration
     185             : ;
     186             : 
     187             : use_declaration:
     188           7 :                 namespace_name                  { zend_do_use(&$1, NULL, 0 TSRMLS_CC); }
     189           6 :         |       namespace_name T_AS T_STRING    { zend_do_use(&$1, &$3, 0 TSRMLS_CC); }
     190          24 :         |       T_NS_SEPARATOR namespace_name { zend_do_use(&$2, NULL, 1 TSRMLS_CC); }
     191          10 :         |       T_NS_SEPARATOR namespace_name T_AS T_STRING { zend_do_use(&$2, &$4, 1 TSRMLS_CC); }
     192           4 : ;
     193             : 
     194             : constant_declaration:
     195           0 :                 constant_declaration ',' T_STRING '=' static_scalar     { zend_do_declare_constant(&$3, &$5 TSRMLS_CC); }
     196           0 :         |       T_CONST T_STRING '=' static_scalar { zend_do_declare_constant(&$2, &$4 TSRMLS_CC); }
     197          32 : ;
     198             : 
     199             : inner_statement_list:
     200      576797 :                 inner_statement_list  { zend_do_extended_info(TSRMLS_C); } inner_statement { HANDLE_INTERACTIVE(); }
     201      576797 :         |       /* empty */
     202             : ;
     203             : 
     204             : 
     205             : inner_statement:
     206             :                 statement
     207             :         |       function_declaration_statement
     208             :         |       class_declaration_statement
     209           1 :         |       T_HALT_COMPILER '(' ')' ';'   { zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used from the outermost scope"); }
     210           0 : ;
     211             : 
     212             : 
     213             : statement:
     214      597034 :                 unticked_statement { DO_TICKS(); }
     215      597034 :         |       T_STRING ':' { zend_do_label(&$1 TSRMLS_CC); }
     216          24 : ;
     217             : 
     218             : unticked_statement:
     219             :                 '{' inner_statement_list '}'
     220      242650 :         |       T_IF '(' expr ')' { zend_do_if_cond(&$3, &$4 TSRMLS_CC); } statement { zend_do_if_after_statement(&$4, 1 TSRMLS_CC); } elseif_list else_single { zend_do_if_end(TSRMLS_C); }
     221      242656 :         |       T_IF '(' expr ')' ':' { zend_do_if_cond(&$3, &$4 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$4, 1 TSRMLS_CC); } new_elseif_list new_else_single T_ENDIF ';' { zend_do_if_end(TSRMLS_C); }
     222        5645 :         |       T_WHILE '(' { $1.u.opline_num = get_next_op_number(CG(active_op_array));  } expr  ')' { zend_do_while_cond(&$4, &$5 TSRMLS_CC); } while_statement { zend_do_while_end(&$1, &$5 TSRMLS_CC); }
     223        8998 :         |       T_DO { $1.u.opline_num = get_next_op_number(CG(active_op_array));  zend_do_do_while_begin(TSRMLS_C); } statement T_WHILE '(' { $5.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' ';' { zend_do_do_while_end(&$1, &$5, &$7 TSRMLS_CC); }
     224         816 :         |       T_FOR
     225             :                         '('
     226             :                                 for_expr
     227        1994 :                         ';' { zend_do_free(&$3 TSRMLS_CC); $4.u.opline_num = get_next_op_number(CG(active_op_array)); }
     228        1994 :                                 for_expr
     229        1994 :                         ';' { zend_do_extended_info(TSRMLS_C); zend_do_for_cond(&$6, &$7 TSRMLS_CC); }
     230        1994 :                                 for_expr
     231        1994 :                         ')' { zend_do_free(&$9 TSRMLS_CC); zend_do_for_before_statement(&$4, &$7 TSRMLS_CC); }
     232        1994 :                         for_statement { zend_do_for_end(&$7 TSRMLS_CC); }
     233        2438 :         |       T_SWITCH '(' expr ')'   { zend_do_switch_cond(&$3 TSRMLS_CC); } switch_case_list { zend_do_switch_end(&$6 TSRMLS_CC); }
     234         888 :         |       T_BREAK ';'                             { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
     235        1652 :         |       T_BREAK expr ';'                { zend_do_brk_cont(ZEND_BRK, &$2 TSRMLS_CC); }
     236          10 :         |       T_CONTINUE ';'                  { zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
     237         235 :         |       T_CONTINUE expr ';'             { zend_do_brk_cont(ZEND_CONT, &$2 TSRMLS_CC); }
     238           1 :         |       T_RETURN ';'                                            { zend_do_return(NULL, 0 TSRMLS_CC); }
     239         197 :         |       T_RETURN expr_without_variable ';'      { zend_do_return(&$2, 0 TSRMLS_CC); }
     240       23926 :         |       T_RETURN variable ';'                           { zend_do_return(&$2, 1 TSRMLS_CC); }
     241       26823 :         |       T_GLOBAL global_var_list ';'
     242             :         |       T_STATIC static_var_list ';'
     243             :         |       T_ECHO echo_expr_list ';'
     244        3526 :         |       T_INLINE_HTML                   { zend_do_echo(&$1 TSRMLS_CC); }
     245        3526 :         |       expr ';'                                { zend_do_free(&$1 TSRMLS_CC); }
     246      289118 :         |       T_UNSET '(' unset_variables ')' ';'
     247             :         |       T_FOREACH '(' variable T_AS
     248       10864 :                 { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 1 TSRMLS_CC); }
     249       10864 :                 foreach_variable foreach_optional_arg ')' { zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); }
     250       10859 :                 foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); }
     251       10859 :         |       T_FOREACH '(' expr_without_variable T_AS
     252         299 :                 { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 0 TSRMLS_CC); }
     253         299 :                 variable foreach_optional_arg ')' { zend_check_writable_variable(&$6); zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); }
     254         296 :                 foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); }
     255         307 :         |       T_DECLARE { $1.u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); } '(' declare_list ')' declare_statement { zend_do_declare_end(&$1 TSRMLS_CC); }
     256          22 :         |       ';'             /* empty statement */
     257        2055 :         |       T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}'
     258        2055 :                 T_CATCH '(' { zend_initialize_try_catch_element(&$1 TSRMLS_CC); }
     259        2055 :                 fully_qualified_class_name { zend_do_first_catch(&$7 TSRMLS_CC); }
     260        2055 :                 T_VARIABLE ')' { zend_do_begin_catch(&$1, &$9, &$11, &$7 TSRMLS_CC); }
     261        2055 :                 '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
     262        2055 :                 additional_catches { zend_do_mark_last_catch(&$7, &$18 TSRMLS_CC); }
     263        2055 :         |       T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
     264         262 :         |       T_GOTO T_STRING ';' { zend_do_goto(&$2 TSRMLS_CC); }
     265          22 : ;
     266             : 
     267             : 
     268             : additional_catches:
     269           7 :                 non_empty_additional_catches { $$ = $1; }
     270           7 :         |       /* empty */ { $$.u.opline_num = -1; }
     271        2048 : ;
     272             : 
     273             : non_empty_additional_catches:
     274           7 :                 additional_catch { $$ = $1; }
     275           7 :         |       non_empty_additional_catches additional_catch { $$ = $2; }
     276           0 : ;
     277             : 
     278             : 
     279             : additional_catch:
     280          21 :         T_CATCH '(' fully_qualified_class_name { $$.u.opline_num = get_next_op_number(CG(active_op_array)); } T_VARIABLE ')' { zend_do_begin_catch(&$1, &$3, &$5, NULL TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
     281          21 : ;
     282             : 
     283             : 
     284             : unset_variables:
     285             :                 unset_variable
     286             :         |       unset_variables ',' unset_variable
     287             : ;
     288             : 
     289             : unset_variable:
     290        1583 :                 variable        { zend_do_end_variable_parse(&$1, BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1 TSRMLS_CC); }
     291        1582 : ;
     292             : 
     293             : function_declaration_statement:
     294       19194 :                 unticked_function_declaration_statement { DO_TICKS(); }
     295       19194 : ;
     296             : 
     297             : class_declaration_statement:
     298        6617 :                 unticked_class_declaration_statement    { DO_TICKS(); }
     299        6617 : ;
     300             : 
     301             : 
     302             : is_reference:
     303       36184 :                 /* empty */     { $$.op_type = ZEND_RETURN_VAL; }
     304       36184 :         |       '&'                 { $$.op_type = ZEND_RETURN_REF; }
     305          47 : ;
     306             : 
     307             : 
     308             : unticked_function_declaration_statement:
     309       19198 :                 function is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$3, 0, $2.op_type, NULL TSRMLS_CC); }
     310       19198 :                         '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
     311       19194 : ;
     312             : 
     313             : unticked_class_declaration_statement:
     314             :                 class_entry_type T_STRING extends_from
     315        6526 :                         { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); }
     316        6520 :                         implements_list
     317             :                         '{'
     318             :                                 class_statement_list
     319        6465 :                         '}' { zend_do_end_class_declaration(&$1, &$3 TSRMLS_CC); }
     320        6456 :         |       interface_entry T_STRING
     321         164 :                         { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); }
     322         164 :                         interface_extends_list
     323             :                         '{'
     324             :                                 class_statement_list
     325         161 :                         '}' { zend_do_end_class_declaration(&$1, NULL TSRMLS_CC); }
     326         161 : ;
     327             : 
     328             : 
     329             : class_entry_type:
     330        6449 :                 T_CLASS                 { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = 0; }
     331        6449 :         |       T_ABSTRACT T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
     332          70 :         |       T_FINAL T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_FINAL_CLASS; }
     333           9 : ;
     334             : 
     335             : extends_from:
     336        4365 :                 /* empty */                                     { $$.op_type = IS_UNUSED; }
     337        4365 :         |       T_EXTENDS fully_qualified_class_name    { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); }
     338        2161 : ;
     339             : 
     340             : interface_entry:
     341         165 :         T_INTERFACE             { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_INTERFACE; }
     342         165 : ;
     343             : 
     344             : interface_extends_list:
     345             :                 /* empty */
     346             :         |       T_EXTENDS interface_list
     347             : ;
     348             : 
     349             : implements_list:
     350             :                 /* empty */
     351             :         |       T_IMPLEMENTS interface_list
     352             : ;
     353             : 
     354             : interface_list:
     355         297 :                 fully_qualified_class_name                      { zend_do_implements_interface(&$1 TSRMLS_CC); }
     356         295 :         |       interface_list ',' fully_qualified_class_name { zend_do_implements_interface(&$3 TSRMLS_CC); }
     357          40 : ;
     358             : 
     359             : foreach_optional_arg:
     360        6150 :                 /* empty */                                             { $$.op_type = IS_UNUSED; }
     361        6150 :         |       T_DOUBLE_ARROW foreach_variable { $$ = $2; }
     362        5012 : ;
     363             : 
     364             : 
     365             : foreach_variable:
     366       15808 :                 variable                        { zend_check_writable_variable(&$1); $$ = $1; }
     367       15808 :         |       '&' variable                { zend_check_writable_variable(&$2); $$ = $2;  $$.u.EA.type |= ZEND_PARSED_REFERENCE_VARIABLE; }
     368          68 : ;
     369             : 
     370             : for_statement:
     371             :                 statement
     372             :         |       ':' inner_statement_list T_ENDFOR ';'
     373             : ;
     374             : 
     375             : 
     376             : foreach_statement:
     377             :                 statement
     378             :         |       ':' inner_statement_list T_ENDFOREACH ';'
     379             : ;
     380             : 
     381             : 
     382             : declare_statement:
     383             :                 statement
     384             :         |       ':' inner_statement_list T_ENDDECLARE ';'
     385             : ;
     386             : 
     387             : 
     388             : declare_list:
     389          11 :                 T_STRING '=' static_scalar                                      { zend_do_declare_stmt(&$1, &$3 TSRMLS_CC); }
     390          11 :         |       declare_list ',' T_STRING '=' static_scalar     { zend_do_declare_stmt(&$3, &$5 TSRMLS_CC); }
     391           0 : ;
     392             : 
     393             : 
     394             : switch_case_list:
     395         443 :                 '{' case_list '}'                                       { $$ = $2; }
     396         443 :         |       '{' ';' case_list '}'                           { $$ = $3; }
     397           0 :         |       ':' case_list T_ENDSWITCH ';'           { $$ = $2; }
     398           1 :         |       ':' ';' case_list T_ENDSWITCH ';'       { $$ = $3; }
     399           0 : ;
     400             : 
     401             : 
     402             : case_list:
     403         444 :                 /* empty */     { $$.op_type = IS_UNUSED; }
     404        1930 :         |       case_list T_CASE expr case_separator { zend_do_extended_info(TSRMLS_C);  zend_do_case_before_statement(&$1, &$2, &$3 TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2 TSRMLS_CC); $$.op_type = IS_CONST; }
     405        3239 :         |       case_list T_DEFAULT case_separator { zend_do_extended_info(TSRMLS_C);  zend_do_default_before_statement(&$1, &$2 TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2 TSRMLS_CC); $$.op_type = IS_CONST; }
     406         534 : ;
     407             : 
     408             : 
     409             : case_separator:
     410             :                 ':'
     411             :         |       ';'
     412             : ;
     413             : 
     414             : 
     415             : while_statement:
     416             :                 statement
     417             :         |       ':' inner_statement_list T_ENDWHILE ';'
     418             : ;
     419             : 
     420             : 
     421             : 
     422             : elseif_list:
     423             :                 /* empty */
     424        3612 :         |       elseif_list T_ELSEIF '(' expr ')' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } statement { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
     425        3612 : ;
     426             : 
     427             : 
     428             : new_elseif_list:
     429             :                 /* empty */
     430           0 :         |       new_elseif_list T_ELSEIF '(' expr ')' ':' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
     431           0 : ;
     432             : 
     433             : 
     434             : else_single:
     435             :                 /* empty */
     436             :         |       T_ELSE statement
     437             : ;
     438             : 
     439             : 
     440             : new_else_single:
     441             :                 /* empty */
     442             :         |       T_ELSE ':' inner_statement_list
     443             : ;
     444             : 
     445             : 
     446             : parameter_list:
     447             :                 non_empty_parameter_list
     448             :         |       /* empty */
     449             : ;
     450             : 
     451             : 
     452             : non_empty_parameter_list:
     453       25779 :                 optional_class_type T_VARIABLE                          { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$1, &$2, 0 TSRMLS_CC); }
     454       25777 :         |       optional_class_type '&' T_VARIABLE                  { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$1, &$3, 1 TSRMLS_CC); }
     455         242 :         |       optional_class_type '&' T_VARIABLE '=' static_scalar                        { znode tmp;  fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$5, &$1, &$3, 1 TSRMLS_CC); }
     456           0 :         |       optional_class_type T_VARIABLE '=' static_scalar                                { znode tmp;  fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$4, &$1, &$2, 0 TSRMLS_CC); }
     457        2031 :         |       non_empty_parameter_list ',' optional_class_type T_VARIABLE     { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$3, &$4, 0 TSRMLS_CC); }
     458       93665 :         |       non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE     { znode tmp;  fetch_simple_variable(&tmp, &$5, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$3, &$5, 1 TSRMLS_CC); }
     459         382 :         |       non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE      '=' static_scalar { znode tmp;  fetch_simple_variable(&tmp, &$5, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$7, &$3, &$5, 1 TSRMLS_CC); }
     460         375 :         |       non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar   { znode tmp;  fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$6, &$3, &$4, 0 TSRMLS_CC); }
     461       12300 : ;
     462             : 
     463             : 
     464             : optional_class_type:
     465      134450 :                 /* empty */                                     { $$.op_type = IS_UNUSED; }
     466      134450 :         |       fully_qualified_class_name      { $$ = $1; }
     467         141 :         |       T_ARRAY                                         { $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_NULL;}
     468         185 : ;
     469             : 
     470             : 
     471             : function_call_parameter_list:
     472      330860 :                 non_empty_function_call_parameter_list  { $$ = $1; }
     473      330860 :         |       /* empty */                             { Z_LVAL($$.u.constant) = 0; }
     474       37806 : ;
     475             : 
     476             : 
     477             : non_empty_function_call_parameter_list:
     478      151213 :                 expr_without_variable   { Z_LVAL($$.u.constant) = 1;  zend_do_pass_param(&$1, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); }
     479      151208 :         |       variable                                { Z_LVAL($$.u.constant) = 1;  zend_do_pass_param(&$1, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); }
     480      179632 :         |       '&' w_variable                              { Z_LVAL($$.u.constant) = 1;  zend_do_pass_param(&$2, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); }
     481          21 :         |       non_empty_function_call_parameter_list ',' expr_without_variable        { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1;  zend_do_pass_param(&$3, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); }
     482      147764 :         |       non_empty_function_call_parameter_list ',' variable                                     { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1;  zend_do_pass_param(&$3, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); }
     483      197148 :         |       non_empty_function_call_parameter_list ',' '&' w_variable                   { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1;  zend_do_pass_param(&$4, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); }
     484          12 : ;
     485             : 
     486             : global_var_list:
     487         995 :                 global_var_list ',' global_var  { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
     488         995 :         |       global_var                                              { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
     489        4348 : ;
     490             : 
     491             : 
     492             : global_var:
     493        5341 :                 T_VARIABLE                      { $$ = $1; }
     494        5341 :         |       '$' r_variable          { $$ = $2; }
     495           1 :         |       '$' '{' expr '}'        { $$ = $3; }
     496           1 : ;
     497             : 
     498             : 
     499             : static_var_list:
     500           2 :                 static_var_list ',' T_VARIABLE { zend_do_fetch_static_variable(&$3, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
     501           2 :         |       static_var_list ',' T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$3, &$5, ZEND_FETCH_STATIC TSRMLS_CC); }
     502           6 :         |       T_VARIABLE  { zend_do_fetch_static_variable(&$1, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
     503          18 :         |       T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$1, &$3, ZEND_FETCH_STATIC TSRMLS_CC); }
     504        2031 : 
     505             : ;
     506             : 
     507             : 
     508             : class_statement_list:
     509             :                 class_statement_list class_statement
     510             :         |       /* empty */
     511             : ;
     512             : 
     513             : 
     514             : class_statement:
     515        1897 :                 variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration ';'
     516        1897 :         |       class_constant_declaration ';'
     517       16874 :         |       method_modifiers function is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$4, 1, $3.op_type, &$1 TSRMLS_CC); } '('
     518       16872 :                         parameter_list ')' method_body { zend_do_abstract_method(&$4, &$1, &$9 TSRMLS_CC); zend_do_end_function_declaration(&$2 TSRMLS_CC); }
     519       16844 : ;
     520             : 
     521             : 
     522             : method_body:
     523         120 :                 ';' /* abstract method */               { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
     524         120 :         |       '{' inner_statement_list '}'    { Z_LVAL($$.u.constant) = 0;    }
     525       16743 : ;
     526             : 
     527             : variable_modifiers:
     528        1793 :                 non_empty_member_modifiers              { $$ = $1; }
     529        1793 :         |       T_VAR                                                   { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
     530         104 : ;
     531             : 
     532             : method_modifiers:
     533        6875 :                 /* empty */                                                     { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
     534        6875 :         |       non_empty_member_modifiers                      { $$ = $1;  if (!(Z_LVAL($$.u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL($$.u.constant) |= ZEND_ACC_PUBLIC; } }
     535       10002 : ;
     536             : 
     537             : non_empty_member_modifiers:
     538       11806 :                 member_modifier                                         { $$ = $1; }
     539       11806 :         |       non_empty_member_modifiers member_modifier      { Z_LVAL($$.u.constant) = zend_do_verify_access_types(&$1, &$2); }
     540         515 : ;
     541             : 
     542             : member_modifier:
     543        3542 :                 T_PUBLIC                                { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
     544        3542 :         |       T_PROTECTED                             { Z_LVAL($$.u.constant) = ZEND_ACC_PROTECTED; }
     545         557 :         |       T_PRIVATE                               { Z_LVAL($$.u.constant) = ZEND_ACC_PRIVATE; }
     546         641 :         |       T_STATIC                                { Z_LVAL($$.u.constant) = ZEND_ACC_STATIC; }
     547        7519 :         |       T_ABSTRACT                              { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
     548          49 :         |       T_FINAL                                 { Z_LVAL($$.u.constant) = ZEND_ACC_FINAL; }
     549          24 : ;
     550             : 
     551             : class_variable_declaration:
     552          44 :                 class_variable_declaration ',' T_VARIABLE                                       { zend_do_declare_property(&$3, NULL, CG(access_type) TSRMLS_CC); }
     553          44 :         |       class_variable_declaration ',' T_VARIABLE '=' static_scalar     { zend_do_declare_property(&$3, &$5, CG(access_type) TSRMLS_CC); }
     554           3 :         |       T_VARIABLE                                              { zend_do_declare_property(&$1, NULL, CG(access_type) TSRMLS_CC); }
     555         823 :         |       T_VARIABLE '=' static_scalar    { zend_do_declare_property(&$1, &$3, CG(access_type) TSRMLS_CC); }
     556        1070 : ;
     557             : 
     558             : class_constant_declaration:
     559           3 :                 class_constant_declaration ',' T_STRING '=' static_scalar       { zend_do_declare_class_constant(&$3, &$5 TSRMLS_CC); }
     560           3 :         |       T_CONST T_STRING '=' static_scalar      { zend_do_declare_class_constant(&$2, &$4 TSRMLS_CC); }
     561         204 : ;
     562             : 
     563             : echo_expr_list:
     564        1091 :                 echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); }
     565        1091 :         |       expr                                    { zend_do_echo(&$1 TSRMLS_CC); }
     566       30781 : ;
     567             : 
     568             : 
     569             : for_expr:
     570           8 :                 /* empty */                     { $$.op_type = IS_CONST;  Z_TYPE($$.u.constant) = IS_BOOL;  Z_LVAL($$.u.constant) = 1; }
     571           8 :         |       non_empty_for_expr      { $$ = $1; }
     572        5974 : ;
     573             : 
     574             : non_empty_for_expr:
     575          10 :                 non_empty_for_expr ','  { zend_do_free(&$1 TSRMLS_CC); } expr { $$ = $4; }
     576          10 :         |       expr                                    { $$ = $1; }
     577        5974 : ;
     578             : 
     579             : expr_without_variable:
     580         210 :                 T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
     581         210 :         |       variable '=' expr               { zend_check_writable_variable(&$1); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
     582      165497 :         |       variable '=' '&' variable { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$4, BP_VAR_W, 1 TSRMLS_CC); zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
     583         394 :         |       variable '=' '&' T_NEW class_name_reference { zend_error(E_DEPRECATED, "Assigning the return value of new by reference is deprecated");  zend_check_writable_variable(&$1); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); $3.u.EA.type = ZEND_PARSED_NEW; zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
     584       13470 :         |       T_NEW class_name_reference { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     585       26900 :         |       T_CLONE expr { zend_do_clone(&$$, &$2 TSRMLS_CC); }
     586          89 :         |       variable T_PLUS_EQUAL expr      { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
     587         653 :         |       variable T_MINUS_EQUAL expr     { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
     588         138 :         |       variable T_MUL_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
     589          12 :         |       variable T_DIV_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); }
     590           3 :         |       variable T_CONCAT_EQUAL expr    { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
     591        2847 :         |       variable T_MOD_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); }
     592           0 :         |       variable T_AND_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
     593           2 :         |       variable T_OR_EQUAL expr                { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
     594          95 :         |       variable T_XOR_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
     595           1 :         |       variable T_SL_EQUAL expr        { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 TSRMLS_CC); }
     596           3 :         |       variable T_SR_EQUAL expr        { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 TSRMLS_CC); }
     597           3 :         |       rw_variable T_INC { zend_do_post_incdec(&$$, &$1, ZEND_POST_INC TSRMLS_CC); }
     598        5379 :         |       T_INC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_INC TSRMLS_CC); }
     599         445 :         |       rw_variable T_DEC { zend_do_post_incdec(&$$, &$1, ZEND_POST_DEC TSRMLS_CC); }
     600         140 :         |       T_DEC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_DEC TSRMLS_CC); }
     601        9641 :         |       expr T_BOOLEAN_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     602       26025 :         |       expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     603       14288 :         |       expr T_LOGICAL_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     604        1521 :         |       expr T_LOGICAL_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     605          26 :         |       expr T_LOGICAL_XOR expr { zend_do_binary_op(ZEND_BOOL_XOR, &$$, &$1, &$3 TSRMLS_CC); }
     606           0 :         |       expr '|' expr   { zend_do_binary_op(ZEND_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
     607         551 :         |       expr '&' expr       { zend_do_binary_op(ZEND_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
     608        1156 :         |       expr '^' expr   { zend_do_binary_op(ZEND_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
     609          21 :         |       expr '.' expr   { zend_do_binary_op(ZEND_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
     610       40245 :         |       expr '+' expr   { zend_do_binary_op(ZEND_ADD, &$$, &$1, &$3 TSRMLS_CC); }
     611        3950 :         |       expr '-' expr   { zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); }
     612        1237 :         |       expr '*' expr   { zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); }
     613        2772 :         |       expr '/' expr   { zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); }
     614         515 :         |       expr '%' expr   { zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); }
     615         781 :         |       expr T_SL expr  { zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); }
     616         112 :         |       expr T_SR expr  { zend_do_binary_op(ZEND_SR, &$$, &$1, &$3 TSRMLS_CC); }
     617          51 :         |       '+' expr %prec T_INC { ZVAL_LONG(&$1.u.constant, 0); if ($2.op_type == IS_CONST) { add_function(&$2.u.constant, &$1.u.constant, &$2.u.constant TSRMLS_CC); $$ = $2; } else { $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_ADD, &$$, &$1, &$2 TSRMLS_CC); } }
     618         246 :         |       '-' expr %prec T_INC { ZVAL_LONG(&$1.u.constant, 0); if ($2.op_type == IS_CONST) { sub_function(&$2.u.constant, &$1.u.constant, &$2.u.constant TSRMLS_CC); $$ = $2; } else { $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_SUB, &$$, &$1, &$2 TSRMLS_CC); } }
     619        6394 :         |       '!' expr { zend_do_unary_op(ZEND_BOOL_NOT, &$$, &$2 TSRMLS_CC); }
     620       42883 :         |       '~' expr { zend_do_unary_op(ZEND_BW_NOT, &$$, &$2 TSRMLS_CC); }
     621          84 :         |       expr T_IS_IDENTICAL expr                { zend_do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
     622        5996 :         |       expr T_IS_NOT_IDENTICAL expr    { zend_do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
     623        7932 :         |       expr T_IS_EQUAL expr                    { zend_do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
     624       16614 :         |       expr T_IS_NOT_EQUAL expr                { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
     625        2695 :         |       expr '<' expr                                        { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 TSRMLS_CC); }
     626        1605 :         |       expr T_IS_SMALLER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
     627        1742 :         |       expr '>' expr                                        { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); }
     628         836 :         |       expr T_IS_GREATER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 TSRMLS_CC); }
     629         363 :         |       expr T_INSTANCEOF class_name_reference { zend_do_instanceof(&$$, &$1, &$3, 0 TSRMLS_CC); }
     630          62 :         |       '(' expr ')'    { $$ = $2; }
     631       38789 :         |       expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
     632       25785 :                 expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); }
     633       25785 :                 expr     { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); }
     634       25785 :         |       expr '?' ':' { zend_do_jmp_set(&$1, &$2, &$3 TSRMLS_CC); }
     635           8 :                 expr     { zend_do_jmp_set_else(&$$, &$5, &$2, &$3 TSRMLS_CC); }
     636           8 :         |       internal_functions_in_yacc { $$ = $1; }
     637       25831 :         |       T_INT_CAST expr         { zend_do_cast(&$$, &$2, IS_LONG TSRMLS_CC); }
     638        4815 :         |       T_DOUBLE_CAST expr      { zend_do_cast(&$$, &$2, IS_DOUBLE TSRMLS_CC); }
     639          63 :         |       T_STRING_CAST expr      { zend_do_cast(&$$, &$2, IS_STRING TSRMLS_CC); }
     640        1312 :         |       T_ARRAY_CAST expr       { zend_do_cast(&$$, &$2, IS_ARRAY TSRMLS_CC); }
     641          15 :         |       T_OBJECT_CAST expr      { zend_do_cast(&$$, &$2, IS_OBJECT TSRMLS_CC); }
     642         148 :         |       T_BOOL_CAST expr        { zend_do_cast(&$$, &$2, IS_BOOL TSRMLS_CC); }
     643         254 :         |       T_UNSET_CAST expr       { zend_do_cast(&$$, &$2, IS_NULL TSRMLS_CC); }
     644           0 :         |       T_EXIT exit_expr        { zend_do_exit(&$$, &$2 TSRMLS_CC); }
     645       21288 :         |       '@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; }
     646       13366 :         |       scalar                          { $$ = $1; }
     647      734197 :         |       T_ARRAY '(' array_pair_list ')' { $$ = $3; }
     648       26876 :         |       '`' backticks_expr '`' { zend_do_shell_exec(&$$, &$2 TSRMLS_CC); }
     649         108 :         |       T_PRINT expr  { zend_do_print(&$$, &$2 TSRMLS_CC); }
     650        3290 :         |       function is_reference '(' { zend_do_begin_lambda_function_declaration(&$$, &$1, $2.op_type TSRMLS_CC); }
     651         157 :                         parameter_list ')' lexical_vars '{' inner_statement_list '}' {  zend_do_end_function_declaration(&$1 TSRMLS_CC); $$ = $4; }
     652         157 : ;
     653             : 
     654             : function:
     655       36231 :         T_FUNCTION { $$.u.opline_num = CG(zend_lineno); }
     656       36231 : ;
     657             : 
     658             : lexical_vars:
     659             :                 /* empty */
     660             :         |       T_USE '(' lexical_var_list ')'
     661             : ;
     662             : 
     663             : lexical_var_list:
     664           3 :                 lexical_var_list ',' T_VARIABLE                 { zend_do_fetch_lexical_variable(&$3, 0 TSRMLS_CC); }
     665           3 :         |       lexical_var_list ',' '&' T_VARIABLE         { zend_do_fetch_lexical_variable(&$4, 1 TSRMLS_CC); }
     666           1 :         |       T_VARIABLE                                                              { zend_do_fetch_lexical_variable(&$1, 0 TSRMLS_CC); }
     667          27 :         |       '&' T_VARIABLE                                                      { zend_do_fetch_lexical_variable(&$2, 1 TSRMLS_CC); }
     668          18 : ;
     669             : 
     670             : function_call:
     671      310153 :                 namespace_name '(' { $2.u.opline_num = zend_do_begin_function_call(&$1, 1 TSRMLS_CC); }
     672      310153 :                                 function_call_parameter_list
     673      310140 :                                 ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
     674      310140 :         |       T_NAMESPACE T_NS_SEPARATOR namespace_name '(' { $1.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$1.u.constant);  zend_do_build_namespace_name(&$1, &$1, &$3 TSRMLS_CC); $4.u.opline_num = zend_do_begin_function_call(&$1, 0 TSRMLS_CC); }
     675           8 :                                 function_call_parameter_list
     676           8 :                                 ')' { zend_do_end_function_call(&$1, &$$, &$6, 0, $4.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
     677           8 :         |       T_NS_SEPARATOR namespace_name '(' { $3.u.opline_num = zend_do_begin_function_call(&$2, 0 TSRMLS_CC); }
     678          14 :                                 function_call_parameter_list
     679          14 :                                 ')' { zend_do_end_function_call(&$2, &$$, &$5, 0, $3.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
     680          14 :         |       class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { $4.u.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
     681       10582 :                         function_call_parameter_list
     682       10582 :                         ')' { zend_do_end_function_call($4.u.opline_num?NULL:&$3, &$$, &$6, $4.u.opline_num, $4.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     683       10582 :         |       class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
     684           8 :                         function_call_parameter_list
     685           8 :                         ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     686           8 :         |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
     687          13 :                         function_call_parameter_list
     688          13 :                         ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     689          13 :         |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
     690          23 :                         function_call_parameter_list
     691          23 :                         ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     692          23 :         |       variable_without_objects  '(' { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&$1, 0 TSRMLS_CC); }
     693        1888 :                         function_call_parameter_list ')'
     694        1888 :                         { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     695        1888 : ;
     696             : 
     697             : class_name:
     698          41 :                 T_STATIC { $$.op_type = IS_CONST; ZVAL_STRINGL(&$$.u.constant, "static", sizeof("static")-1, 1);}
     699          41 :         |       namespace_name { $$ = $1; }
     700       33166 :         |       T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant);  zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); }
     701          14 :         |       T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; }
     702         103 : ;
     703             : 
     704             : fully_qualified_class_name:
     705        4678 :                 namespace_name { $$ = $1; }
     706        4678 :         |       T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant);  zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); }
     707           3 :         |       T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); $$ = $2; }
     708          20 : ;
     709             : 
     710             : 
     711             : 
     712             : class_name_reference:
     713       12201 :                 class_name                                              { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
     714       12201 :         |       dynamic_class_name_reference    { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
     715        1322 : ;
     716             : 
     717             : 
     718             : dynamic_class_name_reference:
     719           1 :                 base_variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
     720           1 :                         object_property { zend_do_push_object(&$4 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } dynamic_class_name_variable_properties
     721           1 :                         { zend_do_pop_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_MEMBER; }
     722           1 :         |       base_variable { $$ = $1; }
     723        1321 : ;
     724             : 
     725             : 
     726             : dynamic_class_name_variable_properties:
     727             :                 dynamic_class_name_variable_properties dynamic_class_name_variable_property
     728             :         |       /* empty */
     729             : ;
     730             : 
     731             : 
     732             : dynamic_class_name_variable_property:
     733           0 :                 T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); }
     734           0 : ;
     735             : 
     736             : exit_expr:
     737         405 :                 /* empty */     { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
     738         405 :         |       '(' ')'         { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
     739         115 :         |       '(' expr ')'    { $$ = $2; }
     740       14085 : ;
     741             : 
     742             : backticks_expr:
     743           0 :                 /* empty */     { ZVAL_EMPTY_STRING(&$$.u.constant); INIT_PZVAL(&$$.u.constant); $$.op_type = IS_CONST; }
     744           0 :         |       T_ENCAPSED_AND_WHITESPACE       { $$ = $1; }
     745           4 :         |       encaps_list     { $$ = $1; }
     746         104 : ;
     747             : 
     748             : 
     749             : ctor_arguments:
     750        2314 :                 /* empty */     { Z_LVAL($$.u.constant)=0; }
     751        2314 :         |       '(' function_call_parameter_list ')'    { $$ = $2; }
     752       11146 : ;
     753             : 
     754             : 
     755             : common_scalar:
     756      160385 :                 T_LNUMBER                                       { $$ = $1; }
     757      160385 :         |       T_DNUMBER                                       { $$ = $1; }
     758        6831 :         |       T_CONSTANT_ENCAPSED_STRING      { $$ = $1; }
     759      462688 :         |       T_LINE                                          { $$ = $1; }
     760          14 :         |       T_FILE                                          { $$ = $1; }
     761        8882 :         |       T_DIR                                           { $$ = $1; }
     762         176 :         |       T_CLASS_C                                       { $$ = $1; }
     763          76 :         |       T_METHOD_C                                      { $$ = $1; }
     764         811 :         |       T_FUNC_C                                        { $$ = $1; }
     765          98 :         |       T_NS_C                                          { $$ = $1; }
     766          33 :         |       T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $2; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); }
     767        1247 :         |       T_START_HEREDOC T_END_HEREDOC { ZVAL_EMPTY_STRING(&$$.u.constant); INIT_PZVAL(&$$.u.constant); $$.op_type = IS_CONST; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); }
     768          61 : ;
     769             : 
     770             : 
     771             : static_scalar: /* compile-time evaluated scalars */
     772       12301 :                 common_scalar           { $$ = $1; }
     773       12301 :         |       namespace_name          { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT, 1 TSRMLS_CC); }
     774        6833 :         |       T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant);  zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); $3 = $$; zend_do_fetch_constant(&$$, NULL, &$3, ZEND_CT, 0 TSRMLS_CC); }
     775          14 :         |       T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); zend_do_fetch_constant(&$$, NULL, &$2, ZEND_CT, 0 TSRMLS_CC); }
     776          13 :         |       '+' static_scalar { ZVAL_LONG(&$1.u.constant, 0); add_function(&$2.u.constant, &$1.u.constant, &$2.u.constant TSRMLS_CC); $$ = $2; }
     777           2 :         |       '-' static_scalar { ZVAL_LONG(&$1.u.constant, 0); sub_function(&$2.u.constant, &$1.u.constant, &$2.u.constant TSRMLS_CC); $$ = $2; }
     778          49 :         |       T_ARRAY '(' static_array_pair_list ')' { $$ = $3; Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; }
     779        2179 :         |       static_class_constant { $$ = $1; }
     780         339 : ;
     781             : 
     782             : static_class_constant:
     783         339 :                 class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_CT, 0 TSRMLS_CC); }
     784         339 : ;
     785             : 
     786             : scalar:
     787          77 :                 T_STRING_VARNAME                { $$ = $1; }
     788          77 :         |       class_constant          { $$ = $1; }
     789        9860 :         |       namespace_name  { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT, 1 TSRMLS_CC); }
     790       80989 :         |       T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant);  zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); $3 = $$; zend_do_fetch_constant(&$$, NULL, &$3, ZEND_RT, 0 TSRMLS_CC); }
     791           9 :         |       T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); zend_do_fetch_constant(&$$, NULL, &$2, ZEND_RT, 0 TSRMLS_CC); }
     792          14 :         |       common_scalar                   { $$ = $1; }
     793      629001 :         |       '"' encaps_list '"'   { $$ = $2; }
     794       14140 :         |       T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); }
     795         107 : ;
     796             : 
     797             : 
     798             : static_array_pair_list:
     799         960 :                 /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
     800         960 :         |       non_empty_static_array_pair_list possible_comma { $$ = $1; }
     801        1219 : ;
     802             : 
     803             : possible_comma:
     804             :                 /* empty */
     805             :         |       ','
     806             : ;
     807             : 
     808             : non_empty_static_array_pair_list:
     809          38 :                 non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { zend_do_add_static_array_element(&$$, &$3, &$5); }
     810          38 :         |       non_empty_static_array_pair_list ',' static_scalar { zend_do_add_static_array_element(&$$, NULL, &$3); }
     811        2207 :         |       static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, &$1, &$3); }
     812         101 :         |       static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); }
     813        1118 : ;
     814             : 
     815             : expr:
     816      400851 :                 r_variable                                      { $$ = $1; }
     817      400851 :         |       expr_without_variable           { $$ = $1; }
     818      905007 : ;
     819             : 
     820             : 
     821             : r_variable:
     822      400854 :         variable { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
     823      400852 : ;
     824             : 
     825             : 
     826             : w_variable:
     827         169 :         variable        { zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); $$ = $1;
     828         169 :                                   zend_check_writable_variable(&$1); }
     829         169 : ;
     830             : 
     831             : rw_variable:
     832        5976 :         variable        { zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); $$ = $1;
     833        5976 :                                   zend_check_writable_variable(&$1); }
     834        5976 : ;
     835             : 
     836             : variable:
     837       42574 :                 base_variable_with_function_calls T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
     838       42574 :                         object_property { zend_do_push_object(&$4 TSRMLS_CC); } method_or_not variable_properties
     839       42574 :                         { zend_do_pop_object(&$$ TSRMLS_CC); $$.u.EA.type = $1.u.EA.type | ($7.u.EA.type ? $7.u.EA.type : $6.u.EA.type); }
     840       42573 :         |       base_variable_with_function_calls { $$ = $1; }
     841      980700 : ;
     842             : 
     843             : variable_properties:
     844        1372 :                 variable_properties variable_property { $$.u.EA.type = $2.u.EA.type; }
     845        1372 :         |       /* empty */ { $$.u.EA.type = 0; }
     846       42573 : ;
     847             : 
     848             : 
     849             : variable_property:
     850        2744 :                 T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); } method_or_not { $$.u.EA.type = $4.u.EA.type; }
     851        2744 : ;
     852             : 
     853             : method_or_not:
     854       34845 :                 '(' { zend_do_pop_object(&$1 TSRMLS_CC); zend_do_begin_method_call(&$1 TSRMLS_CC); }
     855       34844 :                                 function_call_parameter_list ')'
     856       34844 :                         { zend_do_end_function_call(&$1, &$$, &$3, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);
     857       34844 :                           zend_do_push_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_METHOD_CALL; }
     858       34844 :         |       /* empty */ { zend_do_declare_implicit_property(TSRMLS_C); $$.u.EA.type = ZEND_PARSED_MEMBER; }
     859        9101 : ;
     860             : 
     861             : variable_without_objects:
     862        2408 :                 reference_variable { $$ = $1; }
     863        2408 :         |       simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); }
     864           7 : ;
     865             : 
     866             : static_member:
     867         337 :                 class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
     868         337 :         |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
     869           4 : 
     870             : ;
     871             : 
     872             : variable_class_name:
     873          44 :                 reference_variable { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); $$=$1;; }
     874          44 : ;
     875             : 
     876             : base_variable_with_function_calls:
     877      700598 :                 base_variable           { $$ = $1; }
     878      700598 :         |       function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.u.EA.type = ZEND_PARSED_FUNCTION_CALL; }
     879      322676 : ;
     880             : 
     881             : 
     882             : base_variable:
     883      701442 :                 reference_variable { $$ = $1; $$.u.EA.type = ZEND_PARSED_VARIABLE; }
     884      701442 :         |       simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_VARIABLE; }
     885         137 :         |       static_member { $$ = $1; $$.u.EA.type = ZEND_PARSED_STATIC_MEMBER; }
     886         341 : ;
     887             : 
     888             : reference_variable:
     889      151998 :                 reference_variable '[' dim_offset ']'   { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
     890      151998 :         |       reference_variable '{' expr '}'         { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
     891          21 :         |       compound_variable                       { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
     892      704038 : ;
     893             : 
     894             : 
     895             : compound_variable:
     896      704010 :                 T_VARIABLE                      { $$ = $1; }
     897      704010 :         |       '$' '{' expr '}'        { $$ = $3; }
     898          28 : ;
     899             : 
     900             : dim_offset:
     901         425 :                 /* empty */             { $$.op_type = IS_UNUSED; }
     902         425 :         |       expr                    { $$ = $1; }
     903      152082 : ;
     904             : 
     905             : 
     906             : object_property:
     907       43792 :                 object_dim_list { $$ = $1; }
     908       43947 :         |       variable_without_objects { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); } { znode tmp_znode;  zend_do_pop_object(&tmp_znode TSRMLS_CC);  zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
     909         310 : ;
     910             : 
     911             : object_dim_list:
     912         509 :                 object_dim_list '[' dim_offset ']'      { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
     913         509 :         |       object_dim_list '{' expr '}'            { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
     914           0 :         |       variable_name { znode tmp_znode;  zend_do_pop_object(&tmp_znode TSRMLS_CC);  zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
     915       43792 : ;
     916             : 
     917             : variable_name:
     918       43747 :                 T_STRING                { $$ = $1; }
     919       43747 :         |       '{' expr '}'    { $$ = $2; }
     920          45 : ;
     921             : 
     922             : simple_indirect_reference:
     923         145 :                 '$' { Z_LVAL($$.u.constant) = 1; }
     924         145 :         |       simple_indirect_reference '$' { Z_LVAL($$.u.constant)++; }
     925          10 : ;
     926             : 
     927             : assignment_list:
     928             :                 assignment_list ',' assignment_list_element
     929             :         |       assignment_list_element
     930             : ;
     931             : 
     932             : 
     933             : assignment_list_element:
     934         246 :                 variable                                                                { zend_do_add_list_element(&$1 TSRMLS_CC); }
     935         258 :         |       T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')'    { zend_do_new_list_end(TSRMLS_C); }
     936          24 :         |       /* empty */                                                     { zend_do_add_list_element(NULL TSRMLS_CC); }
     937          17 : ;
     938             : 
     939             : 
     940             : array_pair_list:
     941        3149 :                 /* empty */ { zend_do_init_array(&$$, NULL, NULL, 0 TSRMLS_CC); }
     942        3149 :         |       non_empty_array_pair_list possible_comma        { $$ = $1; }
     943       23727 : ;
     944             : 
     945             : non_empty_array_pair_list:
     946       30793 :                 non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr  { zend_do_add_array_element(&$$, &$5, &$3, 0 TSRMLS_CC); }
     947       30793 :         |       non_empty_array_pair_list ',' expr                      { zend_do_add_array_element(&$$, &$3, NULL, 0 TSRMLS_CC); }
     948       51635 :         |       expr T_DOUBLE_ARROW expr        { zend_do_init_array(&$$, &$3, &$1, 0 TSRMLS_CC); }
     949       10311 :         |       expr                            { zend_do_init_array(&$$, &$1, NULL, 0 TSRMLS_CC); }
     950       13363 :         |       non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { zend_do_add_array_element(&$$, &$6, &$3, 1 TSRMLS_CC); }
     951          46 :         |       non_empty_array_pair_list ',' '&' w_variable { zend_do_add_array_element(&$$, &$4, NULL, 1 TSRMLS_CC); }
     952          37 :         |       expr T_DOUBLE_ARROW '&' w_variable  { zend_do_init_array(&$$, &$4, &$1, 1 TSRMLS_CC); }
     953          14 :         |       '&' w_variable                      { zend_do_init_array(&$$, &$2, NULL, 1 TSRMLS_CC); }
     954          39 : ;
     955             : 
     956             : encaps_list:
     957        7098 :                 encaps_list encaps_var { zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC);  zend_do_add_variable(&$$, &$1, &$2 TSRMLS_CC); }
     958        7098 :         |       encaps_list T_ENCAPSED_AND_WHITESPACE   { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
     959       16509 :         |       encaps_var { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&$$, NULL, &$1 TSRMLS_CC); }
     960        4493 :         |       T_ENCAPSED_AND_WHITESPACE encaps_var    { zend_do_add_string(&$$, NULL, &$1 TSRMLS_CC); zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&$$, &$$, &$2 TSRMLS_CC); }
     961        9859 : ;
     962             : 
     963             : 
     964             : 
     965             : encaps_var:
     966       19703 :                 T_VARIABLE { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
     967       20651 :         |       T_VARIABLE '[' { zend_do_begin_variable_parse(TSRMLS_C); } encaps_var_offset ']'        { fetch_array_begin(&$$, &$1, &$4 TSRMLS_CC); }
     968        1898 :         |       T_VARIABLE T_OBJECT_OPERATOR T_STRING { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$2, &$1, 1 TSRMLS_CC); zend_do_fetch_property(&$$, &$2, &$3 TSRMLS_CC); }
     969          81 :         |       T_DOLLAR_OPEN_CURLY_BRACES expr '}' { zend_do_begin_variable_parse(TSRMLS_C);  fetch_simple_variable(&$$, &$2, 1 TSRMLS_CC); }
     970          77 :         |       T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { zend_do_begin_variable_parse(TSRMLS_C);  fetch_array_begin(&$$, &$2, &$4 TSRMLS_CC); }
     971          10 :         |       T_CURLY_OPEN variable '}' { $$ = $2; }
     972         631 : ;
     973             : 
     974             : 
     975             : encaps_var_offset:
     976           4 :                 T_STRING                { $$ = $1; }
     977           4 :         |       T_NUM_STRING    { $$ = $1; }
     978         366 :         |       T_VARIABLE              { fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
     979         578 : ;
     980             : 
     981             : 
     982             : internal_functions_in_yacc:
     983        5109 :                 T_ISSET '(' isset_variables ')' { $$ = $3; }
     984        5109 :         |       T_EMPTY '(' variable ')'        { zend_do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 TSRMLS_CC); }
     985        7978 :         |       T_INCLUDE expr                  { zend_do_include_or_eval(ZEND_INCLUDE, &$$, &$2 TSRMLS_CC); }
     986        2099 :         |       T_INCLUDE_ONCE expr     { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 TSRMLS_CC); }
     987         549 :         |       T_EVAL '(' expr ')'     { zend_do_include_or_eval(ZEND_EVAL, &$$, &$3 TSRMLS_CC); }
     988        2210 :         |       T_REQUIRE expr                  { zend_do_include_or_eval(ZEND_REQUIRE, &$$, &$2 TSRMLS_CC); }
     989        2144 :         |       T_REQUIRE_ONCE expr             { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 TSRMLS_CC); }
     990        5742 : ;
     991             : 
     992             : isset_variables:
     993        5110 :                 variable                                { zend_do_isset_or_isempty(ZEND_ISSET, &$$, &$1 TSRMLS_CC); }
     994        5152 :         |       isset_variables ',' { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } variable { znode tmp; zend_do_isset_or_isempty(ZEND_ISSET, &tmp, &$4 TSRMLS_CC); zend_do_boolean_and_end(&$$, &$1, &tmp, &$2 TSRMLS_CC); }
     995          86 : ;
     996             : 
     997             : class_constant:
     998        9856 :                 class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
     999        9856 :         |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
    1000             : ;
    1001             : 
    1002             : %%
    1003             : 
    1004             : /*
    1005             :  * Local variables:
    1006             :  * tab-width: 4
    1007             :  * c-basic-offset: 4
    1008             :  * indent-tabs-mode: t
    1009             :  * End:
    1010             :  */

Generated by: LCOV version 1.10

Generated at Fri, 18 Apr 2014 07:01:24 +0000 (2 days ago)

Copyright © 2005-2014 The PHP Group
All rights reserved.