@@ -2799,7 +2799,7 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
2799
2799
2800
2800
znode target_node , source_node ;
2801
2801
zend_op * opline ;
2802
- uint32_t offset ;
2802
+ uint32_t offset , flags ;
2803
2803
2804
2804
if (is_this_fetch (target_ast )) {
2805
2805
zend_error_noreturn (E_COMPILE_ERROR , "Cannot re-assign $this" );
@@ -2828,27 +2828,27 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
2828
2828
zend_error_noreturn (E_COMPILE_ERROR , "Cannot use result of built-in function in write context" );
2829
2829
}
2830
2830
2831
+ flags = zend_is_call (source_ast ) ? ZEND_RETURNS_FUNCTION : 0 ;
2832
+
2831
2833
if (opline && opline -> opcode == ZEND_FETCH_OBJ_W ) {
2832
2834
opline -> opcode = ZEND_ASSIGN_OBJ_REF ;
2833
2835
opline -> extended_value &= ~ZEND_FETCH_REF ;
2836
+ opline -> extended_value |= flags ;
2834
2837
zend_emit_op_data (& source_node );
2835
2838
if (result != NULL ) {
2836
2839
* result = target_node ;
2837
2840
}
2838
2841
} else if (opline && opline -> opcode == ZEND_FETCH_STATIC_PROP_W ) {
2839
2842
opline -> opcode = ZEND_ASSIGN_STATIC_PROP_REF ;
2840
2843
opline -> extended_value &= ~ZEND_FETCH_REF ;
2844
+ opline -> extended_value |= flags ;
2841
2845
zend_emit_op_data (& source_node );
2842
2846
if (result != NULL ) {
2843
2847
* result = target_node ;
2844
2848
}
2845
2849
} else {
2846
2850
opline = zend_emit_op (result , ZEND_ASSIGN_REF , & target_node , & source_node );
2847
- opline -> extended_value = 0 ;
2848
- }
2849
-
2850
- if (zend_is_call (source_ast )) {
2851
- opline -> extended_value |= ZEND_RETURNS_FUNCTION ;
2851
+ opline -> extended_value = flags ;
2852
2852
}
2853
2853
}
2854
2854
/* }}} */
0 commit comments