diff --git a/Source/FastArray.x b/Source/FastArray.x index 37f06013a..3d73987ea 100644 --- a/Source/FastArray.x +++ b/Source/FastArray.x @@ -102,7 +102,8 @@ FastArrayAddItem(FastArray array, FastArrayItem item) array->old = array->cap; array->cap = next; } - array->ptr[array->count++] = FAST_ARRAY_RETAIN(item); + FAST_ARRAY_RETAIN(item); + array->ptr[array->count++] = item; } static INLINE void @@ -122,7 +123,8 @@ FastArraySetItemAtIndex(FastArray array, FastArrayItem item, unsigned index) if (array->ptr[index].o != item.o) { FAST_ARRAY_RELEASE(array->ptr[index]); - array->ptr[index] = FAST_ARRAY_RETAIN(item); + FAST_ARRAY_RETAIN(item); + array->ptr[index] = item; } } diff --git a/Source/FastMap.x b/Source/FastMap.x index b896ccf47..2d89fd768 100644 --- a/Source/FastMap.x +++ b/Source/FastMap.x @@ -93,6 +93,7 @@ typedef union { id o; + NSObject *O; Class c; SEL C; int i; @@ -529,8 +530,8 @@ FastMapAddPair(FastMapTable map, FastMapItem key, FastMapItem value) { FastMapNode node; - key = FAST_MAP_RETAIN_KEY(key); - value = FAST_MAP_RETAIN_VAL(value); + FAST_MAP_RETAIN_KEY(key); + FAST_MAP_RETAIN_VAL(value); node = FastMapNewNode(map, key, value); if (node != 0) @@ -561,7 +562,7 @@ FastMapAddKey(FastMapTable map, FastMapItem key) { FastMapNode node; - key = FAST_MAP_RETAIN_KEY(key); + FAST_MAP_RETAIN_KEY(key); node = FastMapNewNode(map, key); if (node != 0) diff --git a/Source/NSGDictionary.m b/Source/NSGDictionary.m index f386d67b6..2eaf119ef 100644 --- a/Source/NSGDictionary.m +++ b/Source/NSGDictionary.m @@ -102,7 +102,8 @@ myEqual(id self, id other) */ #define FAST_MAP_HASH(X) myHash(X.o) #define FAST_MAP_EQUAL(X,Y) myEqual(X.o,Y.o) -#define FAST_MAP_RETAIN_KEY(X) [((id)(X).o) copyWithZone: map->zone] +#define FAST_MAP_RETAIN_KEY(X) ((id)(X).o) = \ + [((id)(X).o) copyWithZone: map->zone] #include "FastMap.x"