More GC updates

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@4958 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 1999-09-29 14:13:52 +00:00
parent 18f87db0c7
commit 78e6f68250
5 changed files with 125 additions and 2 deletions

View file

@ -1,3 +1,10 @@
Wed Sep 29 15:33:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
* Source/NSObject.m: More GC updates
* Source/NSZone.m: ditto
* Source/mframe.m: ditto
* Source/objc-gnu2next.m: ditto
Tue Sep 28 20:54:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
* Source/NSArray.m: Tidy for GC stuff

View file

@ -272,6 +272,9 @@ NSExtraRefCount (id anObject)
*/
#if GS_WITH_GC
#include <gc.h>
#include <gc_typed.h>
inline NSZone *
fastZone(NSObject *object)
{
@ -294,8 +297,26 @@ NSAllocateObject(Class aClass, unsigned extraBytes, NSZone *zone)
id new = nil;
int size = aClass->instance_size + extraBytes;
if (CLS_ISCLASS(aClass))
new = NSZoneMalloc(zone, size);
NSCAssert((CLS_ISCLASS(aClass)), @"Bad class for new object");
if (zone == GSAtomicMallocZone())
{
new = NSZoneMalloc(zone, size);
}
else
{
GC_descr gc_type = aClass->gc_object_type;
if (gc_type == 0)
{
new = NSZoneMalloc(zone, size);
NSLog(@"No garbage collection information for '%s'", aClass->name);
}
else
{
new = GC_CALLOC_EXPLICTLY_TYPED(1, size, gc_type);
}
}
if (new != nil)
{
memset(new, 0, size);

View file

@ -1758,6 +1758,8 @@ NSZoneStats (NSZone *zone)
#else
#include <gc.h>
/*
* Dummy zones used with garbage collection.
* The 'atomic' zone is for memory that will be assumed not to contain
@ -1775,5 +1777,89 @@ static NSZone atomic_zone =
};
NSZone* __nszone_private_hidden_atomic_zone = &atomic_zone;
NSZone* NSCreateZone (size_t start, size_t gran, BOOL canFree)
{ return __nszone_private_hidden_default_zone; }
NSZone* NSDefaultMallocZone (void)
{ return __nszone_private_hidden_default_zone; }
NSZone* GSAtomicMallocZone (void)
{ return __nszone_private_hidden_atomic_zone; }
NSZone* NSZoneFromPointer (void *ptr)
{ return __nszone_private_hidden_default_zone; }
void* NSZoneMalloc (NSZone *zone, size_t size)
{
void *ptr;
if (zone == GSAtomicMallocZone())
ptr = (void*)GC_MALLOC_ATOMIC(size);
else
ptr = (void*)GC_MALLOC(size);
if (ptr == 0)
ptr = GSOutOfMemory(size, YES);
return ptr;
}
void* NSZoneCalloc (NSZone *zone, size_t elems, size_t bytes)
{
size_t size = elems * bytes;
void *ptr;
if (zone == __nszone_private_hidden_atomic_zone)
ptr = (void*)GC_MALLOC_ATOMIC(size);
else
ptr = (void*)GC_MALLOC(size);
if (ptr == 0)
ptr = GSOutOfMemory(size, NO);
memset(ptr, '\0', size);
return ptr;
}
void* NSZoneRealloc (NSZone *zone, void *ptr, size_t size)
{
ptr = GC_REALLOC(ptr, size);
if (ptr == 0)
GSOutOfMemory(size, NO);
return ptr;
}
void NSRecycleZone (NSZone *zone)
{
}
void NSZoneFree (NSZone *zone, void *ptr)
{
GC_FREE(ptr);
}
void NSSetZoneName (NSZone *zone, NSString *name)
{
}
NSString* NSZoneName (NSZone *zone)
{
return nil;
}
void* NSZoneMallocAtomic (NSZone *zone, size_t size)
{
return NSZoneMalloc(GSAtomicMallocZone(), size);
}
BOOL NSZoneCheck (NSZone *zone)
{
return YES;
}
struct NSZoneStats NSZoneStats (NSZone *zone)
{
struct NSZoneStats stats = { 0 };
return stats;
}
#endif /* GS_WITH_GC */

View file

@ -218,6 +218,9 @@ mframe_next_arg(const char *typePtr, NSArgumentInfo *info)
case _C_BYREF: info->qual |= _F_BYREF; break;
#endif
case _C_ONEWAY: info->qual |= _F_ONEWAY; break;
#ifdef _C_GCINVISIBLE
case _C_GCINVISIBLE: info->qual |= _F_GCINVISIBLE; break;
#endif
default: flag = NO;
}
if (flag)

View file

@ -304,6 +304,9 @@ objc_skip_type_qualifiers (const char* type)
|| *type == _C_BYCOPY
#ifdef _C_BYREF
|| *type == _C_BYREF
#endif
#ifdef _C_GCINVISIBLE
|| *type == _C_GCINVISIBLE
#endif
|| *type == _C_ONEWAY)
{
@ -431,6 +434,9 @@ objc_get_type_qualifiers (const char* type)
case _C_BYREF: res |= _F_BYREF; break;
#endif
case _C_ONEWAY: res |= _F_ONEWAY; break;
#ifdef _C_GCINVISIBLE
case _C_GCINVISIBLE: res |= _F_GCINVISIBLE; break;
#endif
default: flag = NO;
}