@@ -420,20 +420,12 @@ static bool validate_constant_array_argument(HashTable *ht, int argument_number)
420420 GC_PROTECT_RECURSION (ht );
421421 ZEND_HASH_FOREACH_VAL (ht , val ) {
422422 ZVAL_DEREF (val );
423- if (Z_REFCOUNTED_P (val )) {
424- if (Z_TYPE_P (val ) == IS_ARRAY ) {
425- if (Z_REFCOUNTED_P (val )) {
426- if (Z_IS_RECURSIVE_P (val )) {
427- zend_argument_value_error (argument_number , "cannot be a recursive array" );
428- ret = 0 ;
429- break ;
430- } else if (!validate_constant_array_argument (Z_ARRVAL_P (val ), argument_number )) {
431- ret = 0 ;
432- break ;
433- }
434- }
435- } else if (Z_TYPE_P (val ) != IS_STRING && Z_TYPE_P (val ) != IS_RESOURCE ) {
436- zend_argument_type_error (argument_number , "cannot be an object, %s given" , zend_zval_type_name (val ));
423+ if (Z_TYPE_P (val ) == IS_ARRAY && Z_REFCOUNTED_P (val )) {
424+ if (Z_IS_RECURSIVE_P (val )) {
425+ zend_argument_value_error (argument_number , "cannot be a recursive array" );
426+ ret = 0 ;
427+ break ;
428+ } else if (!validate_constant_array_argument (Z_ARRVAL_P (val ), argument_number )) {
437429 ret = 0 ;
438430 break ;
439431 }
@@ -496,35 +488,15 @@ ZEND_FUNCTION(define)
496488
497489 ZVAL_UNDEF (& val_free );
498490
499- switch (Z_TYPE_P (val )) {
500- case IS_LONG :
501- case IS_DOUBLE :
502- case IS_STRING :
503- case IS_FALSE :
504- case IS_TRUE :
505- case IS_NULL :
506- case IS_RESOURCE :
507- break ;
508- case IS_ARRAY :
509- if (Z_REFCOUNTED_P (val )) {
510- if (!validate_constant_array_argument (Z_ARRVAL_P (val ), 2 )) {
511- RETURN_THROWS ();
512- } else {
513- copy_constant_array (& c .value , val );
514- goto register_constant ;
515- }
516- }
517- break ;
518- case IS_OBJECT :
519- if (Z_OBJ_HT_P (val )-> cast_object (Z_OBJ_P (val ), & val_free , IS_STRING ) == SUCCESS ) {
520- val = & val_free ;
521- break ;
491+ if (Z_TYPE_P (val ) == IS_ARRAY ) {
492+ if (Z_REFCOUNTED_P (val )) {
493+ if (!validate_constant_array_argument (Z_ARRVAL_P (val ), 2 )) {
494+ RETURN_THROWS ();
495+ } else {
496+ copy_constant_array (& c .value , val );
497+ goto register_constant ;
522498 }
523- ZEND_FALLTHROUGH ;
524- default :
525- zval_ptr_dtor (& val_free );
526- zend_argument_type_error (2 , "cannot be an object, %s given" , zend_zval_type_name (val ));
527- RETURN_THROWS ();
499+ }
528500 }
529501
530502 ZVAL_COPY (& c .value , val );
0 commit comments