]> granicus.if.org Git - php/commitdiff
Catch all cases
authorZeev Suraski <zeev@php.net>
Thu, 19 Jul 2001 15:53:38 +0000 (15:53 +0000)
committerZeev Suraski <zeev@php.net>
Thu, 19 Jul 2001 15:53:38 +0000 (15:53 +0000)
Zend/zend_compile.c

index 1ed37be15ba59127d8d69d37453608996a75f5a7..0933444be0626228ac7b429fd1b92c122d4a20a1 100644 (file)
@@ -1041,14 +1041,16 @@ void zend_do_return(znode *expr, int do_end_vparse CLS_DC)
 {
        zend_op *opline;
        
-       if (CG(active_op_array)->return_reference) {
-               if (!do_end_vparse) {
-                       zend_error(E_COMPILE_ERROR, "Only variables may be returned by reference");
+       if (do_end_vparse) {
+               if (CG(active_op_array)->return_reference) {
+                       zend_do_end_variable_parse(BP_VAR_W, 0 CLS_CC);
+               } else {
+                       zend_do_end_variable_parse(BP_VAR_R, 0 CLS_CC);
                }
-               zend_do_end_variable_parse(BP_VAR_W, 0 CLS_CC);
-       } else {
-               zend_do_end_variable_parse(BP_VAR_R, 0 CLS_CC);
+       } else if (expr && CG(active_op_array)->return_reference) {
+               zend_error(E_COMPILE_ERROR, "Only variables may be returned by reference");
        }
+
 #ifdef ZTS
        zend_stack_apply_with_argument(&CG(switch_cond_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element, void *)) generate_free_switch_expr CLS_CC);
        zend_stack_apply_with_argument(&CG(foreach_copy_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element, void *)) generate_free_foreach_copy CLS_CC);