]> granicus.if.org Git - php/commitdiff
Revert "Improve Hash foreach macros"
authorXinchen Hui <laruence@php.net>
Tue, 23 Dec 2014 08:51:06 +0000 (03:51 -0500)
committerXinchen Hui <laruence@php.net>
Tue, 23 Dec 2014 08:51:06 +0000 (03:51 -0500)
This reverts commit 95bb0a0f7aec46cacf6a447ded1688e6c6ff4b62.

Zend/zend_hash.h
ext/standard/array.c

index 5bdfa7053c60e7a4524f85a43334e76553d4e004..81b933289f6d3ae5cfe177c9802a31e729a20053 100644 (file)
@@ -678,11 +678,6 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
 #define ZEND_HASH_FOREACH_STR_KEY(ht, _key) \
        ZEND_HASH_FOREACH(ht, 0); \
        _key = _p->key;
-
-#define ZEND_HASH_FOREACH_KEY_IND(ht, _h, _key) \
-       ZEND_HASH_FOREACH(ht, 1); \
-       _h = _p->h; \
-       _key = _p->key;
                
 #define ZEND_HASH_FOREACH_KEY(ht, _h, _key) \
        ZEND_HASH_FOREACH(ht, 0); \
@@ -756,19 +751,6 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
        _key = _p->key; \
        _val = _z;
 
-#define ZEND_HASH_FOREACH_CURRENT_KEY(ht, _h, _key) \
-       _h = _p->h; \
-       _key = _p->key;
-
-#define ZEND_HASH_FOREACH_CURRENT_STR_KEY(ht, _key) \
-       _key = _p->key;
-
-#define ZEND_HASH_FOREACH_CURRENT_NUM_KEY(ht, _h) \
-       _h = _p->h;
-
-#define ZEND_HASH_FOREACH_CURRENT_VAL(ht, _val) \
-       _val = _z;
-
 #define ZEND_HASH_APPLY_PROTECTION(ht) \
        ((ht)->u.flags & HASH_FLAG_APPLY_PROTECTION)
 
index b06b05811d032d38eb14b4db76110b9177b9582d..b9ccf5bd562e81bf2211eb543c1b2354d2d31caf 100644 (file)
@@ -1248,11 +1248,10 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
 
        if (strict) {
                zval res;                                       /* comparison result */
-               ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(array), entry) {
+               ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
                        ZVAL_DEREF(entry);
                        fast_is_identical_function(&res, value, entry);
                        if (Z_TYPE(res) == IS_TRUE) {
-                               ZEND_HASH_FOREACH_CURRENT_KEY(Z_ARRVAL_P(array), num_idx, str_idx);
                                if (behavior == 0) {
                                        RETURN_TRUE;
                                } else {
@@ -1266,9 +1265,8 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
                        }
                } ZEND_HASH_FOREACH_END();
        } else {
-               ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(array), entry) {
+               ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
                        if (fast_equal_check_function(value, entry)) {
-                               ZEND_HASH_FOREACH_CURRENT_KEY(Z_ARRVAL_P(array), num_idx, str_idx);
                                if (behavior == 0) {
                                        RETURN_TRUE;
                                } else {
@@ -2676,6 +2674,8 @@ PHP_FUNCTION(array_keys)
 {
        zval *input,                            /* Input array */
             *search_value = NULL,      /* Value to search for */
+            *entry,                            /* An entry in the input array */
+              res,                                     /* Result of comparison */
               new_val;                         /* New value */
        zend_bool strict = 0;           /* do strict comparison */
        zend_ulong num_idx;
@@ -2696,15 +2696,12 @@ PHP_FUNCTION(array_keys)
 
        /* Initialize return array */
        if (search_value != NULL) {
-               zval *entry; /* An entry in the input array */
-               zval  res; /* Result of comparison */
                array_init(return_value);
                
                if (strict) {
-                       ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL_P(input), entry) {
+                       ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(input), num_idx, str_idx, entry) {
                                fast_is_identical_function(&res, search_value, entry);
                                if (Z_TYPE(res) == IS_TRUE) {
-                                       ZEND_HASH_FOREACH_CURRENT_KEY(Z_ARRVAL_P(input), num_idx, str_idx);
                                        if (str_idx) {
                                                ZVAL_STR_COPY(&new_val, str_idx);
                                        } else {
@@ -2714,9 +2711,8 @@ PHP_FUNCTION(array_keys)
                                }
                        } ZEND_HASH_FOREACH_END();
                } else {
-                       ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL_P(input), entry) {
+                       ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(input), num_idx, str_idx, entry) {
                                if (fast_equal_check_function(search_value, entry)) {
-                                       ZEND_HASH_FOREACH_CURRENT_KEY(Z_ARRVAL_P(input), num_idx, str_idx);
                                        if (str_idx) {
                                                ZVAL_STR_COPY(&new_val, str_idx);
                                        } else {
@@ -2730,7 +2726,7 @@ PHP_FUNCTION(array_keys)
                array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(input)));
 
                /* Go through input array and add keys to the return array */
-               ZEND_HASH_FOREACH_KEY_IND(Z_ARRVAL_P(input), num_idx, str_idx) {
+               ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(input), num_idx, str_idx, entry) {
                        if (str_idx) {
                                ZVAL_STR_COPY(&new_val, str_idx);
                        } else {
@@ -2830,7 +2826,6 @@ zend_bool array_column_param_helper(zval *param,
                        return 0;
        }
 }
-/* }}} */
 
 /* {{{ proto array array_column(array input, mixed column_key[, mixed index_key])
    Return the values from a single column in the input array, identified by the
@@ -4048,10 +4043,9 @@ PHP_FUNCTION(array_diff)
 
        /* copy all elements of first array that are not in exclude set */
        array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL(args[0])));
-       ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL(args[0]), value) {
+       ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL(args[0]), idx, key, value) {
                str = zval_get_string(value);
                if (!zend_hash_exists(&exclude, str)) {
-                       ZEND_HASH_FOREACH_CURRENT_KEY(Z_ARRVAL(args[0]), idx, key);
                        if (key) {
                                zval_add_ref(value);
                                zend_hash_add_new(Z_ARRVAL_P(return_value), key, value);