]> granicus.if.org Git - php/commitdiff
Use new iterator macros
authorXinchen Hui <laruence@php.net>
Mon, 19 May 2014 02:39:28 +0000 (10:39 +0800)
committerXinchen Hui <laruence@php.net>
Mon, 19 May 2014 02:55:09 +0000 (10:55 +0800)
ext/spl/spl_fixedarray.c
ext/spl/spl_observer.c
ext/standard/info.c

index 6936845b321129f49c288bfea9530c3e4e69a954..f9f89dfd9ce0e9e9abdc51b81335ddec80aa25bf 100644 (file)
@@ -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);
        }
index 355762c503e2487ec7e599d4287739096ad6249a..52279c3429f10a6e83058e78edcc5dfac8bbcd3d 100644 (file)
@@ -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;
index ea2278a76b61503cabebcc58f5d2e1f3b3ab2ffc..19f8ebff44816260916d85ec6be2f9608a7988e8 100644 (file)
@@ -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("<tr>");
                                php_info_print("<td class=\"e\">");
@@ -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);
 }