diff --git a/Zend/tests/arg_unpack/invalid_type.phpt b/Zend/tests/arg_unpack/invalid_type.phpt index ad580c37ae9b0..a0e6493715286 100644 --- a/Zend/tests/arg_unpack/invalid_type.phpt +++ b/Zend/tests/arg_unpack/invalid_type.phpt @@ -10,34 +10,34 @@ function test(...$args) { try { test(...null); } catch (Error $e) { - echo $e->getMessage(), "\n"; + echo $e::class . ": " . $e->getMessage(), "\n"; } try { test(...42); } catch (Error $e) { - echo $e->getMessage(), "\n"; + echo $e::class . ": " . $e->getMessage(), "\n"; } try { test(...new stdClass); } catch (Error $e) { - echo $e->getMessage(), "\n"; + echo $e::class . ": " . $e->getMessage(), "\n"; } try { test(1, 2, 3, ..."foo", ...[4, 5]); } catch (Error $e) { - echo $e->getMessage(), "\n"; + echo $e::class . ": " . $e->getMessage(), "\n"; } try { test(1, 2, 3, ...new StdClass, ...3.14, ...[4, 5]); } catch (Error $e) { - echo $e->getMessage(), "\n"; + echo $e::class . ": " . $e->getMessage(), "\n"; } ?> --EXPECT-- -Only arrays and Traversables can be unpacked -Only arrays and Traversables can be unpacked -Only arrays and Traversables can be unpacked -Only arrays and Traversables can be unpacked -Only arrays and Traversables can be unpacked +TypeError: Only arrays and Traversables can be unpacked, null given +TypeError: Only arrays and Traversables can be unpacked, int given +TypeError: Only arrays and Traversables can be unpacked, stdClass given +TypeError: Only arrays and Traversables can be unpacked, string given +TypeError: Only arrays and Traversables can be unpacked, stdClass given diff --git a/Zend/tests/array_unpack/undef_var.phpt b/Zend/tests/array_unpack/undef_var.phpt index 383805c46a294..e38159102ca32 100644 --- a/Zend/tests/array_unpack/undef_var.phpt +++ b/Zend/tests/array_unpack/undef_var.phpt @@ -9,7 +9,7 @@ var_dump([...$arr]); --EXPECTF-- Warning: Undefined variable $arr in %s on line %d -Fatal error: Uncaught Error: Only arrays and Traversables can be unpacked in %s:%d +Fatal error: Uncaught Error: Only arrays and Traversables can be unpacked, null given in %s:%d Stack trace: #0 {main} thrown in %s on line %d diff --git a/Zend/tests/array_unpack/unpack_invalid_type_compile_time.phpt b/Zend/tests/array_unpack/unpack_invalid_type_compile_time.phpt index 19297430a5d6d..d0060a3e24739 100644 --- a/Zend/tests/array_unpack/unpack_invalid_type_compile_time.phpt +++ b/Zend/tests/array_unpack/unpack_invalid_type_compile_time.phpt @@ -7,4 +7,4 @@ var_dump([...42]); ?> --EXPECTF-- -Fatal error: Only arrays and Traversables can be unpacked in %s on line %d +Fatal error: Only arrays and Traversables can be unpacked, int given in %s on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 9e736ea1b37ad..edfe0dd429aa1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -9799,7 +9799,7 @@ static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ continue; } else { - zend_error_noreturn(E_COMPILE_ERROR, "Only arrays and Traversables can be unpacked"); + zend_error_noreturn(E_COMPILE_ERROR, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(value)); } } diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 55fdb7d46582b..88a42a66a09af 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5270,7 +5270,7 @@ ZEND_VM_C_LABEL(send_again): bool have_named_params = 0; if (!ce || !ce->get_iterator) { - zend_type_error("Only arrays and Traversables can be unpacked"); + zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args)); } else { iter = ce->get_iterator(ce, args, 0); @@ -5387,7 +5387,7 @@ ZEND_VM_C_LABEL(send_again): if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) { ZVAL_UNDEFINED_OP1(); } - zend_type_error("Only arrays and Traversables can be unpacked"); + zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args)); } FREE_OP1(); @@ -6275,7 +6275,7 @@ ZEND_VM_C_LABEL(add_unpack_again): zend_object_iterator *iter; if (!ce || !ce->get_iterator) { - zend_type_error("Only arrays and Traversables can be unpacked"); + zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1)); } else { iter = ce->get_iterator(ce, op1, 0); if (UNEXPECTED(!iter)) { @@ -6350,7 +6350,7 @@ ZEND_VM_C_LABEL(add_unpack_again): op1 = Z_REFVAL_P(op1); ZEND_VM_C_GOTO(add_unpack_again); } else { - zend_throw_error(NULL, "Only arrays and Traversables can be unpacked"); + zend_throw_error(NULL, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1)); } FREE_OP1(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 16455b6e0cd58..938e47e35a1ed 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2359,7 +2359,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_ bool have_named_params = 0; if (!ce || !ce->get_iterator) { - zend_type_error("Only arrays and Traversables can be unpacked"); + zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args)); } else { iter = ce->get_iterator(ce, args, 0); @@ -2476,7 +2476,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_ if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) { ZVAL_UNDEFINED_OP1(); } - zend_type_error("Only arrays and Traversables can be unpacked"); + zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args)); } FREE_OP(opline->op1_type, opline->op1.var); @@ -2740,7 +2740,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER( zend_object_iterator *iter; if (!ce || !ce->get_iterator) { - zend_type_error("Only arrays and Traversables can be unpacked"); + zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1)); } else { iter = ce->get_iterator(ce, op1, 0); if (UNEXPECTED(!iter)) { @@ -2815,7 +2815,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER( op1 = Z_REFVAL_P(op1); goto add_unpack_again; } else { - zend_throw_error(NULL, "Only arrays and Traversables can be unpacked"); + zend_throw_error(NULL, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1)); } FREE_OP(opline->op1_type, opline->op1.var);