]> granicus.if.org Git - php/commitdiff
Improve implementation of array_key_first() and array_key_last()
authorChristoph M. Becker <cmbecker69@gmx.de>
Tue, 17 Jul 2018 09:53:06 +0000 (11:53 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Tue, 17 Jul 2018 09:53:06 +0000 (11:53 +0200)
Firstly, we must not separate the $stack argument for performance
reasons.  Secondly, we prefer `Z_ARRVAL_P` over `HASH_OF` to clarify
our intention.

Thanks to Nikita, for catching these issues!

ext/standard/array.c

index 82e0833e3470a3c7ac52e1ed3d8771bfaf91a9d8..ec402eac3620aa8dadd8799592455270f9ce5a8c 100644 (file)
@@ -3970,10 +3970,10 @@ PHP_FUNCTION(array_key_first)
        zval *stack;    /* Input stack */
 
        ZEND_PARSE_PARAMETERS_START(1, 1)
-               Z_PARAM_ARRAY_EX(stack, 0, 1)
+               Z_PARAM_ARRAY(stack)
        ZEND_PARSE_PARAMETERS_END();
 
-       HashTable *target_hash = HASH_OF(stack);
+       HashTable *target_hash = Z_ARRVAL_P (stack);
        HashPosition pos = 0;
        zend_hash_get_current_key_zval_ex(target_hash, return_value, &pos);
 }
@@ -3987,10 +3987,10 @@ PHP_FUNCTION(array_key_last)
        HashPosition pos;
 
        ZEND_PARSE_PARAMETERS_START(1, 1)
-               Z_PARAM_ARRAY_EX(stack, 0, 1)
+               Z_PARAM_ARRAY(stack)
        ZEND_PARSE_PARAMETERS_END();
 
-       HashTable *target_hash = HASH_OF(stack);
+       HashTable *target_hash = Z_ARRVAL_P (stack);
        zend_hash_internal_pointer_end_ex(target_hash, &pos);
        zend_hash_get_current_key_zval_ex(target_hash, return_value, &pos);
 }