@@ -179,9 +179,8 @@ statement:
179
179
| T_BREAK expr ' ;' { do_brk_cont(ZEND_BRK, &$2 CLS_CC); }
180
180
| T_CONTINUE ' ;' { do_brk_cont(ZEND_CONT, NULL CLS_CC); }
181
181
| T_CONTINUE expr ' ;' { do_brk_cont(ZEND_CONT, &$2 CLS_CC); }
182
- | T_RETURN ' ;' { do_return(NULL , 0 CLS_CC); }
183
- | T_RETURN expr ' ;' { do_return(&$2 , 0 CLS_CC); }
184
- | T_RETURN ' &' w_cvar ' ;' { do_return(&$3 , 1 CLS_CC); }
182
+ | T_RETURN ' ;' { do_return(NULL CLS_CC); }
183
+ | T_RETURN expr ' ;' { do_return(&$2 CLS_CC); }
185
184
| T_GLOBAL global_var_list
186
185
| T_STATIC static_var_list
187
186
| T_ECHO echo_expr_list ' ;'
@@ -202,9 +201,9 @@ use_filename:
202
201
203
202
204
203
declaration_statement :
205
- T_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } T_STRING { do_begin_function_declaration(&$1 , &$3 , 0 CLS_CC); }
204
+ T_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } is_reference T_STRING { do_begin_function_declaration(&$1 , &$4 , 0 , $3 .op_type CLS_CC); }
206
205
' (' parameter_list ' )' ' {' inner_statement_list ' }' { do_end_function_declaration(&$1 CLS_CC); }
207
- | T_OLD_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } T_STRING { do_begin_function_declaration(&$1 , &$3 , 0 CLS_CC); }
206
+ | T_OLD_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } is_reference T_STRING { do_begin_function_declaration(&$1 , &$4 , 0 , $3 .op_type CLS_CC); }
208
207
parameter_list ' (' inner_statement_list ' )' ' ;' { do_end_function_declaration(&$1 CLS_CC); }
209
208
| T_CLASS T_STRING { do_begin_class_declaration(&$2 , NULL CLS_CC); } ' {' class_statement_list ' }' { do_end_class_declaration(CLS_C); }
210
209
| T_CLASS T_STRING T_EXTENDS T_STRING { do_begin_class_declaration(&$2 , &$4 CLS_CC); } ' {' class_statement_list ' }' { do_end_class_declaration(CLS_C); }
@@ -348,13 +347,16 @@ class_statement_list:
348
347
349
348
class_statement :
350
349
T_VAR class_variable_decleration ' ;'
351
- | T_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } T_STRING { do_begin_function_declaration(&$1 , &$3 , 1 CLS_CC); } ' ('
350
+ | T_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } is_reference T_STRING { do_begin_function_declaration(&$1 , &$4 , 1 , $3 .op_type CLS_CC); } ' ('
352
351
parameter_list ' )' ' {' inner_statement_list ' }' { do_end_function_declaration(&$1 CLS_CC); }
353
- | T_OLD_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } T_STRING { do_begin_function_declaration(&$1 , &$3 , 1 CLS_CC); }
352
+ | T_OLD_FUNCTION { $1 .u.opline_num = CG(zend_lineno); } is_reference T_STRING { do_begin_function_declaration(&$1 , &$4 , 1 , $3 .op_type CLS_CC); }
354
353
parameter_list ' (' inner_statement_list ' )' ' ;' { do_end_function_declaration(&$1 CLS_CC); }
355
354
356
355
;
357
356
357
+ is_reference :
358
+ /* empty */ { $$ .op_type = ZEND_RETURN_VAL; }
359
+ | ' &' { $$ .op_type = ZEND_RETURN_REF; }
358
360
359
361
class_variable_decleration :
360
362
class_variable_decleration ' ,' T_VARIABLE { do_declare_property(&$3 , NULL CLS_CC); }
0 commit comments