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

LTP GCOV extension - code coverage report
Current view: directory - var/php_gcov/PHP_5_2/Zend - zend_language_parser.y
Test: PHP Code Coverage
Date: 2009-11-19 Instrumented lines: 432
Code covered: 94.7 % Executed lines: 409
Legend: not executed executed

       1                 : %{
       2                 : /*
       3                 :    +----------------------------------------------------------------------+
       4                 :    | Zend Engine                                                          |
       5                 :    +----------------------------------------------------------------------+
       6                 :    | Copyright (c) 1998-2006 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: zend_language_parser.y 263383 2008-07-24 11:47:14Z dmitry $ */
      22                 : 
      23                 : /*
      24                 :  * LALR shift/reduce conflicts and how they are resolved:
      25                 :  *
      26                 :  * - 2 shift/reduce conflicts due to the dangeling 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_FUNCTION
     109                 : %token T_CONST
     110                 : %token T_RETURN
     111                 : %token T_TRY
     112                 : %token T_CATCH
     113                 : %token T_THROW
     114                 : %token T_USE
     115                 : %token T_GLOBAL
     116                 : %right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC
     117                 : %token T_VAR
     118                 : %token T_UNSET
     119                 : %token T_ISSET
     120                 : %token T_EMPTY
     121                 : %token T_HALT_COMPILER
     122                 : %token T_CLASS
     123                 : %token T_INTERFACE
     124                 : %token T_EXTENDS
     125                 : %token T_IMPLEMENTS
     126                 : %token T_OBJECT_OPERATOR
     127                 : %token T_DOUBLE_ARROW
     128                 : %token T_LIST
     129                 : %token T_ARRAY
     130                 : %token T_CLASS_C
     131                 : %token T_METHOD_C
     132                 : %token T_FUNC_C
     133                 : %token T_LINE
     134                 : %token T_FILE
     135                 : %token T_COMMENT
     136                 : %token T_DOC_COMMENT
     137                 : %token T_OPEN_TAG
     138                 : %token T_OPEN_TAG_WITH_ECHO
     139                 : %token T_CLOSE_TAG
     140                 : %token T_WHITESPACE
     141                 : %token T_START_HEREDOC
     142                 : %token T_END_HEREDOC
     143                 : %token T_DOLLAR_OPEN_CURLY_BRACES
     144                 : %token T_CURLY_OPEN
     145                 : %token T_PAAMAYIM_NEKUDOTAYIM
     146                 : 
     147                 : %% /* Rules */
     148                 : 
     149                 : start:
     150                 :         top_statement_list
     151                 : ;
     152                 : 
     153                 : top_statement_list:
     154          248658 :                 top_statement_list  { zend_do_extended_info(TSRMLS_C); } top_statement { HANDLE_INTERACTIVE(); }
     155          248658 :         |       /* empty */
     156                 : ;
     157                 : 
     158                 : 
     159                 : top_statement:
     160                 :                 statement
     161            4647 :         |       function_declaration_statement  { zend_do_early_binding(TSRMLS_C); }
     162            4647 :         |       class_declaration_statement             { zend_do_early_binding(TSRMLS_C); }
     163            4142 :         |       T_HALT_COMPILER '(' ')' ';'   { zend_do_halt_compiler_register(TSRMLS_C); YYACCEPT; }
     164                 : ;
     165                 : 
     166                 : 
     167                 : inner_statement_list:
     168          219809 :                 inner_statement_list  { zend_do_extended_info(TSRMLS_C); } inner_statement { HANDLE_INTERACTIVE(); }
     169          219809 :         |       /* empty */
     170                 : ;
     171                 : 
     172                 : 
     173                 : inner_statement:
     174                 :                 statement
     175                 :         |       function_declaration_statement
     176                 :         |       class_declaration_statement
     177               1 :         |       T_HALT_COMPILER '(' ')' ';'   { zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used from the outermost scope"); }
     178               0 : ;
     179                 : 
     180                 : 
     181                 : statement:
     182          266462 :                 unticked_statement { zend_do_ticks(TSRMLS_C); }
     183          266462 : ;
     184                 : 
     185                 : unticked_statement:
     186                 :                 '{' inner_statement_list '}'
     187           74059 :         |       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); }
     188           74061 :         |       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); }
     189            1029 :         |       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); }
     190            1949 :         |       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); }
     191             615 :         |       T_FOR
     192                 :                         '('
     193                 :                                 for_expr
     194            1787 :                         ';' { zend_do_free(&$3 TSRMLS_CC); $4.u.opline_num = get_next_op_number(CG(active_op_array)); }
     195            1787 :                                 for_expr
     196            1787 :                         ';' { zend_do_extended_info(TSRMLS_C); zend_do_for_cond(&$6, &$7 TSRMLS_CC); }
     197            1787 :                                 for_expr
     198            1787 :                         ')' { zend_do_free(&$9 TSRMLS_CC); zend_do_for_before_statement(&$4, &$7 TSRMLS_CC); }
     199            1787 :                         for_statement { zend_do_for_end(&$7 TSRMLS_CC); }
     200            2173 :         |       T_SWITCH '(' expr ')'   { zend_do_switch_cond(&$3 TSRMLS_CC); } switch_case_list { zend_do_switch_end(&$6 TSRMLS_CC); }
     201             772 :         |       T_BREAK ';'                             { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
     202            1398 :         |       T_BREAK expr ';'                { zend_do_brk_cont(ZEND_BRK, &$2 TSRMLS_CC); }
     203               3 :         |       T_CONTINUE ';'                  { zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
     204             171 :         |       T_CONTINUE expr ';'             { zend_do_brk_cont(ZEND_CONT, &$2 TSRMLS_CC); }
     205               0 :         |       T_RETURN ';'                                            { zend_do_return(NULL, 0 TSRMLS_CC); }
     206              86 :         |       T_RETURN expr_without_variable ';'      { zend_do_return(&$2, 0 TSRMLS_CC); }
     207            6991 :         |       T_RETURN variable ';'                           { zend_do_return(&$2, 1 TSRMLS_CC); }
     208            7185 :         |       T_GLOBAL global_var_list ';'
     209                 :         |       T_STATIC static_var_list ';'
     210                 :         |       T_ECHO echo_expr_list ';'
     211            2680 :         |       T_INLINE_HTML                   { zend_do_echo(&$1 TSRMLS_CC); }
     212            2680 :         |       expr ';'                                { zend_do_free(&$1 TSRMLS_CC); }
     213          138414 :         |       T_USE use_filename ';'          { zend_error(E_COMPILE_ERROR,"use: Not yet supported. Please use include_once() or require_once()");  zval_dtor(&$2.u.constant); }
     214               0 :         |       T_UNSET '(' unset_variables ')' ';'
     215                 :         |       T_FOREACH '(' variable T_AS
     216            5836 :                 { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 1 TSRMLS_CC); }
     217            5836 :                 foreach_variable foreach_optional_arg ')' { zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); }
     218            5831 :                 foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); }
     219            5831 :         |       T_FOREACH '(' expr_without_variable T_AS
     220              87 :                 { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 0 TSRMLS_CC); }
     221              87 :                 variable foreach_optional_arg ')' { zend_check_writable_variable(&$6); zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); }
     222              84 :                 foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); }
     223              90 :         |       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); }
     224              12 :         |       ';'             /* empty statement */
     225             959 :         |       T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}'
     226             959 :                 T_CATCH '(' { zend_initialize_try_catch_element(&$1 TSRMLS_CC); }
     227             959 :                 fully_qualified_class_name { zend_do_first_catch(&$7 TSRMLS_CC); }
     228             959 :                 T_VARIABLE ')' { zend_do_begin_catch(&$1, &$9, &$11, 1 TSRMLS_CC); }
     229             959 :                 '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
     230             959 :                 additional_catches { zend_do_mark_last_catch(&$7, &$18 TSRMLS_CC); }
     231             959 :         |       T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
     232             136 : ;
     233                 : 
     234                 : 
     235                 : additional_catches:
     236               7 :                 non_empty_additional_catches { $$ = $1; }
     237               7 :         |       /* empty */ { $$.u.opline_num = -1; }
     238             952 : ;
     239                 : 
     240                 : non_empty_additional_catches:
     241               7 :                 additional_catch { $$ = $1; }
     242               7 :         |       non_empty_additional_catches additional_catch { $$ = $2; }
     243               0 : ;
     244                 : 
     245                 : 
     246                 : additional_catch:
     247              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, 0 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
     248              21 : ;
     249                 : 
     250                 : 
     251                 : unset_variables:
     252                 :                 unset_variable
     253                 :         |       unset_variables ',' unset_variable
     254                 : ;
     255                 : 
     256                 : unset_variable:
     257            1325 :                 variable        { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1 TSRMLS_CC); }
     258            1324 : ;
     259                 : 
     260                 : use_filename:
     261               0 :                 T_CONSTANT_ENCAPSED_STRING                      { $$ = $1; }
     262               0 :         |       '(' T_CONSTANT_ENCAPSED_STRING ')'      { $$ = $2; }
     263               0 : ;
     264                 : 
     265                 : 
     266                 : function_declaration_statement:
     267            4770 :                 unticked_function_declaration_statement { zend_do_ticks(TSRMLS_C); }
     268            4770 : ;
     269                 : 
     270                 : class_declaration_statement:
     271            4187 :                 unticked_class_declaration_statement    { zend_do_ticks(TSRMLS_C); }
     272            4187 : ;
     273                 : 
     274                 : 
     275                 : is_reference:
     276           15198 :                 /* empty */     { $$.op_type = ZEND_RETURN_VAL; }
     277           15198 :         |       '&'                 { $$.op_type = ZEND_RETURN_REF; }
     278              40 : ;
     279                 : 
     280                 : 
     281                 : unticked_function_declaration_statement:
     282            9544 :                 T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type, NULL TSRMLS_CC); }
     283            9544 :                         '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
     284            4770 : ;
     285                 : 
     286                 : unticked_class_declaration_statement:
     287                 :                 class_entry_type T_STRING extends_from
     288            4127 :                         { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); }
     289            4122 :                         implements_list
     290                 :                         '{'
     291                 :                                 class_statement_list
     292            4080 :                         '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); }
     293            4072 :         |       interface_entry T_STRING
     294             118 :                         { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); }
     295             118 :                         interface_extends_list
     296                 :                         '{'
     297                 :                                 class_statement_list
     298             115 :                         '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); }
     299             115 : ;
     300                 : 
     301                 : 
     302                 : class_entry_type:
     303            4076 :                 T_CLASS                 { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = 0; }
     304            4076 :         |       T_ABSTRACT T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
     305              45 :         |       T_FINAL T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_FINAL_CLASS; }
     306               6 : ;
     307                 : 
     308                 : extends_from:
     309            3345 :                 /* empty */                                     { $$.op_type = IS_UNUSED; }
     310            3345 :         |       T_EXTENDS fully_qualified_class_name    { $$ = $2; }
     311             782 : ;
     312                 : 
     313                 : interface_entry:
     314             118 :         T_INTERFACE             { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_INTERFACE; }
     315             118 : ;
     316                 : 
     317                 : interface_extends_list:
     318                 :                 /* empty */
     319                 :         |       T_EXTENDS interface_list
     320                 : ;
     321                 : 
     322                 : implements_list:
     323                 :                 /* empty */
     324                 :         |       T_IMPLEMENTS interface_list
     325                 : ;
     326                 : 
     327                 : interface_list:
     328             221 :                 fully_qualified_class_name                      { zend_do_implements_interface(&$1 TSRMLS_CC); }
     329             219 :         |       interface_list ',' fully_qualified_class_name { zend_do_implements_interface(&$3 TSRMLS_CC); }
     330              31 : ;
     331                 : 
     332                 : foreach_optional_arg:
     333            4085 :                 /* empty */                                             { $$.op_type = IS_UNUSED; }
     334            4085 :         |       T_DOUBLE_ARROW foreach_variable { $$ = $2; }
     335            1837 : ;
     336                 : 
     337                 : 
     338                 : foreach_variable:
     339            7611 :                 variable                        { zend_check_writable_variable(&$1); $$ = $1; }
     340            7611 :         |       '&' variable                { zend_check_writable_variable(&$2); $$ = $2;  $$.u.EA.type |= ZEND_PARSED_REFERENCE_VARIABLE; }
     341              62 : ;
     342                 : 
     343                 : for_statement:
     344                 :                 statement
     345                 :         |       ':' inner_statement_list T_ENDFOR ';'
     346                 : ;
     347                 : 
     348                 : 
     349                 : foreach_statement:
     350                 :                 statement
     351                 :         |       ':' inner_statement_list T_ENDFOREACH ';'
     352                 : ;
     353                 : 
     354                 : 
     355                 : declare_statement:
     356                 :                 statement
     357                 :         |       ':' inner_statement_list T_ENDDECLARE ';'
     358                 : ;
     359                 : 
     360                 : 
     361                 : declare_list:
     362               6 :                 T_STRING '=' static_scalar                                      { zend_do_declare_stmt(&$1, &$3 TSRMLS_CC); }
     363               6 :         |       declare_list ',' T_STRING '=' static_scalar     { zend_do_declare_stmt(&$3, &$5 TSRMLS_CC); }
     364               0 : ;
     365                 : 
     366                 : 
     367                 : switch_case_list:
     368             386 :                 '{' case_list '}'                                       { $$ = $2; }
     369             386 :         |       '{' ';' case_list '}'                           { $$ = $3; }
     370               0 :         |       ':' case_list T_ENDSWITCH ';'           { $$ = $2; }
     371               0 :         |       ':' ';' case_list T_ENDSWITCH ';'       { $$ = $3; }
     372               0 : ;
     373                 : 
     374                 : 
     375                 : case_list:
     376             386 :                 /* empty */     { $$.op_type = IS_UNUSED; }
     377            1699 :         |       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; }
     378            2839 :         |       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; }
     379             426 : ;
     380                 : 
     381                 : 
     382                 : case_separator:
     383                 :                 ':'
     384                 :         |       ';'
     385                 : ;
     386                 : 
     387                 : 
     388                 : while_statement:
     389                 :                 statement
     390                 :         |       ':' inner_statement_list T_ENDWHILE ';'
     391                 : ;
     392                 : 
     393                 : 
     394                 : 
     395                 : elseif_list:
     396                 :                 /* empty */
     397            2544 :         |       elseif_list T_ELSEIF '(' expr ')' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } statement { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
     398            2544 : ;
     399                 : 
     400                 : 
     401                 : new_elseif_list:
     402                 :                 /* empty */
     403               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); }
     404               0 : ;
     405                 : 
     406                 : 
     407                 : else_single:
     408                 :                 /* empty */
     409                 :         |       T_ELSE statement
     410                 : ;
     411                 : 
     412                 : 
     413                 : new_else_single:
     414                 :                 /* empty */
     415                 :         |       T_ELSE ':' inner_statement_list
     416                 : ;
     417                 : 
     418                 : 
     419                 : parameter_list:
     420                 :                 non_empty_parameter_list
     421                 :         |       /* empty */
     422                 : ;
     423                 : 
     424                 : 
     425                 : non_empty_parameter_list:
     426           10038 :                 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); }
     427           10037 :         |       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); }
     428             208 :         |       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); }
     429               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); }
     430             648 :         |       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); }
     431            4465 :         |       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); }
     432              73 :         |       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); }
     433              62 :         |       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); }
     434            4806 : ;
     435                 : 
     436                 : 
     437                 : optional_class_type:
     438           20036 :                 /* empty */             { $$.op_type = IS_UNUSED; }
     439           20036 :         |       T_STRING                { $$ = $1; }
     440             108 :         |       T_ARRAY         { $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_NULL;}
     441             158 : ;
     442                 : 
     443                 : 
     444                 : function_call_parameter_list:
     445          122426 :                 non_empty_function_call_parameter_list  { $$ = $1; }
     446          122426 :         |       /* empty */                             { Z_LVAL($$.u.constant) = 0; }
     447           12736 : ;
     448                 : 
     449                 : 
     450                 : non_empty_function_call_parameter_list:
     451           51576 :                 expr_without_variable   { Z_LVAL($$.u.constant) = 1;  zend_do_pass_param(&$1, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); }
     452           51571 :         |       variable                                { Z_LVAL($$.u.constant) = 1;  zend_do_pass_param(&$1, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); }
     453           70841 :         |       '&' w_variable                              { Z_LVAL($$.u.constant) = 1;  zend_do_pass_param(&$2, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); }
     454              15 :         |       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); }
     455           42456 :         |       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); }
     456           24758 :         |       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); }
     457              12 : ;
     458                 : 
     459                 : global_var_list:
     460             606 :                 global_var_list ',' global_var  { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
     461             606 :         |       global_var                                              { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
     462            1027 : ;
     463                 : 
     464                 : 
     465                 : global_var:
     466            1631 :                 T_VARIABLE                      { $$ = $1; }
     467            1631 :         |       '$' r_variable          { $$ = $2; }
     468               1 :         |       '$' '{' expr '}'        { $$ = $3; }
     469               1 : ;
     470                 : 
     471                 : 
     472                 : static_var_list:
     473               1 :                 static_var_list ',' T_VARIABLE { zend_do_fetch_static_variable(&$3, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
     474               1 :         |       static_var_list ',' T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$3, &$5, ZEND_FETCH_STATIC TSRMLS_CC); }
     475               5 :         |       T_VARIABLE  { zend_do_fetch_static_variable(&$1, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
     476              14 :         |       T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$1, &$3, ZEND_FETCH_STATIC TSRMLS_CC); }
     477             621 : 
     478                 : ;
     479                 : 
     480                 : 
     481                 : class_statement_list:
     482                 :                 class_statement_list class_statement
     483                 :         |       /* empty */
     484                 : ;
     485                 : 
     486                 : 
     487                 : class_statement:
     488            1592 :                 variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration ';'
     489            1592 :         |       class_constant_declaration ';'
     490           20932 :         |       method_modifiers T_FUNCTION { $2.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$5, 1, $4.op_type, &$1 TSRMLS_CC); } '('
     491           20929 :                         parameter_list ')' method_body { zend_do_abstract_method(&$5, &$1, &$10 TSRMLS_CC); zend_do_end_function_declaration(&$2 TSRMLS_CC); }
     492           10439 : ;
     493                 : 
     494                 : 
     495                 : method_body:
     496              90 :                 ';' /* abstract method */               { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
     497              90 :         |       '{' inner_statement_list '}'    { Z_LVAL($$.u.constant) = 0;    }
     498           10366 : ;
     499                 : 
     500                 : variable_modifiers:
     501            1489 :                 non_empty_member_modifiers              { $$ = $1; }
     502            1489 :         |       T_VAR                                                   { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
     503             103 : ;
     504                 : 
     505                 : method_modifiers:
     506            6420 :                 /* empty */                                                     { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
     507            6420 :         |       non_empty_member_modifiers                      { $$ = $1;  if (!(Z_LVAL($$.u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL($$.u.constant) |= ZEND_ACC_PUBLIC; } }
     508            4046 : ;
     509                 : 
     510                 : non_empty_member_modifiers:
     511            5540 :                 member_modifier                                         { $$ = $1; }
     512            5540 :         |       non_empty_member_modifiers member_modifier      { Z_LVAL($$.u.constant) = zend_do_verify_access_types(&$1, &$2); }
     513             375 : ;
     514                 : 
     515                 : member_modifier:
     516            2114 :                 T_PUBLIC                                { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
     517            2114 :         |       T_PROTECTED                             { Z_LVAL($$.u.constant) = ZEND_ACC_PROTECTED; }
     518             414 :         |       T_PRIVATE                               { Z_LVAL($$.u.constant) = ZEND_ACC_PRIVATE; }
     519             557 :         |       T_STATIC                                { Z_LVAL($$.u.constant) = ZEND_ACC_STATIC; }
     520            2782 :         |       T_ABSTRACT                              { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
     521              37 :         |       T_FINAL                                 { Z_LVAL($$.u.constant) = ZEND_ACC_FINAL; }
     522              16 : ;
     523                 : 
     524                 : class_variable_declaration:
     525              38 :                 class_variable_declaration ',' T_VARIABLE                                       { zend_do_declare_property(&$3, NULL, CG(access_type) TSRMLS_CC); }
     526              38 :         |       class_variable_declaration ',' T_VARIABLE '=' static_scalar     { zend_do_declare_property(&$3, &$5, CG(access_type) TSRMLS_CC); }
     527               3 :         |       T_VARIABLE                                              { zend_do_declare_property(&$1, NULL, CG(access_type) TSRMLS_CC); }
     528             672 :         |       T_VARIABLE '=' static_scalar    { zend_do_declare_property(&$1, &$3, CG(access_type) TSRMLS_CC); }
     529             916 : ;
     530                 : 
     531                 : class_constant_declaration:
     532               3 :                 class_constant_declaration ',' T_STRING '=' static_scalar       { zend_do_declare_class_constant(&$3, &$5 TSRMLS_CC); }
     533               3 :         |       T_CONST T_STRING '=' static_scalar      { zend_do_declare_class_constant(&$2, &$4 TSRMLS_CC); }
     534             130 : ;
     535                 : 
     536                 : echo_expr_list:
     537             668 :                 echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); }
     538             668 :         |       expr                                    { zend_do_echo(&$1 TSRMLS_CC); }
     539           22466 : ;
     540                 : 
     541                 : 
     542                 : for_expr:
     543               8 :                 /* empty */                     { $$.op_type = IS_CONST;  Z_TYPE($$.u.constant) = IS_BOOL;  Z_LVAL($$.u.constant) = 1; }
     544               8 :         |       non_empty_for_expr      { $$ = $1; }
     545            5353 : ;
     546                 : 
     547                 : non_empty_for_expr:
     548               8 :                 non_empty_for_expr ','  { zend_do_free(&$1 TSRMLS_CC); } expr { $$ = $4; }
     549               8 :         |       expr                                    { $$ = $1; }
     550            5353 : ;
     551                 : 
     552                 : expr_without_variable:
     553             140 :                 T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
     554             140 :         |       variable '=' expr               { zend_check_writable_variable(&$1); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
     555           68111 :         |       variable '=' '&' variable { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
     556             272 :         |       variable '=' '&' T_NEW class_name_reference { zend_error(E_STRICT, "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(BP_VAR_W, 0 TSRMLS_CC); $3.u.EA.type = ZEND_PARSED_NEW; zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
     557            7068 :         |       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);}
     558           14088 :         |       T_CLONE expr { zend_do_clone(&$$, &$2 TSRMLS_CC); }
     559              45 :         |       variable T_PLUS_EQUAL expr      { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
     560             158 :         |       variable T_MINUS_EQUAL expr     { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
     561             131 :         |       variable T_MUL_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
     562               9 :         |       variable T_DIV_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); }
     563               3 :         |       variable T_CONCAT_EQUAL expr    { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
     564             815 :         |       variable T_MOD_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); }
     565               0 :         |       variable T_AND_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
     566               2 :         |       variable T_OR_EQUAL expr                { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
     567               1 :         |       variable T_XOR_EQUAL expr               { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
     568               1 :         |       variable T_SL_EQUAL expr        { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 TSRMLS_CC); }
     569               3 :         |       variable T_SR_EQUAL expr        { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 TSRMLS_CC); }
     570               3 :         |       rw_variable T_INC { zend_do_post_incdec(&$$, &$1, ZEND_POST_INC TSRMLS_CC); }
     571            5096 :         |       T_INC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_INC TSRMLS_CC); }
     572             301 :         |       rw_variable T_DEC { zend_do_post_incdec(&$$, &$1, ZEND_POST_DEC TSRMLS_CC); }
     573              43 :         |       T_DEC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_DEC TSRMLS_CC); }
     574             856 :         |       expr T_BOOLEAN_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     575            4074 :         |       expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     576            5494 :         |       expr T_LOGICAL_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     577            1463 :         |       expr T_LOGICAL_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
     578              22 :         |       expr T_LOGICAL_XOR expr { zend_do_binary_op(ZEND_BOOL_XOR, &$$, &$1, &$3 TSRMLS_CC); }
     579               0 :         |       expr '|' expr   { zend_do_binary_op(ZEND_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
     580             314 :         |       expr '&' expr       { zend_do_binary_op(ZEND_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
     581             143 :         |       expr '^' expr   { zend_do_binary_op(ZEND_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
     582              18 :         |       expr '.' expr   { zend_do_binary_op(ZEND_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
     583           21077 :         |       expr '+' expr   { zend_do_binary_op(ZEND_ADD, &$$, &$1, &$3 TSRMLS_CC); }
     584             897 :         |       expr '-' expr   { zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); }
     585             289 :         |       expr '*' expr   { zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); }
     586             252 :         |       expr '/' expr   { zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); }
     587             477 :         |       expr '%' expr   { zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); }
     588              48 :         |       expr T_SL expr  { zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); }
     589              88 :         |       expr T_SR expr  { zend_do_binary_op(ZEND_SR, &$$, &$1, &$3 TSRMLS_CC); }
     590              17 :         |       '+' expr %prec T_INC { Z_LVAL($1.u.constant)=0; Z_TYPE($1.u.constant)=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_ADD, &$$, &$1, &$2 TSRMLS_CC); }
     591             255 :         |       '-' expr %prec T_INC { Z_LVAL($1.u.constant)=0; Z_TYPE($1.u.constant)=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_SUB, &$$, &$1, &$2 TSRMLS_CC); }
     592            4731 :         |       '!' expr { zend_do_unary_op(ZEND_BOOL_NOT, &$$, &$2 TSRMLS_CC); }
     593            7632 :         |       '~' expr { zend_do_unary_op(ZEND_BW_NOT, &$$, &$2 TSRMLS_CC); }
     594              82 :         |       expr T_IS_IDENTICAL expr                { zend_do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
     595            3027 :         |       expr T_IS_NOT_IDENTICAL expr    { zend_do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
     596            1181 :         |       expr T_IS_EQUAL expr                    { zend_do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
     597            8183 :         |       expr T_IS_NOT_EQUAL expr                { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
     598            1760 :         |       expr '<' expr                                        { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 TSRMLS_CC); }
     599            1165 :         |       expr T_IS_SMALLER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
     600            1568 :         |       expr '>' expr                                        { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); }
     601             652 :         |       expr T_IS_GREATER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 TSRMLS_CC); }
     602             220 :         |       expr T_INSTANCEOF class_name_reference { zend_do_instanceof(&$$, &$1, &$3, 0 TSRMLS_CC); }
     603              20 :         |       '(' expr ')'    { $$ = $2; }
     604            5320 :         |       expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
     605            1900 :                 expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); }
     606            1900 :                 expr     { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); }
     607            1900 :         |       internal_functions_in_yacc { $$ = $1; }
     608            7322 :         |       T_INT_CAST expr         { zend_do_cast(&$$, &$2, IS_LONG TSRMLS_CC); }
     609             170 :         |       T_DOUBLE_CAST expr      { zend_do_cast(&$$, &$2, IS_DOUBLE TSRMLS_CC); }
     610              17 :         |       T_STRING_CAST expr      { zend_do_cast(&$$, &$2, IS_STRING TSRMLS_CC); }
     611             113 :         |       T_ARRAY_CAST expr       { zend_do_cast(&$$, &$2, IS_ARRAY TSRMLS_CC); }
     612               5 :         |       T_OBJECT_CAST expr      { zend_do_cast(&$$, &$2, IS_OBJECT TSRMLS_CC); }
     613             144 :         |       T_BOOL_CAST expr        { zend_do_cast(&$$, &$2, IS_BOOL TSRMLS_CC); }
     614              31 :         |       T_UNSET_CAST expr       { zend_do_cast(&$$, &$2, IS_NULL TSRMLS_CC); }
     615               0 :         |       T_EXIT exit_expr        { zend_do_exit(&$$, &$2 TSRMLS_CC); }
     616           11160 :         |       '@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; }
     617            6572 :         |       scalar                          { $$ = $1; }
     618          273216 :         |       T_ARRAY '(' array_pair_list ')' { $$ = $3; }
     619           16915 :         |       '`' encaps_list '`' { zend_do_shell_exec(&$$, &$2 TSRMLS_CC); }
     620              98 :         |       T_PRINT expr  { zend_do_print(&$$, &$2 TSRMLS_CC); }
     621            2210 : ;
     622                 : 
     623                 : function_call:
     624          112114 :                 T_STRING        '(' { $2.u.opline_num = zend_do_begin_function_call(&$1 TSRMLS_CC); }
     625          112114 :                                 function_call_parameter_list
     626          112103 :                                 ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
     627          112103 :         |       fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
     628            2383 :                         function_call_parameter_list
     629            2383 :                         ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     630            2383 :         |       fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
     631               3 :                         function_call_parameter_list
     632               3 :                         ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     633               3 :         |       variable_without_objects  '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&$1 TSRMLS_CC); }
     634            1751 :                         function_call_parameter_list ')'
     635            1751 :                         { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
     636            1751 : ;
     637                 : 
     638                 : fully_qualified_class_name:
     639            8666 :                 T_STRING { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
     640            8666 : ;
     641                 : 
     642                 : class_name_reference:
     643            6497 :                 T_STRING                                { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
     644            6497 :         |       dynamic_class_name_reference    { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
     645             580 : ;
     646                 : 
     647                 : 
     648                 : dynamic_class_name_reference:
     649               1 :                 base_variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
     650               1 :                         object_property { zend_do_push_object(&$4 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } dynamic_class_name_variable_properties
     651               1 :                         { zend_do_pop_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_MEMBER; }
     652               1 :         |       base_variable { $$ = $1; }
     653             579 : ;
     654                 : 
     655                 : 
     656                 : dynamic_class_name_variable_properties:
     657                 :                 dynamic_class_name_variable_properties dynamic_class_name_variable_property
     658                 :         |       /* empty */
     659                 : ;
     660                 : 
     661                 : 
     662                 : dynamic_class_name_variable_property:
     663               0 :                 T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); }
     664               0 : ;
     665                 : 
     666                 : exit_expr:
     667             363 :                 /* empty */     { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
     668             363 :         |       '(' ')'         { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
     669             102 :         |       '(' expr ')'    { $$ = $2; }
     670            7409 : ;
     671                 : 
     672                 : 
     673                 : ctor_arguments:
     674            1207 :                 /* empty */     { Z_LVAL($$.u.constant)=0; }
     675            1207 :         |       '(' function_call_parameter_list ')'    { $$ = $2; }
     676            5849 : ;
     677                 : 
     678                 : 
     679                 : common_scalar:
     680           54655 :                 T_LNUMBER                                       { $$ = $1; }
     681           54655 :         |       T_DNUMBER                                       { $$ = $1; }
     682            7268 :         |       T_CONSTANT_ENCAPSED_STRING      { $$ = $1; }
     683          169631 :         |       T_LINE                                          { $$ = $1; }
     684              11 :         |       T_FILE                                          { $$ = $1; }
     685            4335 :         |       T_CLASS_C                                       { $$ = $1; }
     686              41 :         |       T_METHOD_C                                      { $$ = $1; }
     687             658 :         |       T_FUNC_C                                        { $$ = $1; }
     688              63 : ;
     689                 : 
     690                 : 
     691                 : static_scalar: /* compile-time evaluated scalars */
     692            8012 :                 common_scalar           { $$ = $1; }
     693            8012 :         |       T_STRING                { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT TSRMLS_CC); }
     694             400 :         |       '+' static_scalar       { $$ = $2; }
     695               2 :         |       '-' static_scalar       { zval minus_one;  Z_TYPE(minus_one) = IS_LONG; Z_LVAL(minus_one) = -1;  mul_function(&$2.u.constant, &$2.u.constant, &minus_one TSRMLS_CC);  $$ = $2; }
     696               4 :         |       T_ARRAY '(' static_array_pair_list ')' { $$ = $3; Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; }
     697             693 :         |       static_class_constant { $$ = $1; }
     698              75 : ;
     699                 : 
     700                 : static_class_constant:
     701              75 :                 T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_CT TSRMLS_CC); }
     702              75 : ;
     703                 : 
     704                 : scalar:
     705           29904 :                 T_STRING                                { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT TSRMLS_CC); }
     706           29904 :         |       T_STRING_VARNAME                { $$ = $1; }
     707              67 :         |       class_constant  { $$ = $1; }
     708            4047 :         |       common_scalar                   { $$ = $1; }
     709          228650 :         |       '"' encaps_list '"'   { $$ = $2; }
     710            9283 :         |       T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; }
     711            1265 : ;
     712                 : 
     713                 : 
     714                 : static_array_pair_list:
     715              56 :                 /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
     716              56 :         |       non_empty_static_array_pair_list possible_comma { $$ = $1; }
     717             637 : ;
     718                 : 
     719                 : possible_comma:
     720                 :                 /* empty */
     721                 :         |       ','
     722                 : ;
     723                 : 
     724                 : non_empty_static_array_pair_list:
     725              54 :                 non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { zend_do_add_static_array_element(&$$, &$3, &$5); }
     726              54 :         |       non_empty_static_array_pair_list ',' static_scalar { zend_do_add_static_array_element(&$$, NULL, &$3); }
     727            1193 :         |       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); }
     728              34 :         |       static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); }
     729             603 : ;
     730                 : 
     731                 : expr:
     732          152620 :                 r_variable                                      { $$ = $1; }
     733          152620 :         |       expr_without_variable           { $$ = $1; }
     734          357691 : ;
     735                 : 
     736                 : 
     737                 : r_variable:
     738          152622 :         variable { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
     739          152621 : ;
     740                 : 
     741                 : 
     742                 : w_variable:
     743             139 :         variable        { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); $$ = $1;
     744             139 :                                 zend_check_writable_variable(&$1); }
     745             139 : ;
     746                 : 
     747                 : rw_variable:
     748            5451 :         variable        { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); $$ = $1;
     749            5451 :                                 zend_check_writable_variable(&$1); }
     750            5451 : ;
     751                 : 
     752                 : variable:
     753           18886 :                 base_variable_with_function_calls T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
     754           18886 :                         object_property { zend_do_push_object(&$4 TSRMLS_CC); } method_or_not variable_properties
     755           18886 :                         { 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); }
     756           18885 :         |       base_variable_with_function_calls { $$ = $1; }
     757          329172 : ;
     758                 : 
     759                 : variable_properties:
     760            1114 :                 variable_properties variable_property { $$.u.EA.type = $2.u.EA.type; }
     761            1114 :         |       /* empty */ { $$.u.EA.type = 0; }
     762           18885 : ;
     763                 : 
     764                 : 
     765                 : variable_property:
     766            2228 :                 T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); } method_or_not { $$.u.EA.type = $4.u.EA.type; }
     767            2228 : ;
     768                 : 
     769                 : method_or_not:
     770           13074 :                 '(' { zend_do_pop_object(&$1 TSRMLS_CC); zend_do_begin_method_call(&$1 TSRMLS_CC); }
     771           13073 :                                 function_call_parameter_list ')'
     772           13073 :                         { zend_do_end_function_call(&$1, &$$, &$3, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);
     773           13073 :                           zend_do_push_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_METHOD_CALL; }
     774           13073 :         |       /* empty */ { zend_do_declare_implicit_property(TSRMLS_C); $$.u.EA.type = ZEND_PARSED_MEMBER; }
     775            6926 : ;
     776                 : 
     777                 : variable_without_objects:
     778            2040 :                 reference_variable { $$ = $1; }
     779            2040 :         |       simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); }
     780               0 : ;
     781                 : 
     782                 : static_member:
     783             232 :                 fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
     784             232 : ;
     785                 : 
     786                 : 
     787                 : base_variable_with_function_calls:
     788          231818 :                 base_variable           { $$ = $1; }
     789          231818 :         |       function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.u.EA.type = ZEND_PARSED_FUNCTION_CALL; }
     790          116240 : ;
     791                 : 
     792                 : 
     793                 : base_variable:
     794          232134 :                 reference_variable { $$ = $1; $$.u.EA.type = ZEND_PARSED_VARIABLE; }
     795          232134 :         |       simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_VARIABLE; }
     796              32 :         |       static_member { $$ = $1; $$.u.EA.type = ZEND_PARSED_STATIC_MEMBER; }
     797             232 : ;
     798                 : 
     799                 : reference_variable:
     800           14559 :                 reference_variable '[' dim_offset ']'   { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
     801           14559 :         |       reference_variable '{' expr '}'         { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
     802               4 :         |       compound_variable                       { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
     803          234206 : ;
     804                 : 
     805                 : 
     806                 : compound_variable:
     807          234186 :                 T_VARIABLE                      { $$ = $1; }
     808          234186 :         |       '$' '{' expr '}'        { $$ = $3; }
     809              20 : ;
     810                 : 
     811                 : dim_offset:
     812             260 :                 /* empty */             { $$.op_type = IS_UNUSED; }
     813             260 :         |       expr                    { $$ = $1; }
     814           14791 : ;
     815                 : 
     816                 : 
     817                 : object_property:
     818           19947 :                 object_dim_list { $$ = $1; }
     819           20001 :         |       variable_without_objects { zend_do_end_variable_parse(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);}
     820             108 : ;
     821                 : 
     822                 : object_dim_list:
     823             492 :                 object_dim_list '[' dim_offset ']'      { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
     824             492 :         |       object_dim_list '{' expr '}'            { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
     825               0 :         |       variable_name { znode tmp_znode;  zend_do_pop_object(&tmp_znode TSRMLS_CC);  zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
     826           19947 : ;
     827                 : 
     828                 : variable_name:
     829           19914 :                 T_STRING                { $$ = $1; }
     830           19914 :         |       '{' expr '}'    { $$ = $2; }
     831              33 : ;
     832                 : 
     833                 : simple_indirect_reference:
     834              33 :                 '$' { Z_LVAL($$.u.constant) = 1; }
     835              33 :         |       simple_indirect_reference '$' { Z_LVAL($$.u.constant)++; }
     836               8 : ;
     837                 : 
     838                 : assignment_list:
     839                 :                 assignment_list ',' assignment_list_element
     840                 :         |       assignment_list_element
     841                 : ;
     842                 : 
     843                 : 
     844                 : assignment_list_element:
     845             176 :                 variable                                                                { zend_do_add_list_element(&$1 TSRMLS_CC); }
     846             183 :         |       T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')'    { zend_do_new_list_end(TSRMLS_C); }
     847              14 :         |       /* empty */                                                     { zend_do_add_list_element(NULL TSRMLS_CC); }
     848              15 : ;
     849                 : 
     850                 : 
     851                 : array_pair_list:
     852            1533 :                 /* empty */ { zend_do_init_array(&$$, NULL, NULL, 0 TSRMLS_CC); }
     853            1533 :         |       non_empty_array_pair_list possible_comma        { $$ = $1; }
     854           15382 : ;
     855                 : 
     856                 : non_empty_array_pair_list:
     857           16749 :                 non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr  { zend_do_add_array_element(&$$, &$5, &$3, 0 TSRMLS_CC); }
     858           16749 :         |       non_empty_array_pair_list ',' expr                      { zend_do_add_array_element(&$$, &$3, NULL, 0 TSRMLS_CC); }
     859           42591 :         |       expr T_DOUBLE_ARROW expr        { zend_do_init_array(&$$, &$3, &$1, 0 TSRMLS_CC); }
     860            5910 :         |       expr                            { zend_do_init_array(&$$, &$1, NULL, 0 TSRMLS_CC); }
     861            9431 :         |       non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { zend_do_add_array_element(&$$, &$6, &$3, 1 TSRMLS_CC); }
     862              35 :         |       non_empty_array_pair_list ',' '&' w_variable { zend_do_add_array_element(&$$, &$4, NULL, 1 TSRMLS_CC); }
     863              36 :         |       expr T_DOUBLE_ARROW '&' w_variable  { zend_do_init_array(&$$, &$4, &$1, 1 TSRMLS_CC); }
     864               7 :         |       '&' w_variable                      { zend_do_init_array(&$$, &$2, NULL, 1 TSRMLS_CC); }
     865              34 : ;
     866                 : 
     867                 : encaps_list:
     868           13234 :                 encaps_list encaps_var { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);  zend_do_add_variable(&$$, &$1, &$2 TSRMLS_CC); }
     869           13234 :         |       encaps_list T_ENCAPSED_AND_WHITESPACE   { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
     870           17821 :         |       /* empty */                     { zend_do_init_string(&$$ TSRMLS_CC); }
     871           10647 : 
     872                 : ;
     873                 : 
     874                 : 
     875                 : 
     876                 : encaps_var:
     877           11996 :                 T_VARIABLE { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
     878           12867 :         |       T_VARIABLE '[' { zend_do_begin_variable_parse(TSRMLS_C); } encaps_var_offset ']'        { fetch_array_begin(&$$, &$1, &$4 TSRMLS_CC); }
     879            1743 :         |       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); }
     880              59 :         |       T_DOLLAR_OPEN_CURLY_BRACES expr '}' { zend_do_begin_variable_parse(TSRMLS_C);  fetch_simple_variable(&$$, &$2, 1 TSRMLS_CC); }
     881              67 :         |       T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { zend_do_begin_variable_parse(TSRMLS_C);  fetch_array_begin(&$$, &$2, &$4 TSRMLS_CC); }
     882              10 :         |       T_CURLY_OPEN variable '}' { $$ = $2; }
     883             231 : ;
     884                 : 
     885                 : 
     886                 : encaps_var_offset:
     887               0 :                 T_STRING                { $$ = $1; }
     888               0 :         |       T_NUM_STRING    { $$ = $1; }
     889             290 :         |       T_VARIABLE              { fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
     890             581 : ;
     891                 : 
     892                 : 
     893                 : internal_functions_in_yacc:
     894            1135 :                 T_ISSET '(' isset_variables ')' { $$ = $3; }
     895            1135 :         |       T_EMPTY '(' variable ')'        { zend_do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 TSRMLS_CC); }
     896             779 :         |       T_INCLUDE expr                  { zend_do_include_or_eval(ZEND_INCLUDE, &$$, &$2 TSRMLS_CC); }
     897            1576 :         |       T_INCLUDE_ONCE expr     { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 TSRMLS_CC); }
     898              50 :         |       T_EVAL '(' expr ')'     { zend_do_include_or_eval(ZEND_EVAL, &$$, &$3 TSRMLS_CC); }
     899            1188 :         |       T_REQUIRE expr                  { zend_do_include_or_eval(ZEND_REQUIRE, &$$, &$2 TSRMLS_CC); }
     900             766 :         |       T_REQUIRE_ONCE expr             { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 TSRMLS_CC); }
     901            1828 : ;
     902                 : 
     903                 : isset_variables:
     904            1136 :                 variable                                { zend_do_isset_or_isempty(ZEND_ISSET, &$$, &$1 TSRMLS_CC); }
     905            1177 :         |       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); }
     906              84 : ;
     907                 : 
     908                 : class_constant:
     909            4047 :                 fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT TSRMLS_CC); }
     910                 : ;
     911                 : 
     912                 : %%
     913                 : 
     914                 : /*
     915                 :  * Local variables:
     916                 :  * tab-width: 4
     917                 :  * c-basic-offset: 4
     918                 :  * indent-tabs-mode: t
     919                 :  * End:
     920                 :  */

Generated by: LTP GCOV extension version 1.5

Generated at Thu, 19 Nov 2009 08:20:04 +0000 (5 days ago)

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