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 {
|
try {
|
||||||
test(...null);
|
test(...null);
|
||||||
} catch (Error $e) {
|
} catch (Error $e) {
|
||||||
echo $e->getMessage(), "\n";
|
echo $e::class . ": " . $e->getMessage(), "\n";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
test(...42);
|
test(...42);
|
||||||
} catch (Error $e) {
|
} catch (Error $e) {
|
||||||
echo $e->getMessage(), "\n";
|
echo $e::class . ": " . $e->getMessage(), "\n";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
test(...new stdClass);
|
test(...new stdClass);
|
||||||
} catch (Error $e) {
|
} catch (Error $e) {
|
||||||
echo $e->getMessage(), "\n";
|
echo $e::class . ": " . $e->getMessage(), "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
test(1, 2, 3, ..."foo", ...[4, 5]);
|
test(1, 2, 3, ..."foo", ...[4, 5]);
|
||||||
} catch (Error $e) {
|
} catch (Error $e) {
|
||||||
echo $e->getMessage(), "\n";
|
echo $e::class . ": " . $e->getMessage(), "\n";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
test(1, 2, 3, ...new StdClass, ...3.14, ...[4, 5]);
|
test(1, 2, 3, ...new StdClass, ...3.14, ...[4, 5]);
|
||||||
} catch (Error $e) {
|
} catch (Error $e) {
|
||||||
echo $e->getMessage(), "\n";
|
echo $e::class . ": " . $e->getMessage(), "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
--EXPECT--
|
||||||
Only arrays and Traversables can be unpacked
|
TypeError: Only arrays and Traversables can be unpacked, null given
|
||||||
Only arrays and Traversables can be unpacked
|
TypeError: Only arrays and Traversables can be unpacked, int given
|
||||||
Only arrays and Traversables can be unpacked
|
TypeError: Only arrays and Traversables can be unpacked, stdClass given
|
||||||
Only arrays and Traversables can be unpacked
|
TypeError: Only arrays and Traversables can be unpacked, string given
|
||||||
Only arrays and Traversables can be unpacked
|
TypeError: Only arrays and Traversables can be unpacked, stdClass given
|
||||||
|
@ -9,7 +9,7 @@ var_dump([...$arr]);
|
|||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
Warning: Undefined variable $arr in %s on line %d
|
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:
|
Stack trace:
|
||||||
#0 {main}
|
#0 {main}
|
||||||
thrown in %s on line %d
|
thrown in %s on line %d
|
||||||
|
@ -7,4 +7,4 @@ var_dump([...42]);
|
|||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--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;
|
continue;
|
||||||
} else {
|
} 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;
|
bool have_named_params = 0;
|
||||||
|
|
||||||
if (!ce || !ce->get_iterator) {
|
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 {
|
} else {
|
||||||
|
|
||||||
iter = ce->get_iterator(ce, args, 0);
|
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)) {
|
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
|
||||||
ZVAL_UNDEFINED_OP1();
|
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();
|
FREE_OP1();
|
||||||
@ -6285,7 +6285,7 @@ ZEND_VM_C_LABEL(add_unpack_again):
|
|||||||
zend_object_iterator *iter;
|
zend_object_iterator *iter;
|
||||||
|
|
||||||
if (!ce || !ce->get_iterator) {
|
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 {
|
} else {
|
||||||
iter = ce->get_iterator(ce, op1, 0);
|
iter = ce->get_iterator(ce, op1, 0);
|
||||||
if (UNEXPECTED(!iter)) {
|
if (UNEXPECTED(!iter)) {
|
||||||
@ -6360,7 +6360,7 @@ ZEND_VM_C_LABEL(add_unpack_again):
|
|||||||
op1 = Z_REFVAL_P(op1);
|
op1 = Z_REFVAL_P(op1);
|
||||||
ZEND_VM_C_GOTO(add_unpack_again);
|
ZEND_VM_C_GOTO(add_unpack_again);
|
||||||
} else {
|
} 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();
|
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;
|
bool have_named_params = 0;
|
||||||
|
|
||||||
if (!ce || !ce->get_iterator) {
|
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 {
|
} else {
|
||||||
|
|
||||||
iter = ce->get_iterator(ce, args, 0);
|
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)) {
|
if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
|
||||||
ZVAL_UNDEFINED_OP1();
|
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);
|
FREE_OP(opline->op1_type, opline->op1.var);
|
||||||
@ -2740,7 +2740,7 @@ add_unpack_again:
|
|||||||
zend_object_iterator *iter;
|
zend_object_iterator *iter;
|
||||||
|
|
||||||
if (!ce || !ce->get_iterator) {
|
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 {
|
} else {
|
||||||
iter = ce->get_iterator(ce, op1, 0);
|
iter = ce->get_iterator(ce, op1, 0);
|
||||||
if (UNEXPECTED(!iter)) {
|
if (UNEXPECTED(!iter)) {
|
||||||
@ -2815,7 +2815,7 @@ add_unpack_again:
|
|||||||
op1 = Z_REFVAL_P(op1);
|
op1 = Z_REFVAL_P(op1);
|
||||||
goto add_unpack_again;
|
goto add_unpack_again;
|
||||||
} else {
|
} 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);
|
FREE_OP(opline->op1_type, opline->op1.var);
|
||||||
|
Loading…
Reference in New Issue
Block a user