@@ -6459,7 +6459,6 @@ ZEND_VM_COLD_CONST_HANDLER(51, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
64596459 USE_OPLINE
64606460 zval * expr ;
64616461 zval * result = EX_VAR (opline -> result .var );
6462- HashTable * ht ;
64636462
64646463 SAVE_OPLINE ();
64656464 expr = GET_OP1_ZVAL_PTR (BP_VAR_R );
@@ -6493,53 +6492,10 @@ ZEND_VM_COLD_CONST_HANDLER(51, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
64936492 }
64946493
64956494 if (opline -> extended_value == IS_ARRAY ) {
6496- if (OP1_TYPE == IS_CONST || Z_TYPE_P (expr ) != IS_OBJECT || Z_OBJCE_P (expr ) == zend_ce_closure ) {
6497- if (Z_TYPE_P (expr ) != IS_NULL ) {
6498- ZVAL_ARR (result , zend_new_array (1 ));
6499- expr = zend_hash_index_add_new (Z_ARRVAL_P (result ), 0 , expr );
6500- if (OP1_TYPE == IS_CONST ) {
6501- if (UNEXPECTED (Z_OPT_REFCOUNTED_P (expr ))) Z_ADDREF_P (expr );
6502- } else {
6503- if (Z_OPT_REFCOUNTED_P (expr )) Z_ADDREF_P (expr );
6504- }
6505- } else {
6506- ZVAL_EMPTY_ARRAY (result );
6507- }
6508- } else if (ZEND_STD_BUILD_OBJECT_PROPERTIES_ARRAY_COMPATIBLE (expr )) {
6509- /* Optimized version without rebuilding properties HashTable */
6510- ZVAL_ARR (result , zend_std_build_object_properties_array (Z_OBJ_P (expr )));
6511- } else {
6512- HashTable * obj_ht = zend_get_properties_for (expr , ZEND_PROP_PURPOSE_ARRAY_CAST );
6513- if (obj_ht ) {
6514- /* fast copy */
6515- ZVAL_ARR (result , zend_proptable_to_symtable (obj_ht ,
6516- (Z_OBJCE_P (expr )-> default_properties_count ||
6517- Z_OBJ_P (expr )-> handlers != & std_object_handlers ||
6518- GC_IS_RECURSIVE (obj_ht ))));
6519- zend_release_properties (obj_ht );
6520- } else {
6521- ZVAL_EMPTY_ARRAY (result );
6522- }
6523- }
6495+ zend_cast_zval_to_array (result , expr , OP1_TYPE );
65246496 } else {
65256497 ZEND_ASSERT (opline -> extended_value == IS_OBJECT );
6526- ZVAL_OBJ (result , zend_objects_new (zend_standard_class_def ));
6527- if (Z_TYPE_P (expr ) == IS_ARRAY ) {
6528- ht = zend_symtable_to_proptable (Z_ARR_P (expr ));
6529- if (GC_FLAGS (ht ) & IS_ARRAY_IMMUTABLE ) {
6530- /* TODO: try not to duplicate immutable arrays as well ??? */
6531- ht = zend_array_dup (ht );
6532- }
6533- Z_OBJ_P (result )-> properties = ht ;
6534- } else if (Z_TYPE_P (expr ) != IS_NULL ) {
6535- Z_OBJ_P (result )-> properties = ht = zend_new_array (1 );
6536- expr = zend_hash_add_new (ht , ZSTR_KNOWN (ZEND_STR_SCALAR ), expr );
6537- if (OP1_TYPE == IS_CONST ) {
6538- if (UNEXPECTED (Z_OPT_REFCOUNTED_P (expr ))) Z_ADDREF_P (expr );
6539- } else {
6540- if (Z_OPT_REFCOUNTED_P (expr )) Z_ADDREF_P (expr );
6541- }
6542- }
6498+ zend_cast_zval_to_object (result , expr , OP1_TYPE );
65436499 }
65446500 }
65456501
0 commit comments