summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-04-19 00:08:14 +0400
committerDmitry Stogov <dmitry@zend.com>2014-04-19 00:08:14 +0400
commit54d9ad53f4797733b41bf2c65bd2c2cb5a1938b6 (patch)
treec2d5bba53f9ddbf6ea083f5356096a2da341b9c2 /ext/standard
parent277f8f6391721f5b6ddb84e9b5a8f1a57f7b1993 (diff)
downloadphp-git-54d9ad53f4797733b41bf2c65bd2c2cb5a1938b6.tar.gz
More ZEND_HASH_FOREACH_* related changes
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/array.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index d5799196d2..03c77fea80 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1975,21 +1975,34 @@ static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
/* Get the first or last value and copy it into the return value */
if (off_the_end) {
zend_hash_internal_pointer_end(Z_ARRVAL_P(stack));
+ while (1) {
+ val = zend_hash_get_current_data(Z_ARRVAL_P(stack));
+ if (!val) {
+ return;
+ } else if (Z_TYPE_P(val) == IS_INDIRECT) {
+ val = Z_INDIRECT_P(val);
+ if (Z_TYPE_P(val) == IS_UNDEF) {
+ zend_hash_move_backwards(Z_ARRVAL_P(stack));
+ continue;
+ }
+ }
+ break;
+ }
} else {
zend_hash_internal_pointer_reset(Z_ARRVAL_P(stack));
- }
- while (1) {
- val = zend_hash_get_current_data(Z_ARRVAL_P(stack));
- if (!val) {
- return;
- } else if (Z_TYPE_P(val) == IS_INDIRECT) {
- val = Z_INDIRECT_P(val);
- if (Z_TYPE_P(val) == IS_UNDEF) {
- zend_hash_move_forward(Z_ARRVAL_P(stack));
- continue;
+ while (1) {
+ val = zend_hash_get_current_data(Z_ARRVAL_P(stack));
+ if (!val) {
+ return;
+ } else if (Z_TYPE_P(val) == IS_INDIRECT) {
+ val = Z_INDIRECT_P(val);
+ if (Z_TYPE_P(val) == IS_UNDEF) {
+ zend_hash_move_forward(Z_ARRVAL_P(stack));
+ continue;
+ }
}
+ break;
}
- break;
}
RETVAL_ZVAL_FAST(val);