mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
Add type indicator to array/arg unpack error messages (GH-15448)
This commit is contained in:
parent
de6658531f
commit
2a30f2ffc4
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -9829,7 +9829,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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5280,7 +5280,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);
|
||||
@ -5397,7 +5397,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();
|
||||
@ -6285,7 +6285,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)) {
|
||||
@ -6360,7 +6360,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();
|
||||
|
8
Zend/zend_vm_execute.h
generated
8
Zend/zend_vm_execute.h
generated
@ -2359,7 +2359,7 @@ 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);
|
||||
@ -2476,7 +2476,7 @@ send_again:
|
||||
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 @@ 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)) {
|
||||
@ -2815,7 +2815,7 @@ add_unpack_again:
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user