1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-28 05:29:48 +00:00
freebsd-ports/lang/php53/files/patch-ext_standard_array.c
Alex Dupre 6654475e66 Fix regression: count(object) should call object->count() if instance of Countable.
Spotted by:	Roman Neuhauser <neuhauser@sigpipe.cz>
2007-02-12 19:34:58 +00:00

34 lines
1.2 KiB
C

--- ext/standard/array.c.orig Mon Feb 12 20:20:48 2007
+++ ext/standard/array.c Mon Feb 12 20:22:14 2007
@@ -295,6 +295,7 @@
PHP_FUNCTION(count)
{
zval *array;
+ zend_class_entry **ce_Countable;
long mode = COUNT_NORMAL;
if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE)
@@ -308,11 +309,11 @@
RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC));
break;
case IS_OBJECT: {
-#ifdef HAVE_SPL
/* it the object implements Countable we call its count() method */
zval *retval;
- if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) {
+ if (zend_lookup_class_ex("Countable", 9, 0, &ce_Countable TSRMLS_CC) != FAILURE) {
+ if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), *ce_Countable TSRMLS_CC)) {
zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval);
if (retval) {
convert_to_long(retval);
@@ -321,7 +322,7 @@
}
return;
}
-#endif
+ }
/* if not we return the number of properties (not taking visibility into account) */
if (Z_OBJ_HT_P(array)->count_elements) {
RETVAL_LONG(1);