@@ -520,11 +520,44 @@ - (int)countByEnumeratingWithState: (of_fast_enumeration_state_t *)state objects: (id *)objects count: (int)count { - OF_UNRECOGNIZED_SELECTOR + OFEnumerator *enumerator; + int i; + + memcpy(&enumerator, state->extra, sizeof(enumerator)); + + if (enumerator == nil) { + void *pool = objc_autoreleasePoolPush(); + + enumerator = [[self keyEnumerator] retain]; + memcpy(state->extra, &enumerator, sizeof(enumerator)); + + objc_autoreleasePoolPop(pool); + } + + state->itemsPtr = objects; + state->mutationsPtr = (unsigned long *)self; + + if (state->state == 1) + return 0; + + for (i = 0; i < count; i++) { + id object = [enumerator nextObject]; + + if (object == nil) { + state->state = 1; + [enumerator release]; + + return i; + } + + objects[i] = object; + } + + return i; } #ifdef OF_HAVE_BLOCKS - (void)enumerateKeysAndObjectsUsingBlock: (of_dictionary_enumeration_block_t)block