mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
2004-10-17 Matt Rice <ratmice@yahoo.com
* Source/objc-load.m (objc_load_module): resolve class links under GNU runtime * Headers/Additions/GNUstepBase/GSObjCRuntime.h * Source/Additions/GSObjCRuntime.m (GSObjCAllSubclassesOfClass,GSObjCDirectSubclassesOfClass): New functions. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20234 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
bc5194f45f
commit
95954a9914
4 changed files with 69 additions and 1 deletions
|
@ -1,3 +1,12 @@
|
|||
2004-10-17 Matt Rice <ratmice@yahoo.com
|
||||
|
||||
* Source/objc-load.m (objc_load_module): resolve class links under GNU
|
||||
runtime
|
||||
* Headers/Additions/GNUstepBase/GSObjCRuntime.h
|
||||
* Source/Additions/GSObjCRuntime.m
|
||||
(GSObjCAllSubclassesOfClass,GSObjCDirectSubclassesOfClass):
|
||||
New functions.
|
||||
|
||||
2004-10-05 Georg Fleischmann
|
||||
|
||||
* Source/NSCalendarDate.m [-initWithString:] Revert to previous
|
||||
|
|
|
@ -715,6 +715,12 @@ GSSetValue(NSObject *self, NSString *key, id val, SEL sel,
|
|||
unsigned size,
|
||||
int offset) GS_ATTRIB_DEPRECATED;
|
||||
|
||||
GS_EXPORT NSArray *
|
||||
GSObjCAllSubclassesOfClass(Class cls);
|
||||
|
||||
GS_EXPORT NSArray *
|
||||
GSObjCDirectSubclassesOfClass(Class cls);
|
||||
|
||||
/** ## deprecated ##
|
||||
*/
|
||||
GS_STATIC_INLINE const char*
|
||||
|
|
|
@ -2124,6 +2124,57 @@ GSObjCSetValue(NSObject *self, NSString *key, id val, SEL sel,
|
|||
}
|
||||
|
||||
|
||||
/** Returns an autoreleased array of subclasses of Class cls, including
|
||||
* subclasses of subclasses. */
|
||||
NSArray *GSObjCAllSubclassesOfClass(Class cls)
|
||||
{
|
||||
if (!cls)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
Class aClass;
|
||||
NSMutableArray *result = [[NSMutableArray alloc] init];
|
||||
|
||||
#ifdef GNU_RUNTIME
|
||||
for (aClass = cls->subclass_list; aClass; aClass=aClass->sibling_class)
|
||||
{
|
||||
[result addObject:aClass];
|
||||
[result addObjectsFromArray: GSObjCAllSubclassesOfClass(aClass)];
|
||||
}
|
||||
#else
|
||||
#warning not implemented for the NeXT_RUNTIME
|
||||
#endif
|
||||
return AUTORELEASE(result);
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns an autoreleased array containing subclasses directly descendent of
|
||||
* Class cls. */
|
||||
NSArray *GSObjCDirectSubclassesOfClass(Class cls)
|
||||
{
|
||||
if (!cls)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
NSMutableArray *result=[[NSMutableArray alloc] init];
|
||||
Class aClass;
|
||||
|
||||
#ifdef GNU_RUNTIME
|
||||
for (aClass = cls->subclass_list;aClass;aClass=aClass->sibling_class)
|
||||
{
|
||||
[result addObject:aClass];
|
||||
}
|
||||
#else
|
||||
#warning not implemented for the NeXT_RUNTIME
|
||||
#endif
|
||||
return AUTORELEASE(result);
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
GSAutoreleasedBuffer(unsigned size)
|
||||
{
|
||||
|
|
|
@ -152,6 +152,7 @@ objc_load_module (const char *filename,
|
|||
#else
|
||||
typedef void (*void_fn)();
|
||||
dl_handle_t handle;
|
||||
void __objc_resolve_class_links(void);
|
||||
#if !defined(__ELF__) && !defined(CON_AUTOLOAD)
|
||||
void_fn *ctor_list;
|
||||
int i;
|
||||
|
@ -218,10 +219,11 @@ objc_load_module (const char *filename,
|
|||
}
|
||||
#endif /* not __ELF__ */
|
||||
|
||||
__objc_resolve_class_links(); /* fill in subclass_list and sibling_class */
|
||||
_objc_load_callback = 0;
|
||||
_objc_load_load_callback = 0;
|
||||
return 0;
|
||||
#endif
|
||||
#endif /* not NeXT_RUNTIME */
|
||||
}
|
||||
|
||||
long
|
||||
|
|
Loading…
Reference in a new issue