git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@30263 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2010-04-30 07:30:27 +00:00
parent a9a949c4ef
commit 1e56bf55ca
2 changed files with 37 additions and 23 deletions

View file

@ -1,3 +1,8 @@
2010-04-30 Richard Frith-Macdonald <rfm@gnu.org>
* Source/Additions/GSObjCRuntime.m:
Attempt fix for bug #29720
2010-04-26 Wolfgang Lux <wolfgang.lux@gmail.com> 2010-04-26 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/NSObject.m (GSAtomicIncrement, GSAtomicDecrement): Use * Source/NSObject.m (GSAtomicIncrement, GSAtomicDecrement): Use

View file

@ -1742,21 +1742,25 @@ NSArray *GSObjCAllSubclassesOfClass(Class cls)
} }
else else
{ {
NSMutableArray *result = [[NSMutableArray alloc] init]; NSMutableArray *result;
Class *classes;
int numClasses;
int i;
#ifdef GNU_RUNTIME numClasses = objc_getClassList(NULL, 0);
Class aClass; classes = NSZoneMalloc(NSDefaultMallocZone(), numClasses*sizeof(Class));
for (aClass = cls->subclass_list; aClass; aClass=aClass->sibling_class) result = [NSMutableArray array];
for (i = 0; i < numClasses; i++)
{ {
if (CLS_ISMETA(aClass)) Class c = classes[i];
continue;
[result addObject:aClass]; if (YES == GSObjCIsKindOf(cls, c) && cls != c)
[result addObjectsFromArray: GSObjCAllSubclassesOfClass(aClass)]; {
[result addObject: c];
}
} }
#else NSZoneFree(NSDefaultMallocZone(), classes);
#warning not implemented for the NeXT_RUNTIME return result;
#endif
return AUTORELEASE(result);
} }
} }
@ -1770,20 +1774,25 @@ NSArray *GSObjCDirectSubclassesOfClass(Class cls)
} }
else else
{ {
NSMutableArray *result=[[NSMutableArray alloc] init]; NSMutableArray *result;
Class aClass; Class *classes;
int numClasses;
int i;
#ifdef GNU_RUNTIME numClasses = objc_getClassList(NULL, 0);
for (aClass = cls->subclass_list;aClass;aClass=aClass->sibling_class) classes = NSZoneMalloc(NSDefaultMallocZone(), numClasses*sizeof(Class));
result = [NSMutableArray array];
for (i = 0; i < numClasses; i++)
{ {
if (CLS_ISMETA(aClass)) Class c = classes[i];
continue;
[result addObject:aClass]; if (class_getSuperclass(c) == cls)
{
[result addObject: c];
}
} }
#else NSZoneFree(NSDefaultMallocZone(), classes);
#warning not implemented for the NeXT_RUNTIME return result;
#endif
return AUTORELEASE(result);
} }
} }