1 : %{
2 : /*
3 : +----------------------------------------------------------------------+
4 : | Zend Engine |
5 : +----------------------------------------------------------------------+
6 : | Copyright (c) 1998-2009 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 281094 2009-05-25 14:32:15Z felipe $ */
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_UNICODE_CAST T_BINARY_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_BINARY_DOUBLE
148 : %token T_BINARY_HEREDOC
149 : %token T_NAMESPACE
150 : %token T_NS_C
151 : %token T_DIR
152 : %token T_NS_SEPARATOR
153 :
154 : %% /* Rules */
155 :
156 : start:
157 24792 : top_statement_list { zend_do_end_compilation(TSRMLS_C); }
158 24792 : ;
159 :
160 : top_statement_list:
161 354169 : top_statement_list { zend_do_extended_info(TSRMLS_C); } top_statement { HANDLE_INTERACTIVE(); }
162 354169 : | /* empty */
163 : ;
164 :
165 : namespace_name:
166 307613 : T_STRING { $$ = $1; }
167 307613 : | namespace_name T_NS_SEPARATOR T_STRING { zend_do_build_namespace_name(&$$, &$1, &$3 TSRMLS_CC); }
168 277 : ;
169 :
170 : top_statement:
171 166553 : statement { zend_verify_namespace(TSRMLS_C); }
172 166552 : | function_declaration_statement { zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
173 4994 : | class_declaration_statement { zend_verify_namespace(TSRMLS_C); zend_do_early_binding(TSRMLS_C); }
174 5111 : | T_HALT_COMPILER '(' ')' ';' { zend_do_halt_compiler_register(TSRMLS_C); YYACCEPT; }
175 121 : | T_NAMESPACE namespace_name ';' { zend_do_begin_namespace(&$2, 0 TSRMLS_CC); }
176 119 : | T_NAMESPACE namespace_name '{' { zend_do_begin_namespace(&$2, 1 TSRMLS_CC); }
177 9 : top_statement_list '}' { zend_do_end_namespace(TSRMLS_C); }
178 7 : | T_NAMESPACE '{' { zend_do_begin_namespace(NULL, 1 TSRMLS_CC); }
179 2 : top_statement_list '}' { zend_do_end_namespace(TSRMLS_C); }
180 2 : | T_USE use_declarations ';' { zend_verify_namespace(TSRMLS_C); }
181 43 : | constant_declaration ';' { zend_verify_namespace(TSRMLS_C); }
182 32 : ;
183 :
184 : use_declarations:
185 : use_declarations ',' use_declaration
186 : | use_declaration
187 : ;
188 :
189 : use_declaration:
190 7 : namespace_name { zend_do_use(&$1, NULL, 0 TSRMLS_CC); }
191 6 : | namespace_name T_AS T_STRING { zend_do_use(&$1, &$3, 0 TSRMLS_CC); }
192 24 : | T_NS_SEPARATOR namespace_name { zend_do_use(&$2, NULL, 1 TSRMLS_CC); }
193 10 : | T_NS_SEPARATOR namespace_name T_AS T_STRING { zend_do_use(&$2, &$4, 1 TSRMLS_CC); }
194 4 : ;
195 :
196 : constant_declaration:
197 0 : constant_declaration ',' T_STRING '=' static_scalar { zend_do_declare_constant(&$3, &$5 TSRMLS_CC); }
198 0 : | T_CONST T_STRING '=' static_scalar { zend_do_declare_constant(&$2, &$4 TSRMLS_CC); }
199 32 : ;
200 :
201 : inner_statement_list:
202 377060 : inner_statement_list { zend_do_extended_info(TSRMLS_C); } inner_statement { HANDLE_INTERACTIVE(); }
203 377060 : | /* empty */
204 : ;
205 :
206 :
207 : inner_statement:
208 : statement
209 : | function_declaration_statement
210 : | class_declaration_statement
211 1 : | T_HALT_COMPILER '(' ')' ';' { zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used from the outermost scope"); }
212 0 : ;
213 :
214 :
215 : statement:
216 433237 : unticked_statement { zend_do_ticks(TSRMLS_C); }
217 433237 : | T_STRING ':' { zend_do_label(&$1 TSRMLS_CC); }
218 24 : ;
219 :
220 : unticked_statement:
221 : '{' inner_statement_list '}'
222 162545 : | 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); }
223 162551 : | 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); }
224 1471 : | 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); }
225 2725 : | 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); }
226 798 : | T_FOR
227 : '('
228 : for_expr
229 1837 : ';' { zend_do_free(&$3 TSRMLS_CC); $4.u.opline_num = get_next_op_number(CG(active_op_array)); }
230 1837 : for_expr
231 1837 : ';' { zend_do_extended_info(TSRMLS_C); zend_do_for_cond(&$6, &$7 TSRMLS_CC); }
232 1837 : for_expr
233 1837 : ')' { zend_do_free(&$9 TSRMLS_CC); zend_do_for_before_statement(&$4, &$7 TSRMLS_CC); }
234 1837 : for_statement { zend_do_for_end(&$7 TSRMLS_CC); }
235 2273 : | T_SWITCH '(' expr ')' { zend_do_switch_cond(&$3 TSRMLS_CC); } switch_case_list { zend_do_switch_end(&$6 TSRMLS_CC); }
236 872 : | T_BREAK ';' { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); }
237 1618 : | T_BREAK expr ';' { zend_do_brk_cont(ZEND_BRK, &$2 TSRMLS_CC); }
238 10 : | T_CONTINUE ';' { zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); }
239 203 : | T_CONTINUE expr ';' { zend_do_brk_cont(ZEND_CONT, &$2 TSRMLS_CC); }
240 1 : | T_RETURN ';' { zend_do_return(NULL, 0 TSRMLS_CC); }
241 114 : | T_RETURN expr_without_variable ';' { zend_do_return(&$2, 0 TSRMLS_CC); }
242 10438 : | T_RETURN variable ';' { zend_do_return(&$2, 1 TSRMLS_CC); }
243 17469 : | T_GLOBAL global_var_list ';'
244 : | T_STATIC static_var_list ';'
245 : | T_ECHO echo_expr_list ';'
246 3149 : | T_INLINE_HTML { zend_do_echo(&$1, 1 TSRMLS_CC); }
247 3149 : | expr ';' { zend_do_free(&$1 TSRMLS_CC); }
248 220972 : | T_UNSET '(' unset_variables ')' ';'
249 : | T_FOREACH '(' variable T_AS
250 8699 : { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 1 TSRMLS_CC); }
251 8699 : foreach_variable foreach_optional_arg ')' { zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); }
252 8694 : foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); }
253 8694 : | T_FOREACH '(' expr_without_variable T_AS
254 215 : { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 0 TSRMLS_CC); }
255 215 : variable foreach_optional_arg ')' { zend_check_writable_variable(&$6); zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); }
256 212 : foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); }
257 280 : | 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); }
258 137 : | ';' /* empty statement */
259 1747 : | T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}'
260 1747 : T_CATCH '(' { zend_initialize_try_catch_element(&$1 TSRMLS_CC); }
261 1747 : fully_qualified_class_name { zend_do_first_catch(&$7 TSRMLS_CC); }
262 1747 : T_VARIABLE ')' { zend_do_begin_catch(&$1, &$9, &$11, &$7 TSRMLS_CC); }
263 1747 : '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
264 1747 : additional_catches { zend_do_mark_last_catch(&$7, &$18 TSRMLS_CC); }
265 1747 : | T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
266 229 : | T_GOTO T_STRING ';' { zend_do_goto(&$2 TSRMLS_CC); }
267 22 : ;
268 :
269 :
270 : additional_catches:
271 7 : non_empty_additional_catches { $$ = $1; }
272 7 : | /* empty */ { $$.u.opline_num = -1; }
273 1740 : ;
274 :
275 : non_empty_additional_catches:
276 7 : additional_catch { $$ = $1; }
277 7 : | non_empty_additional_catches additional_catch { $$ = $2; }
278 0 : ;
279 :
280 :
281 : additional_catch:
282 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); }
283 21 : ;
284 :
285 :
286 : unset_variables:
287 : unset_variable
288 : | unset_variables ',' unset_variable
289 : ;
290 :
291 : unset_variable:
292 1460 : variable { zend_do_end_variable_parse(&$1, BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1 TSRMLS_CC); }
293 1459 : ;
294 :
295 : function_declaration_statement:
296 8125 : unticked_function_declaration_statement { zend_do_ticks(TSRMLS_C); }
297 8125 : ;
298 :
299 : class_declaration_statement:
300 5978 : unticked_class_declaration_statement { zend_do_ticks(TSRMLS_C); }
301 5978 : ;
302 :
303 :
304 : is_reference:
305 23456 : /* empty */ { $$.op_type = ZEND_RETURN_VAL; }
306 23456 : | '&' { $$.op_type = ZEND_RETURN_REF; }
307 45 : ;
308 :
309 :
310 : unticked_function_declaration_statement:
311 8127 : function is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$3, 0, $2.op_type, NULL TSRMLS_CC); }
312 8127 : '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
313 8125 : ;
314 :
315 : unticked_class_declaration_statement:
316 : class_entry_type T_STRING extends_from
317 5905 : { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); }
318 5899 : implements_list
319 : '{'
320 : class_statement_list
321 5835 : '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); }
322 5829 : | interface_entry T_STRING
323 154 : { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); }
324 154 : interface_extends_list
325 : '{'
326 : class_statement_list
327 149 : '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); }
328 149 : ;
329 :
330 :
331 : class_entry_type:
332 5837 : T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = 0; }
333 5837 : | T_ABSTRACT T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; }
334 61 : | T_FINAL T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_FINAL_CLASS; }
335 9 : ;
336 :
337 : extends_from:
338 3945 : /* empty */ { $$.op_type = IS_UNUSED; }
339 3945 : | T_EXTENDS fully_qualified_class_name { zend_do_fetch_class(&$$, &$2 TSRMLS_CC); }
340 1960 : ;
341 :
342 : interface_entry:
343 155 : T_INTERFACE { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_INTERFACE; }
344 155 : ;
345 :
346 : interface_extends_list:
347 : /* empty */
348 : | T_EXTENDS interface_list
349 : ;
350 :
351 : implements_list:
352 : /* empty */
353 : | T_IMPLEMENTS interface_list
354 : ;
355 :
356 : interface_list:
357 274 : fully_qualified_class_name { zend_do_implements_interface(&$1 TSRMLS_CC); }
358 272 : | interface_list ',' fully_qualified_class_name { zend_do_implements_interface(&$3 TSRMLS_CC); }
359 35 : ;
360 :
361 : foreach_optional_arg:
362 5409 : /* empty */ { $$.op_type = IS_UNUSED; }
363 5409 : | T_DOUBLE_ARROW foreach_variable { $$ = $2; }
364 3504 : ;
365 :
366 :
367 : foreach_variable:
368 12136 : variable { zend_check_writable_variable(&$1); $$ = $1; }
369 12136 : | '&' variable { zend_check_writable_variable(&$2); $$ = $2; $$.u.EA.type |= ZEND_PARSED_REFERENCE_VARIABLE; }
370 67 : ;
371 :
372 : for_statement:
373 : statement
374 : | ':' inner_statement_list T_ENDFOR ';'
375 : ;
376 :
377 :
378 : foreach_statement:
379 : statement
380 : | ':' inner_statement_list T_ENDFOREACH ';'
381 : ;
382 :
383 :
384 : declare_statement:
385 : statement
386 : | ':' inner_statement_list T_ENDDECLARE ';'
387 : ;
388 :
389 :
390 : declare_list:
391 69 : T_STRING '=' static_scalar { zend_do_declare_stmt(&$1, &$3 TSRMLS_CC); }
392 68 : | declare_list ',' T_STRING '=' static_scalar { zend_do_declare_stmt(&$3, &$5 TSRMLS_CC); }
393 0 : ;
394 :
395 :
396 : switch_case_list:
397 435 : '{' case_list '}' { $$ = $2; }
398 435 : | '{' ';' case_list '}' { $$ = $3; }
399 0 : | ':' case_list T_ENDSWITCH ';' { $$ = $2; }
400 1 : | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
401 0 : ;
402 :
403 :
404 : case_list:
405 436 : /* empty */ { $$.op_type = IS_UNUSED; }
406 1903 : | 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; }
407 3196 : | 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; }
408 524 : ;
409 :
410 :
411 : case_separator:
412 : ':'
413 : | ';'
414 : ;
415 :
416 :
417 : while_statement:
418 : statement
419 : | ':' inner_statement_list T_ENDWHILE ';'
420 : ;
421 :
422 :
423 :
424 : elseif_list:
425 : /* empty */
426 3084 : | elseif_list T_ELSEIF '(' expr ')' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } statement { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); }
427 3084 : ;
428 :
429 :
430 : new_elseif_list:
431 : /* empty */
432 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); }
433 0 : ;
434 :
435 :
436 : else_single:
437 : /* empty */
438 : | T_ELSE statement
439 : ;
440 :
441 :
442 : new_else_single:
443 : /* empty */
444 : | T_ELSE ':' inner_statement_list
445 : ;
446 :
447 :
448 : parameter_list:
449 : non_empty_parameter_list
450 : | /* empty */
451 : ;
452 :
453 :
454 : non_empty_parameter_list:
455 14675 : 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); }
456 14673 : | 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); }
457 235 : | 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); }
458 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); }
459 1590 : | 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); }
460 84238 : | 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); }
461 92 : | 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); }
462 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); }
463 9284 : ;
464 :
465 :
466 : optional_class_type:
467 109868 : /* empty */ { $$.op_type = IS_UNUSED; }
468 109868 : | fully_qualified_class_name { $$ = $1; }
469 131 : | T_ARRAY { $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_NULL;}
470 179 : ;
471 :
472 :
473 : function_call_parameter_list:
474 228661 : non_empty_function_call_parameter_list { $$ = $1; }
475 228661 : | /* empty */ { Z_LVAL($$.u.constant) = 0; }
476 28483 : ;
477 :
478 :
479 : non_empty_function_call_parameter_list:
480 112597 : expr_without_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); }
481 112592 : | variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); }
482 116050 : | '&' w_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$2, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); }
483 20 : | 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); }
484 131153 : | 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); }
485 83833 : | 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); }
486 11 : ;
487 :
488 : global_var_list:
489 734 : global_var_list ',' global_var { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
490 734 : | global_var { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
491 3718 : ;
492 :
493 :
494 : global_var:
495 4450 : T_VARIABLE { $$ = $1; }
496 4450 : | '$' r_variable { zend_do_normalization(&$$, &$2 TSRMLS_CC); }
497 1 : | '$' '{' expr '}' { zend_do_normalization(&$$, &$3 TSRMLS_CC); }
498 1 : ;
499 :
500 :
501 : static_var_list:
502 2 : static_var_list ',' T_VARIABLE { zend_do_fetch_static_variable(&$3, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
503 2 : | static_var_list ',' T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$3, &$5, ZEND_FETCH_STATIC TSRMLS_CC); }
504 6 : | T_VARIABLE { zend_do_fetch_static_variable(&$1, NULL, ZEND_FETCH_STATIC TSRMLS_CC); }
505 19 : | T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$1, &$3, ZEND_FETCH_STATIC TSRMLS_CC); }
506 890 :
507 : ;
508 :
509 :
510 : class_statement_list:
511 : class_statement_list class_statement
512 : | /* empty */
513 : ;
514 :
515 :
516 : class_statement:
517 1837 : variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration ';'
518 1837 : | class_constant_declaration ';'
519 15276 : | method_modifiers function is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$4, 1, $3.op_type, &$1 TSRMLS_CC); } '('
520 15259 : parameter_list ')' method_body { zend_do_abstract_method(&$4, &$1, &$9 TSRMLS_CC); zend_do_end_function_declaration(&$2 TSRMLS_CC); }
521 15232 : ;
522 :
523 :
524 : method_body:
525 102 : ';' /* abstract method */ { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
526 102 : | '{' inner_statement_list '}' { Z_LVAL($$.u.constant) = 0; }
527 15149 : ;
528 :
529 : variable_modifiers:
530 1718 : non_empty_member_modifiers { $$ = $1; }
531 1718 : | T_VAR { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
532 119 : ;
533 :
534 : method_modifiers:
535 6658 : /* empty */ { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
536 6658 : | non_empty_member_modifiers { $$ = $1; if (!(Z_LVAL($$.u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL($$.u.constant) |= ZEND_ACC_PUBLIC; } }
537 8618 : ;
538 :
539 : non_empty_member_modifiers:
540 10347 : member_modifier { $$ = $1; }
541 10347 : | non_empty_member_modifiers member_modifier { Z_LVAL($$.u.constant) = zend_do_verify_access_types(&$1, &$2); }
542 493 : ;
543 :
544 : member_modifier:
545 3291 : T_PUBLIC { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; }
546 3291 : | T_PROTECTED { Z_LVAL($$.u.constant) = ZEND_ACC_PROTECTED; }
547 535 : | T_PRIVATE { Z_LVAL($$.u.constant) = ZEND_ACC_PRIVATE; }
548 628 : | T_STATIC { Z_LVAL($$.u.constant) = ZEND_ACC_STATIC; }
549 6327 : | T_ABSTRACT { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; }
550 46 : | T_FINAL { Z_LVAL($$.u.constant) = ZEND_ACC_FINAL; }
551 24 : ;
552 :
553 : class_variable_declaration:
554 41 : class_variable_declaration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL, CG(access_type) TSRMLS_CC); }
555 41 : | class_variable_declaration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5, CG(access_type) TSRMLS_CC); }
556 3 : | T_VARIABLE { zend_do_declare_property(&$1, NULL, CG(access_type) TSRMLS_CC); }
557 799 : | T_VARIABLE '=' static_scalar { zend_do_declare_property(&$1, &$3, CG(access_type) TSRMLS_CC); }
558 1034 : ;
559 :
560 : class_constant_declaration:
561 3 : class_constant_declaration ',' T_STRING '=' static_scalar { zend_do_declare_class_constant(&$3, &$5 TSRMLS_CC); }
562 3 : | T_CONST T_STRING '=' static_scalar { zend_do_declare_class_constant(&$2, &$4 TSRMLS_CC); }
563 186 : ;
564 :
565 : echo_expr_list:
566 941 : echo_expr_list ',' expr { zend_do_echo(&$3, 0 TSRMLS_CC); }
567 941 : | expr { zend_do_echo(&$1, 0 TSRMLS_CC); }
568 25036 : ;
569 :
570 :
571 : for_expr:
572 8 : /* empty */ { $$.op_type = IS_CONST; Z_TYPE($$.u.constant) = IS_BOOL; Z_LVAL($$.u.constant) = 1; }
573 8 : | non_empty_for_expr { $$ = $1; }
574 5503 : ;
575 :
576 : non_empty_for_expr:
577 10 : non_empty_for_expr ',' { zend_do_free(&$1 TSRMLS_CC); } expr { $$ = $4; }
578 10 : | expr { $$ = $1; }
579 5503 : ;
580 :
581 : expr_without_variable:
582 196 : T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
583 196 : | variable '=' expr { zend_check_writable_variable(&$1); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
584 113888 : | 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); }
585 369 : | 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); }
586 9965 : | 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); $$.u.EA.type = ZEND_PARSED_NEW; }
587 19890 : | T_CLONE expr { zend_do_clone(&$$, &$2 TSRMLS_CC); }
588 76 : | 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); }
589 622 : | 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); }
590 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); }
591 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); }
592 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); }
593 1933 : | 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); }
594 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); }
595 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); }
596 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); }
597 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); }
598 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); }
599 3 : | rw_variable T_INC { zend_do_post_incdec(&$$, &$1, ZEND_POST_INC TSRMLS_CC); }
600 5157 : | T_INC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_INC TSRMLS_CC); }
601 398 : | rw_variable T_DEC { zend_do_post_incdec(&$$, &$1, ZEND_POST_DEC TSRMLS_CC); }
602 50 : | T_DEC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_DEC TSRMLS_CC); }
603 1970 : | expr T_BOOLEAN_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
604 7578 : | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
605 7958 : | expr T_LOGICAL_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
606 1284 : | expr T_LOGICAL_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); }
607 16 : | expr T_LOGICAL_XOR expr { zend_do_binary_op(ZEND_BOOL_XOR, &$$, &$1, &$3 TSRMLS_CC); }
608 0 : | expr '|' expr { zend_do_binary_op(ZEND_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
609 485 : | expr '&' expr { zend_do_binary_op(ZEND_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
610 1064 : | expr '^' expr { zend_do_binary_op(ZEND_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
611 18 : | expr '.' expr { zend_do_binary_op(ZEND_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
612 29348 : | expr '+' expr { zend_do_binary_op(ZEND_ADD, &$$, &$1, &$3 TSRMLS_CC); }
613 3130 : | expr '-' expr { zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); }
614 596 : | expr '*' expr { zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); }
615 2350 : | expr '/' expr { zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); }
616 492 : | expr '%' expr { zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); }
617 113 : | expr T_SL expr { zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); }
618 102 : | expr T_SR expr { zend_do_binary_op(ZEND_SR, &$$, &$1, &$3 TSRMLS_CC); }
619 33 : | '+' 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); } }
620 255 : | '-' 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); } }
621 5991 : | '!' expr { zend_do_unary_op(ZEND_BOOL_NOT, &$$, &$2 TSRMLS_CC); }
622 22690 : | '~' expr { zend_do_unary_op(ZEND_BW_NOT, &$$, &$2 TSRMLS_CC); }
623 88 : | expr T_IS_IDENTICAL expr { zend_do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
624 4771 : | expr T_IS_NOT_IDENTICAL expr { zend_do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); }
625 6475 : | expr T_IS_EQUAL expr { zend_do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
626 11687 : | expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
627 2410 : | expr '<' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 TSRMLS_CC); }
628 1395 : | expr T_IS_SMALLER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
629 1607 : | expr '>' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); }
630 762 : | expr T_IS_GREATER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 TSRMLS_CC); }
631 257 : | expr T_INSTANCEOF class_name_reference { zend_do_instanceof(&$$, &$1, &$3, 0 TSRMLS_CC); }
632 59 : | '(' expr ')' { $$ = $2; }
633 18270 : | expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
634 17058 : expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); }
635 17058 : expr { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); }
636 17058 : | expr '?' ':' { zend_do_jmp_set(&$1, &$2, &$3 TSRMLS_CC); }
637 8 : expr { zend_do_jmp_set_else(&$$, &$5, &$2, &$3 TSRMLS_CC); }
638 8 : | internal_functions_in_yacc { $$ = $1; }
639 17254 : | T_INT_CAST expr { zend_do_cast(&$$, &$2, IS_LONG TSRMLS_CC); }
640 4447 : | T_DOUBLE_CAST expr { zend_do_cast(&$$, &$2, IS_DOUBLE TSRMLS_CC); }
641 17 : | T_STRING_CAST expr { zend_do_cast(&$$, &$2, IS_UNICODE TSRMLS_CC); }
642 378 : | T_UNICODE_CAST expr { zend_do_cast(&$$, &$2, IS_UNICODE TSRMLS_CC); }
643 13 : | T_BINARY_CAST expr { zend_do_cast(&$$, &$2, IS_STRING TSRMLS_CC); }
644 1326 : | T_ARRAY_CAST expr { zend_do_cast(&$$, &$2, IS_ARRAY TSRMLS_CC); }
645 10 : | T_OBJECT_CAST expr { zend_do_cast(&$$, &$2, IS_OBJECT TSRMLS_CC); }
646 144 : | T_BOOL_CAST expr { zend_do_cast(&$$, &$2, IS_BOOL TSRMLS_CC); }
647 239 : | T_UNSET_CAST expr { zend_do_cast(&$$, &$2, IS_NULL TSRMLS_CC); }
648 0 : | T_EXIT exit_expr { zend_do_exit(&$$, &$2 TSRMLS_CC); }
649 16929 : | '@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; }
650 10514 : | scalar { $$ = $1; }
651 498717 : | T_ARRAY '(' array_pair_list ')' { $$ = $3; }
652 19563 : | '`' { CG(literal_type) = IS_UNICODE; } backticks_expr '`' { zend_do_shell_exec(&$$, &$3 TSRMLS_CC); }
653 210 : | T_PRINT expr { zend_do_print(&$$, &$2 TSRMLS_CC); }
654 2660 : | function is_reference '(' { zend_do_begin_lambda_function_declaration(&$$, &$1, $2.op_type, 0 TSRMLS_CC); }
655 97 : parameter_list ')' lexical_vars '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); $$ = $4; }
656 97 : | T_STATIC function is_reference '(' { zend_do_begin_lambda_function_declaration(&$$, &$2, $3.op_type, 1 TSRMLS_CC); }
657 1 : parameter_list ')' lexical_vars '{' inner_statement_list '}' { zend_do_end_function_declaration(&$2 TSRMLS_CC); $$ = $5; }
658 1 : ;
659 :
660 : function:
661 23501 : T_FUNCTION { $$.u.opline_num = CG(zend_lineno); }
662 23501 : ;
663 :
664 : lexical_vars:
665 : /* empty */
666 : | T_USE '(' lexical_var_list ')'
667 : ;
668 :
669 : lexical_var_list:
670 1 : lexical_var_list ',' T_VARIABLE { zend_do_fetch_lexical_variable(&$3, 0 TSRMLS_CC); }
671 1 : | lexical_var_list ',' '&' T_VARIABLE { zend_do_fetch_lexical_variable(&$4, 1 TSRMLS_CC); }
672 0 : | T_VARIABLE { zend_do_fetch_lexical_variable(&$1, 0 TSRMLS_CC); }
673 15 : | '&' T_VARIABLE { zend_do_fetch_lexical_variable(&$2, 1 TSRMLS_CC); }
674 11 : ;
675 :
676 : function_call:
677 217872 : namespace_name '(' { $2.u.opline_num = zend_do_begin_function_call(&$1, 1 TSRMLS_CC); }
678 217872 : function_call_parameter_list
679 217859 : ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
680 217859 : | T_NAMESPACE T_NS_SEPARATOR namespace_name '(' { $1.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$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); }
681 8 : function_call_parameter_list
682 8 : ')' { zend_do_end_function_call(&$1, &$$, &$6, 0, $4.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
683 8 : | T_NS_SEPARATOR namespace_name '(' { $3.u.opline_num = zend_do_begin_function_call(&$2, 0 TSRMLS_CC); }
684 14 : function_call_parameter_list
685 14 : ')' { zend_do_end_function_call(&$2, &$$, &$5, 0, $3.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
686 14 : | class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { $4.u.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
687 6443 : function_call_parameter_list
688 6443 : ')' { 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);}
689 6443 : | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
690 14 : function_call_parameter_list
691 14 : ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
692 14 : | 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); }
693 26 : function_call_parameter_list
694 26 : ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
695 26 : | 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); }
696 8 : function_call_parameter_list
697 8 : ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
698 8 : | 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); }
699 1823 : function_call_parameter_list ')'
700 1823 : { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
701 1823 : ;
702 :
703 : class_name:
704 39 : T_STATIC { $$.op_type = IS_CONST; ZVAL_ASCII_STRINGL(&$$.u.constant, "static", sizeof("static")-1, 1);}
705 39 : | namespace_name { $$ = $1; }
706 23528 : | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); }
707 14 : | T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_full_name(NULL, &$$, &$2, 0 TSRMLS_CC); }
708 69 : ;
709 :
710 : fully_qualified_class_name:
711 4134 : namespace_name { $$ = $1; }
712 4134 : | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); }
713 2 : | T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_full_name(NULL, &$$, &$2, 0 TSRMLS_CC); }
714 18 : ;
715 :
716 :
717 : class_name_reference:
718 8955 : class_name { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
719 8955 : | dynamic_class_name_reference { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }
720 1060 : ;
721 :
722 :
723 : dynamic_class_name_reference:
724 1 : base_variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
725 1 : object_property { zend_do_push_object(&$4 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } dynamic_class_name_variable_properties
726 1 : { zend_do_pop_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_MEMBER; }
727 1 : | base_variable { $$ = $1; }
728 1059 : ;
729 :
730 :
731 : dynamic_class_name_variable_properties:
732 : dynamic_class_name_variable_properties dynamic_class_name_variable_property
733 : | /* empty */
734 : ;
735 :
736 :
737 : dynamic_class_name_variable_property:
738 0 : T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); }
739 0 : ;
740 :
741 : exit_expr:
742 353 : /* empty */ { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
743 353 : | '(' ')' { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
744 115 : | '(' expr ')' { $$ = $2; }
745 11204 : ;
746 :
747 : backticks_expr:
748 0 : /* empty */ { ZVAL_EMPTY_UNICODE(&$$.u.constant); INIT_PZVAL(&$$.u.constant); $$.op_type = IS_CONST; }
749 0 : | T_ENCAPSED_AND_WHITESPACE { $$ = $1; }
750 2 : | encaps_list { $$ = $1; }
751 103 : ;
752 :
753 :
754 : ctor_arguments:
755 2083 : /* empty */ { Z_LVAL($$.u.constant)=0; }
756 2083 : | '(' function_call_parameter_list ')' { $$ = $2; }
757 7872 : ;
758 :
759 :
760 : common_scalar:
761 80234 : T_LNUMBER { $$ = $1; }
762 80234 : | T_DNUMBER { $$ = $1; }
763 7343 : | T_CONSTANT_ENCAPSED_STRING { $$ = $1; }
764 335993 : | T_LINE { $$ = $1; }
765 15 : | T_FILE { $$ = $1; }
766 7424 : | T_DIR { $$ = $1; }
767 97 : | T_CLASS_C { $$ = $1; }
768 75 : | T_METHOD_C { $$ = $1; }
769 745 : | T_FUNC_C { $$ = $1; }
770 97 : | T_NS_C { $$ = $1; }
771 33 : | 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); }
772 1210 : | start_heredoc T_END_HEREDOC { if (CG(literal_type) == IS_UNICODE) { ZVAL_EMPTY_UNICODE(&$$.u.constant); } else { 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); }
773 59 : ;
774 :
775 : start_heredoc:
776 1272 : T_START_HEREDOC { CG(literal_type) = IS_UNICODE; $$ = $1; }
777 1272 : | T_BINARY_HEREDOC { CG(literal_type) = IS_STRING; $$ = $1; }
778 103 : ;
779 :
780 :
781 : static_scalar: /* compile-time evaluated scalars */
782 10490 : common_scalar { $$ = $1; }
783 10490 : | namespace_name { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT, 1 TSRMLS_CC); }
784 4346 : | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); $3 = $$; zend_do_fetch_constant(&$$, NULL, &$3, ZEND_CT, 0 TSRMLS_CC); }
785 14 : | T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_full_name(NULL, &$$, &$2, 0 TSRMLS_CC); $2 = $$;zend_do_fetch_constant(&$$, NULL, &$2, ZEND_CT, 0 TSRMLS_CC); }
786 13 : | '+' static_scalar { ZVAL_LONG(&$1.u.constant, 0); add_function(&$2.u.constant, &$1.u.constant, &$2.u.constant TSRMLS_CC); $$ = $2; }
787 2 : | '-' static_scalar { ZVAL_LONG(&$1.u.constant, 0); sub_function(&$2.u.constant, &$1.u.constant, &$2.u.constant TSRMLS_CC); $$ = $2; }
788 5 : | T_ARRAY '(' static_array_pair_list ')' { $$ = $3; Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; }
789 1015 : | static_class_constant { $$ = $1; }
790 118 : ;
791 :
792 : static_class_constant:
793 118 : class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_CT, 0 TSRMLS_CC); }
794 118 : ;
795 :
796 : scalar:
797 75 : T_STRING_VARNAME { $$ = $1; }
798 75 : | class_constant { $$ = $1; }
799 7802 : | namespace_name { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT, 1 TSRMLS_CC); }
800 57379 : | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); $3 = $$; zend_do_fetch_constant(&$$, NULL, &$3, ZEND_RT, 0 TSRMLS_CC); }
801 9 : | T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_UNICODE(&$$.u.constant); zend_do_build_full_name(NULL, &$$, &$2, 0 TSRMLS_CC); $2 = $$; zend_do_fetch_constant(&$$, NULL, &$2, ZEND_RT, 0 TSRMLS_CC); }
802 14 : | common_scalar { $$ = $1; }
803 433264 : | '"' { CG(literal_type) = IS_UNICODE; } encaps_list '"' { $$ = $3; }
804 20928 : | T_BINARY_DOUBLE { CG(literal_type) = IS_STRING; } encaps_list '"' { $$ = $3; }
805 138 : | start_heredoc encaps_list T_END_HEREDOC { $$ = $2; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); }
806 105 : ;
807 :
808 :
809 : static_array_pair_list:
810 55 : /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
811 55 : | non_empty_static_array_pair_list possible_comma { $$ = $1; }
812 960 : ;
813 :
814 : possible_comma:
815 : /* empty */
816 : | ','
817 : ;
818 :
819 : non_empty_static_array_pair_list:
820 34 : non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { zend_do_add_static_array_element(&$$, &$3, &$5); }
821 34 : | non_empty_static_array_pair_list ',' static_scalar { zend_do_add_static_array_element(&$$, NULL, &$3); }
822 1703 : | 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); }
823 96 : | static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); }
824 864 : ;
825 :
826 : expr:
827 271123 : r_variable { $$ = $1; }
828 271123 : | expr_without_variable { $$ = $1; }
829 577974 : ;
830 :
831 :
832 : r_variable:
833 271125 : variable { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
834 271124 : ;
835 :
836 :
837 : w_variable:
838 163 : variable { zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); $$ = $1; zend_check_writable_variable(&$1); }
839 163 : ;
840 :
841 : rw_variable:
842 5616 : variable { zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); $$ = $1; zend_check_writable_variable(&$1); }
843 5616 : ;
844 :
845 : variable:
846 30196 : base_variable_with_function_calls T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); }
847 30196 : object_property { zend_do_push_object(&$4 TSRMLS_CC); } method_or_not variable_properties
848 30196 : { 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); }
849 30195 : | base_variable_with_function_calls { $$ = $1; }
850 611850 : ;
851 :
852 : variable_properties:
853 1123 : variable_properties variable_property { $$.u.EA.type = $2.u.EA.type; }
854 1123 : | /* empty */ { $$.u.EA.type = 0; }
855 30195 : ;
856 :
857 :
858 : variable_property:
859 2246 : T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); } method_or_not { $$.u.EA.type = $4.u.EA.type; }
860 2246 : ;
861 :
862 : method_or_not:
863 23078 : '(' { zend_do_pop_object(&$1 TSRMLS_CC); zend_do_begin_method_call(&$1 TSRMLS_CC); }
864 23077 : function_call_parameter_list ')'
865 23077 : { zend_do_end_function_call(&$1, &$$, &$3, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);
866 23077 : zend_do_push_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_METHOD_CALL; }
867 23077 : | /* empty */ { zend_do_declare_implicit_property(TSRMLS_C); $$.u.EA.type = ZEND_PARSED_MEMBER; }
868 8241 : ;
869 :
870 : variable_without_objects:
871 2249 : reference_variable { $$ = $1; }
872 2249 : | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); }
873 7 : ;
874 :
875 : static_member:
876 328 : class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
877 328 : | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); }
878 4 : ;
879 :
880 : variable_class_name:
881 49 : reference_variable { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); $$=$1;}
882 49 : ;
883 :
884 :
885 : base_variable_with_function_calls:
886 415851 : base_variable { $$ = $1; }
887 415851 : | function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.u.EA.type = ZEND_PARSED_FUNCTION_CALL; }
888 226195 : ;
889 :
890 :
891 : base_variable:
892 416447 : reference_variable { $$ = $1; $$.u.EA.type = ZEND_PARSED_VARIABLE; }
893 416447 : | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_VARIABLE; }
894 132 : | static_member { $$ = $1; $$.u.EA.type = ZEND_PARSED_STATIC_MEMBER; }
895 332 : ;
896 :
897 : reference_variable:
898 37484 : reference_variable '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
899 37484 : | reference_variable '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
900 36 : | compound_variable { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
901 418884 : ;
902 :
903 :
904 : compound_variable:
905 418855 : T_VARIABLE { $$ = $1; }
906 418855 : | '$' '{' expr '}' { zend_do_normalization(&$$, &$3 TSRMLS_CC); }
907 29 : ;
908 :
909 : dim_offset:
910 355 : /* empty */ { $$.op_type = IS_UNUSED; }
911 355 : | expr { $$ = $1; }
912 37608 : ;
913 :
914 :
915 : object_property:
916 31253 : object_dim_list { $$ = $1; }
917 31253 : | variable_without_objects { znode tmp_znode; zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
918 67 : ;
919 :
920 : object_dim_list:
921 479 : object_dim_list '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); }
922 479 : | object_dim_list '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); }
923 0 : | variable_name { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
924 31253 : ;
925 :
926 : variable_name:
927 31215 : T_STRING { $$ = $1; }
928 31215 : | '{' expr '}' { zend_do_normalization(&$$, &$2 TSRMLS_CC); }
929 38 : ;
930 :
931 : simple_indirect_reference:
932 139 : '$' { Z_LVAL($$.u.constant) = 1; }
933 139 : | simple_indirect_reference '$' { Z_LVAL($$.u.constant)++; }
934 10 : ;
935 :
936 : assignment_list:
937 : assignment_list ',' assignment_list_element
938 : | assignment_list_element
939 : ;
940 :
941 :
942 : assignment_list_element:
943 229 : variable { zend_do_add_list_element(&$1 TSRMLS_CC); }
944 241 : | T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')' { zend_do_new_list_end(TSRMLS_C); }
945 24 : | /* empty */ { zend_do_add_list_element(NULL TSRMLS_CC); }
946 17 : ;
947 :
948 :
949 : array_pair_list:
950 2116 : /* empty */ { zend_do_init_array(&$$, NULL, NULL, 0 TSRMLS_CC); }
951 2116 : | non_empty_array_pair_list possible_comma { $$ = $1; }
952 17342 : ;
953 :
954 : non_empty_array_pair_list:
955 17513 : non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { zend_do_add_array_element(&$$, &$5, &$3, 0 TSRMLS_CC); }
956 17513 : | non_empty_array_pair_list ',' expr { zend_do_add_array_element(&$$, &$3, NULL, 0 TSRMLS_CC); }
957 43465 : | expr T_DOUBLE_ARROW expr { zend_do_init_array(&$$, &$3, &$1, 0 TSRMLS_CC); }
958 6271 : | expr { zend_do_init_array(&$$, &$1, NULL, 0 TSRMLS_CC); }
959 11023 : | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { zend_do_add_array_element(&$$, &$6, &$3, 1 TSRMLS_CC); }
960 46 : | non_empty_array_pair_list ',' '&' w_variable { zend_do_add_array_element(&$$, &$4, NULL, 1 TSRMLS_CC); }
961 38 : | expr T_DOUBLE_ARROW '&' w_variable { zend_do_init_array(&$$, &$4, &$1, 1 TSRMLS_CC); }
962 14 : | '&' w_variable { zend_do_init_array(&$$, &$2, NULL, 1 TSRMLS_CC); }
963 34 : ;
964 :
965 : encaps_list:
966 5244 : encaps_list encaps_var { zend_do_end_variable_parse(&$2, BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&$$, &$1, &$2 TSRMLS_CC); }
967 5244 : | encaps_list T_ENCAPSED_AND_WHITESPACE { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); }
968 12022 : | encaps_var { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&$$, NULL, &$1 TSRMLS_CC); }
969 3561 : | 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); }
970 7146 : ;
971 :
972 :
973 :
974 : encaps_var:
975 14688 : T_VARIABLE { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
976 15546 : | T_VARIABLE '[' { zend_do_begin_variable_parse(TSRMLS_C); } encaps_var_offset ']' { fetch_array_begin(&$$, &$1, &$4 TSRMLS_CC); }
977 1718 : | 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); }
978 59 : | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$2, 1 TSRMLS_CC); }
979 75 : | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { zend_do_begin_variable_parse(TSRMLS_C); fetch_array_begin(&$$, &$2, &$4 TSRMLS_CC); }
980 10 : | T_CURLY_OPEN variable '}' { $$ = $2; }
981 261 : ;
982 :
983 :
984 : encaps_var_offset:
985 0 : T_STRING { $$ = $1; }
986 0 : | T_NUM_STRING { $$ = $1; }
987 286 : | T_VARIABLE { fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); }
988 572 : ;
989 :
990 :
991 : internal_functions_in_yacc:
992 1866 : T_ISSET '(' isset_variables ')' { $$ = $3; }
993 1866 : | T_EMPTY '(' variable ')' { zend_do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 TSRMLS_CC); }
994 5375 : | T_INCLUDE expr { zend_do_include_or_eval(ZEND_INCLUDE, &$$, &$2 TSRMLS_CC); }
995 1673 : | T_INCLUDE_ONCE expr { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 TSRMLS_CC); }
996 401 : | T_EVAL '(' expr ')' { zend_do_include_or_eval(ZEND_EVAL, &$$, &$3 TSRMLS_CC); }
997 1701 : | T_REQUIRE expr { zend_do_include_or_eval(ZEND_REQUIRE, &$$, &$2 TSRMLS_CC); }
998 1229 : | T_REQUIRE_ONCE expr { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 TSRMLS_CC); }
999 5009 : ;
1000 :
1001 : isset_variables:
1002 1867 : variable { zend_do_isset_or_isempty(ZEND_ISSET, &$$, &$1 TSRMLS_CC); }
1003 1909 : | 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); }
1004 86 : ;
1005 :
1006 : class_constant:
1007 7797 : class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
1008 7797 : | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT, 0 TSRMLS_CC); }
1009 : ;
1010 :
1011 : %%
1012 :
1013 : /*
1014 : * Local variables:
1015 : * tab-width: 4
1016 : * c-basic-offset: 4
1017 : * indent-tabs-mode: t
1018 : * End:
1019 : */
|