From: Xinchen Hui Date: Mon, 19 May 2014 02:39:28 +0000 (+0800) Subject: Use new iterator macros X-Git-Tag: POST_PHPNG_MERGE~326 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82a48974465e767884c7a7043bf5150406d50b78;p=php Use new iterator macros --- diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index 6936845b32..f9f89dfd9c 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -587,7 +587,6 @@ SPL_METHOD(SplFixedArray, __construct) SPL_METHOD(SplFixedArray, __wakeup) { spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(getThis()); - HashPosition ptr; HashTable *intern_ht = zend_std_get_properties(getThis() TSRMLS_CC); zval *data; @@ -602,12 +601,13 @@ SPL_METHOD(SplFixedArray, __wakeup) intern->array = emalloc(sizeof(spl_fixedarray)); spl_fixedarray_init(intern->array, size TSRMLS_CC); - for (zend_hash_internal_pointer_reset_ex(intern_ht, &ptr); (data = zend_hash_get_current_data_ex(intern_ht, &ptr)) != NULL; zend_hash_move_forward_ex(intern_ht, &ptr)) { + ZEND_HASH_FOREACH_VAL(intern_ht, data) { if (Z_REFCOUNTED_P(data)) { Z_ADDREF_P(data); } - ZVAL_COPY_VALUE(&intern->array->elements[index++], data); - } + ZVAL_COPY_VALUE(&intern->array->elements[index], data); + index++; + } ZEND_HASH_FOREACH_END(); /* Remove the unserialised properties, since we now have the elements * within the spl_fixedarray_object structure. */ @@ -687,11 +687,8 @@ SPL_METHOD(SplFixedArray, fromArray) ulong num_index, max_index = 0; long tmp; - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(data)); - (element = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL; - zend_hash_move_forward(Z_ARRVAL_P(data)) - ) { - if (zend_hash_get_current_key(Z_ARRVAL_P(data), &str_index, &num_index, 0) != HASH_KEY_IS_LONG || (long)num_index < 0) { + ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(data), num_index, str_index) { + if (str_index != NULL || (long)num_index < 0) { efree(array); zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "array must contain only positive integer keys"); return; @@ -700,7 +697,7 @@ SPL_METHOD(SplFixedArray, fromArray) if (num_index > max_index) { max_index = num_index; } - } + } ZEND_HASH_FOREACH_END(); tmp = max_index + 1; if (tmp <= 0) { @@ -710,16 +707,10 @@ SPL_METHOD(SplFixedArray, fromArray) } spl_fixedarray_init(array, tmp TSRMLS_CC); - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(data)); - (element = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL; - zend_hash_move_forward(Z_ARRVAL_P(data)) - ) { - - zend_hash_get_current_key(Z_ARRVAL_P(data), &str_index, &num_index, 0); - + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(data), num_index, str_index, element) { SEPARATE_ARG_IF_REF(element); ZVAL_COPY_VALUE(&array->elements[num_index], element); - } + } ZEND_HASH_FOREACH_END(); } else if (num > 0 && !save_indexes) { zval *element; @@ -727,15 +718,11 @@ SPL_METHOD(SplFixedArray, fromArray) spl_fixedarray_init(array, num TSRMLS_CC); - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(data)); - (element = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL; - zend_hash_move_forward(Z_ARRVAL_P(data)) - ) { - + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(data), element) { SEPARATE_ARG_IF_REF(element); ZVAL_COPY_VALUE(&array->elements[i], element); i++; - } + } ZEND_HASH_FOREACH_END(); } else { spl_fixedarray_init(array, 0 TSRMLS_CC); } diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index 355762c503..52279c3429 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -242,16 +242,12 @@ int spl_object_storage_detach(spl_SplObjectStorage *intern, zval *this, zval *ob } /* }}}*/ void spl_object_storage_addall(spl_SplObjectStorage *intern, zval *this, spl_SplObjectStorage *other TSRMLS_DC) { /* {{{ */ - HashPosition pos; spl_SplObjectStorageElement *element; - zend_hash_internal_pointer_reset_ex(&other->storage, &pos); - while ((element = zend_hash_get_current_data_ptr_ex(&other->storage, &pos)) != NULL) { + ZEND_HASH_FOREACH_PTR(&other->storage, element) { spl_object_storage_attach(intern, this, &element->obj, &element->inf TSRMLS_CC); - zend_hash_move_forward_ex(&other->storage, &pos); - } + } ZEND_HASH_FOREACH_END(); - zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos); intern->index = 0; } /* }}} */ @@ -314,7 +310,6 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp TSRMLS_D spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj); spl_SplObjectStorageElement *element; HashTable *props; - HashPosition pos; zval tmp, storage; char md5str[33]; zend_string *zname; @@ -334,18 +329,16 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp TSRMLS_D array_init(&storage); - zend_hash_internal_pointer_reset_ex(&intern->storage, &pos); - while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &pos)) != NULL) { - php_spl_object_hash(&element->obj, md5str TSRMLS_CC); - array_init(&tmp); - /* Incrementing the refcount of obj and inf would confuse the garbage collector. - * Prefer to null the destructor */ - Z_ARRVAL_P(&tmp)->pDestructor = NULL; - add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj); - add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf); - add_assoc_zval_ex(&storage, md5str, 32, &tmp); - zend_hash_move_forward_ex(&intern->storage, &pos); - } + ZEND_HASH_FOREACH_PTR(&intern->storage, element) { + php_spl_object_hash(&element->obj, md5str TSRMLS_CC); + array_init(&tmp); + /* Incrementing the refcount of obj and inf would confuse the garbage collector. + * Prefer to null the destructor */ + Z_ARRVAL_P(&tmp)->pDestructor = NULL; + add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj); + add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf); + add_assoc_zval_ex(&storage, md5str, 32, &tmp); + } ZEND_HASH_FOREACH_END(); zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1 TSRMLS_CC); zend_symtable_update(intern->debug_info, zname, &storage); @@ -363,7 +356,6 @@ static HashTable *spl_object_storage_get_gc(zval *obj, zval **table, int *n TSRM spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj); spl_SplObjectStorageElement *element; HashTable *props; - HashPosition pos; zval *gcdata_arr, tmp; props = std_object_handlers.get_properties(obj TSRMLS_CC); @@ -386,12 +378,10 @@ static HashTable *spl_object_storage_get_gc(zval *obj, zval **table, int *n TSRM gcdata_arr = &tmp; } - zend_hash_internal_pointer_reset_ex(&intern->storage, &pos); - while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &pos)) != NULL) { + ZEND_HASH_FOREACH_PTR(&intern->storage, element) { add_next_index_zval(gcdata_arr, &element->obj); add_next_index_zval(gcdata_arr, &element->inf); - zend_hash_move_forward_ex(&intern->storage, &pos); - } + } ZEND_HASH_FOREACH_END(); return props; } @@ -582,13 +572,11 @@ SPL_METHOD(SplObjectStorage, removeAllExcept) other = Z_SPLOBJSTORAGE_P(obj); - zend_hash_internal_pointer_reset(&intern->storage); - while ((element = zend_hash_get_current_data_ptr(&intern->storage)) != NULL) { + ZEND_HASH_FOREACH_PTR(&intern->storage, element) { if (!spl_object_storage_contains(other, getThis(), &element->obj TSRMLS_CC)) { spl_object_storage_detach(intern, getThis(), &element->obj TSRMLS_CC); } - zend_hash_move_forward(&intern->storage); - } + } ZEND_HASH_FOREACH_END(); zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos); intern->index = 0; diff --git a/ext/standard/info.c b/ext/standard/info.c index ea2278a76b..19f8ebff44 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -202,10 +202,8 @@ static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC) key = STR_INIT(name, name_length, 0); zend_is_auto_global(key TSRMLS_CC); - if ((data = zend_hash_find(&EG(symbol_table).ht, key)) != NULL - && (Z_TYPE_P(data)==IS_ARRAY)) { - zend_hash_internal_pointer_reset(Z_ARRVAL_P(data)); - while ((tmp = zend_hash_get_current_data(Z_ARRVAL_P(data))) != NULL) { + if ((data = zend_hash_find(&EG(symbol_table).ht, key)) != NULL && (Z_TYPE_P(data) == IS_ARRAY)) { + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(data), num_key, string_key, tmp) { if (!sapi_module.phpinfo_as_text) { php_info_print(""); php_info_print(""); @@ -214,17 +212,14 @@ static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC) php_info_print(name); php_info_print("[\""); - switch (zend_hash_get_current_key(Z_ARRVAL_P(data), &string_key, &num_key, 0)) { - case HASH_KEY_IS_STRING: - if (!sapi_module.phpinfo_as_text) { - php_info_print_html_esc(string_key->val, string_key->len); - } else { - php_info_print(string_key->val); - } - break; - case HASH_KEY_IS_LONG: - php_info_printf("%ld", num_key); - break; + if (string_key != NULL) { + if (!sapi_module.phpinfo_as_text) { + php_info_print_html_esc(string_key->val, string_key->len); + } else { + php_info_print(string_key->val); + } + } else { + php_info_printf("%ld", num_key); } php_info_print("\"]"); if (!sapi_module.phpinfo_as_text) { @@ -267,8 +262,7 @@ static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC) } else { php_info_print("\n"); } - zend_hash_move_forward(Z_ARRVAL_P(data)); - } + } ZEND_HASH_FOREACH_END(); } STR_FREE(key); }