From a04ed1a9ffdeff6325c054845e3ab21ab58fe823 Mon Sep 17 00:00:00 2001 From: theraven Date: Wed, 3 Aug 2011 09:04:12 +0000 Subject: [PATCH] Make base do unintuitive and stupid things in the name of Apple compatibility (hopefully Apple will fix their implementation in 10.7.something...). Fix some tests. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@33687 72102866-910b-0410-8b05-ffd578937521 --- Source/NSConcretePointerFunctions.h | 7 +++++++ Tests/base/Functions/propertyAttrs.m | 9 ++++++++- Tests/base/NSHashTable/weak.m | 20 ------------------- Tests/base/NSMapTable/weak.m | 27 ------------------------- Tests/base/NSPointerArray/weak.m | 17 ---------------- Tests/base/NSString/regex.m | 30 ++++++++++++++++++---------- 6 files changed, 34 insertions(+), 76 deletions(-) delete mode 100644 Tests/base/NSHashTable/weak.m delete mode 100644 Tests/base/NSMapTable/weak.m delete mode 100644 Tests/base/NSPointerArray/weak.m diff --git a/Source/NSConcretePointerFunctions.h b/Source/NSConcretePointerFunctions.h index f0d8c829f..8f8b4ed12 100644 --- a/Source/NSConcretePointerFunctions.h +++ b/Source/NSConcretePointerFunctions.h @@ -40,8 +40,15 @@ # define STRONG_ACQUIRE(x) x #elif defined(OBJC_CAP_ARC) # include +/* + * OS X 10.7 uses weak to mean unsafe unretained, which is stupid and wrong, + * but we should probably do the same thing for now. Uncomment this when Apple + * fixes their implementation. # define WEAK_READ(x) objc_loadWeak((id*)x) # define WEAK_WRITE(addr, x) objc_storeWeak((id*)addr, (id)x) +*/ +# define WEAK_READ(x) (*x) +# define WEAK_WRITE(addr, x) (*(addr) = x) # define STRONG_WRITE(addr, x) objc_storeStrong((id*)addr, (id)x) # define STRONG_ACQUIRE(x) objc_retain(x) #else diff --git a/Tests/base/Functions/propertyAttrs.m b/Tests/base/Functions/propertyAttrs.m index c32806c36..80b434609 100644 --- a/Tests/base/Functions/propertyAttrs.m +++ b/Tests/base/Functions/propertyAttrs.m @@ -124,7 +124,14 @@ int main(void) testProperty("enumDefault", "Ti,VenumDefault"); testProperty("floatDefault", "Tf,VfloatDefault"); testProperty("intDefault", "Ti,VintDefault"); - testProperty("longDefault", "Tl,VlongDefault"); + if (sizeof(long) == 4) + { + testProperty("longDefault", "Tl,VlongDefault"); + } + else + { + testProperty("longDefault", "Tq,VlongDefault"); + } testProperty("shortDefault", "Ts,VshortDefault"); testProperty("signedDefault", "Ti,VsignedDefault"); testProperty("structDefault", "T{YorkshireTeaStruct=ic},VstructDefault"); diff --git a/Tests/base/NSHashTable/weak.m b/Tests/base/NSHashTable/weak.m deleted file mode 100644 index 4e6a185c5..000000000 --- a/Tests/base/NSHashTable/weak.m +++ /dev/null @@ -1,20 +0,0 @@ -#import "ObjectTesting.h" -#import -#import - -int main() -{ - [NSAutoreleasePool new]; - id pool = [NSAutoreleasePool new]; - NSHashTable *ht = [[NSHashTable hashTableWithWeakObjects] retain]; - id obj = [NSObject new]; - [ht addObject: obj]; - PASS([ht containsObject: obj], "Added object to weak hash table"); - PASS(1 == [ht count], "Weak hash table contains one object"); - PASS([ht containsObject: obj], "Added object to weak hash table"); - [obj release]; - [pool drain]; - PASS(0 == [ht count], "Weak hash table contains no objects"); - PASS(0 == [[ht allObjects] count], "Weak hash table contains no objects"); - return 0; -} diff --git a/Tests/base/NSMapTable/weak.m b/Tests/base/NSMapTable/weak.m deleted file mode 100644 index a0217801f..000000000 --- a/Tests/base/NSMapTable/weak.m +++ /dev/null @@ -1,27 +0,0 @@ -#import "ObjectTesting.h" -#import -#import - -int main() -{ - [NSAutoreleasePool new]; - id pool = [NSAutoreleasePool new]; - NSMapTable *map = [[NSMapTable mapTableWithStrongToWeakObjects] retain]; - NSMapTable *map2 = [[NSMapTable mapTableWithWeakToStrongObjects] retain]; - id obj = [NSObject new]; - - [map setObject: obj forKey: @"1"]; - [map2 setObject: @"1" forKey: obj]; - PASS(obj == [map objectForKey: @"1"], "Value stored in weak-value map"); - PASS(nil != [map2 objectForKey: obj], "Value stored in weak-key map"); - [pool drain]; - [obj release]; - PASS(nil == [map objectForKey: @"1"], "Value removed from weak-value map"); - NSEnumerator *enumerator = [map2 keyEnumerator]; - NSUInteger count = 0; - while ([enumerator nextObject] != nil) { count++; } - PASS(count == 0, "Value removed from weak-key map"); - PASS(0 == [map count], "Weak-value map reports correct count"); - PASS(0 == [map2 count], "Weak-key map reports correct count"); - return 0; -} diff --git a/Tests/base/NSPointerArray/weak.m b/Tests/base/NSPointerArray/weak.m deleted file mode 100644 index 36ad4b7dc..000000000 --- a/Tests/base/NSPointerArray/weak.m +++ /dev/null @@ -1,17 +0,0 @@ -#import "ObjectTesting.h" -#import - -int main(void) -{ - [NSAutoreleasePool new]; - id pool = [NSAutoreleasePool new]; - NSPointerArray *pa = [[NSPointerArray pointerArrayWithWeakObjects] retain]; - id obj = [NSObject new]; - [pa addPointer: obj]; - PASS([pa count] == 1, "Added object to weak array"); - [obj release]; - [pool drain]; - [pa compact]; - PASS([pa count] == 0, "Removed object to weak array"); - return 0; -} diff --git a/Tests/base/NSString/regex.m b/Tests/base/NSString/regex.m index 307bac1f5..2bb25c467 100644 --- a/Tests/base/NSString/regex.m +++ b/Tests/base/NSString/regex.m @@ -1,17 +1,25 @@ #import +#import #import "ObjectTesting.h" int main(void) { - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - NSString *regex = @"abcd*"; - NSString *source = @"abcdddddd e f g"; - NSRange r = [source rangeOfString: regex options: NSRegularExpressionSearch]; - PASS(r.length == 9, "Correct length for regex, expected 9 got %d", (int)r.length); - regex = @"aBcD*"; - r = [source rangeOfString: regex options: (NSRegularExpressionSearch | NSCaseInsensitiveSearch)]; - PASS(r.length == 9, "Correct length for regex, expected 9 got %d", (int)r.length); - - [pool release]; - return 0; + [NSAutoreleasePool new]; + START_SET("NSString + regex") + NS_DURING + [NSRegularExpression new]; + NS_HANDLER + SKIP("NSRegularExpression not built, please install libicu") + return 0; + NS_ENDHANDLER + + NSString *regex = @"abcd*"; + NSString *source = @"abcdddddd e f g"; + NSRange r = [source rangeOfString: regex options: NSRegularExpressionSearch]; + PASS(r.length == 9, "Correct length for regex, expected 9 got %d", (int)r.length); + regex = @"aBcD*"; + r = [source rangeOfString: regex options: (NSRegularExpressionSearch | NSCaseInsensitiveSearch)]; + PASS(r.length == 9, "Correct length for regex, expected 9 got %d", (int)r.length); + END_SET("NSString + regex") + return 0; }