Commit: 5ebbdecfeaaea1bc78450a2bb6d5ee280bf18dbd Author: Xinchen Hui <larue...@php.net> Sun, 26 Aug 2012 13:05:33 +0800 Parents: c6a5d192c8f23ce54c253decb8be727bddc4f3bf Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=5ebbdecfeaaea1bc78450a2bb6d5ee280bf18dbd Log: Fixed bug #62930, and more tests Bugs: https://bugs.php.net/62930 Changed paths: D Zend/tests/foreach_list.phpt A Zend/tests/foreach_list_001.phpt A Zend/tests/foreach_list_002.phpt A Zend/tests/foreach_list_003.phpt A Zend/tests/foreach_list_004.phpt M Zend/zend_compile.c Diff: diff --git a/Zend/tests/foreach_list.phpt b/Zend/tests/foreach_list.phpt deleted file mode 100644 index a318f1a..0000000 --- a/Zend/tests/foreach_list.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---TEST-- -foreach with list syntax ---FILE-- -<?php - -foreach(array(array(1,2), array(3,4)) as list($a, $b)) { - var_dump($a . $b); -} - -$array = array( - array('a', 'b'), - array('c', 'd'), -); - -foreach ($array as list($a, $b)) { - var_dump($a . $b); -} - - -$multi = array( - array(array(1,2), array(3,4)), - array(array(5,6), array(7,8)), -); - -foreach ($multi as list(list($a, $b), list($c, $d))) { - var_dump($a . $b . $c . $d); -} - -foreach ($multi as $key => list(list($a, $b), list($c, $d))) { - var_dump($key . $a . $b . $c . $d); -} - - -?> ---EXPECT-- -string(2) "12" -string(2) "34" -string(2) "ab" -string(2) "cd" -string(4) "1234" -string(4) "5678" -string(5) "01234" -string(5) "15678" diff --git a/Zend/tests/foreach_list_001.phpt b/Zend/tests/foreach_list_001.phpt new file mode 100644 index 0000000..a318f1a --- /dev/null +++ b/Zend/tests/foreach_list_001.phpt @@ -0,0 +1,43 @@ +--TEST-- +foreach with list syntax +--FILE-- +<?php + +foreach(array(array(1,2), array(3,4)) as list($a, $b)) { + var_dump($a . $b); +} + +$array = array( + array('a', 'b'), + array('c', 'd'), +); + +foreach ($array as list($a, $b)) { + var_dump($a . $b); +} + + +$multi = array( + array(array(1,2), array(3,4)), + array(array(5,6), array(7,8)), +); + +foreach ($multi as list(list($a, $b), list($c, $d))) { + var_dump($a . $b . $c . $d); +} + +foreach ($multi as $key => list(list($a, $b), list($c, $d))) { + var_dump($key . $a . $b . $c . $d); +} + + +?> +--EXPECT-- +string(2) "12" +string(2) "34" +string(2) "ab" +string(2) "cd" +string(4) "1234" +string(4) "5678" +string(5) "01234" +string(5) "15678" diff --git a/Zend/tests/foreach_list_002.phpt b/Zend/tests/foreach_list_002.phpt new file mode 100644 index 0000000..251870b --- /dev/null +++ b/Zend/tests/foreach_list_002.phpt @@ -0,0 +1,26 @@ +--TEST-- +foreach with freak lists +--FILE-- +<?php + +foreach (array(array(1,2), array(3,4)) as list($a, )) { + var_dump($a); +} + +$array = [['a', 'b'], 'c', 'd']; + +foreach($array as list(list(), $a)) { + var_dump($a); +} + +?> +--EXPECTF-- +int(1) +int(3) +string(1) "b" + +Notice: Uninitialized string offset: 1 in %sforeach_list_002.php on line %d +string(0) "" + +Notice: Uninitialized string offset: 1 in %sforeach_list_002.php on line %d +string(0) "" diff --git a/Zend/tests/foreach_list_003.phpt b/Zend/tests/foreach_list_003.phpt new file mode 100644 index 0000000..8674ecd --- /dev/null +++ b/Zend/tests/foreach_list_003.phpt @@ -0,0 +1,13 @@ +--TEST-- +foreach with list key +--FILE-- +<?php + +$array = [['a', 'b'], 'c', 'd']; + +foreach($array as list($key) => list(list(), $a)) { +} + +?> +--EXPECTF-- +Fatal error: Cannot use list as key element in %sforeach_list_003.php on line %d diff --git a/Zend/tests/foreach_list_004.phpt b/Zend/tests/foreach_list_004.phpt new file mode 100644 index 0000000..fd48e8a --- /dev/null +++ b/Zend/tests/foreach_list_004.phpt @@ -0,0 +1,13 @@ +--TEST-- +foreach with empty list +--FILE-- +<?php + +$array = [['a', 'b'], 'c', 'd']; + +foreach($array as $key => list()) { +} + +?> +--EXPECTF-- +Fatal error: Cannot use empty list in %sforeach_list_004.php on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d825792..704db10 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -6288,7 +6288,7 @@ void zend_do_foreach_cont(znode *foreach_token, const znode *open_brackets_token zend_error(E_COMPILE_ERROR, "Key element cannot be a reference"); } if (key->EA & ZEND_PARSED_LIST_EXPR) { - zend_error(E_COMPILE_ERROR, "Cannot use list as Key element"); + zend_error(E_COMPILE_ERROR, "Cannot use list as key element"); } } @@ -6326,6 +6326,9 @@ void zend_do_foreach_cont(znode *foreach_token, const znode *open_brackets_token GET_NODE(&value_node, opline->result); if (value->EA & ZEND_PARSED_LIST_EXPR) { + if (!CG(list_llist).head) { + zend_error(E_COMPILE_ERROR, "Cannot use empty list"); + } zend_do_list_end(&dummy, &value_node TSRMLS_CC); zend_do_free(&dummy TSRMLS_CC); } else { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php