mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
MInor tidyup.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@16105 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
7c4a383280
commit
3a344ae100
10 changed files with 64 additions and 52 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
|||
2003-03-02 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Headers/gnustep/base/GSObjCRuntime.h:
|
||||
* Source/GSFFIInvocation.m:
|
||||
* Source/GSString.m:
|
||||
* Source/NSInvocation.m:
|
||||
* Source/NSObject.m:
|
||||
* Source/NSPortCoder.m:
|
||||
* Source/NSUnarchiver.m:
|
||||
* Source/Additions/GSObjCRuntime.m:
|
||||
* Source/Additions/Unicode.m:
|
||||
Rename _fastMallocBuffer() to GSAutoreleasedBuffer() for clarity
|
||||
and consistency. Moved implementation from NSObject.m to
|
||||
GSObjCRuntime.m so this is available for use withing the Additions
|
||||
library when built standalone.
|
||||
|
||||
2003-02-19 Mirko Viviani <mirko.viviani@rccr.cremona.it>
|
||||
|
||||
* Headers/gnustep/base/NSArray.h: fixed declarations.
|
||||
|
|
|
@ -311,10 +311,10 @@ GSObjCVersion(Class this)
|
|||
|
||||
GS_EXPORT NSZone *GSObjCZone(NSObject *obj);
|
||||
|
||||
/*
|
||||
* Quickly return autoreleased data.
|
||||
/**
|
||||
* Quickly return autoreleased data storage area.
|
||||
*/
|
||||
void *_fastMallocBuffer(unsigned size);
|
||||
GS_EXPORT void *GSAutoreleasedBuffer(unsigned size);
|
||||
|
||||
/* Getting a system error message on a variety of systems */
|
||||
GS_EXPORT const char *GSLastErrorStr(long error_id);
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include <gnustep/base/preface.h>
|
||||
#ifndef NeXT_Foundation_LIBRARY
|
||||
#include <Foundation/NSArray.h>
|
||||
#include <Foundation/NSAutoreleasePool.h>
|
||||
#include <Foundation/NSDictionary.h>
|
||||
#include <Foundation/NSEnumerator.h>
|
||||
#include <Foundation/NSException.h>
|
||||
|
@ -1280,6 +1281,40 @@ GSObjCSetValue(NSObject *self, NSString *key, id val, SEL sel,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
GSAutoreleasedBuffer(unsigned size)
|
||||
{
|
||||
#if GS_WITH_GC
|
||||
return GC_malloc(size);
|
||||
#else
|
||||
#ifdef ALIGN
|
||||
#undef ALIGN
|
||||
#endif
|
||||
#define ALIGN __alignof__(double)
|
||||
|
||||
static Class nsobject_class = 0;
|
||||
static Class autorelease_class;
|
||||
static SEL autorelease_sel;
|
||||
static IMP autorelease_imp;
|
||||
static int offset;
|
||||
NSObject *o;
|
||||
|
||||
if (nsobject_class == 0)
|
||||
{
|
||||
nsobject_class = [NSObject class];
|
||||
offset = nsobject_class->instance_size % ALIGN;
|
||||
autorelease_class = [NSAutoreleasePool class];
|
||||
autorelease_sel = @selector(addObject:);
|
||||
autorelease_imp = [autorelease_class methodForSelector: autorelease_sel];
|
||||
}
|
||||
o = (NSObject*)NSAllocateObject(nsobject_class,
|
||||
size + offset, NSDefaultMallocZone());
|
||||
(*autorelease_imp)(autorelease_class, autorelease_sel, o);
|
||||
return ((void*)&o[1]) + offset;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Getting a system error message on a variety of systems */
|
||||
|
|
|
@ -1313,7 +1313,7 @@ tables:
|
|||
/*
|
||||
* Temporary string was requested ... make one.
|
||||
*/
|
||||
r = _fastMallocBuffer(bytes);
|
||||
r = GSAutoreleasedBuffer(bytes);
|
||||
memcpy(r, ptr, bytes);
|
||||
if (ptr != buf && (dst == 0 || ptr != *dst))
|
||||
{
|
||||
|
@ -1913,7 +1913,7 @@ tables:
|
|||
/*
|
||||
* Temporary string was requested ... make one.
|
||||
*/
|
||||
r = _fastMallocBuffer(bytes);
|
||||
r = GSAutoreleasedBuffer(bytes);
|
||||
memcpy(r, ptr, bytes);
|
||||
if (ptr != buf && (dst == 0 || ptr != *dst))
|
||||
{
|
||||
|
|
|
@ -170,8 +170,8 @@ static IMP gs_objc_msg_forward (SEL sel)
|
|||
where it becomes owned by the callback invocation, so we don't have to
|
||||
worry about freeing it */
|
||||
cframe = cifframe_from_info([sig methodInfo], [sig numberOfArguments], NULL);
|
||||
/* Autorelease the closure through fastMallocBuffer */
|
||||
cclosure = (ffi_closure *)_fastMallocBuffer(sizeof(ffi_closure));
|
||||
/* Autorelease the closure through GSAutoreleasedBuffer */
|
||||
cclosure = (ffi_closure *)GSAutoreleasedBuffer(sizeof(ffi_closure));
|
||||
if (cframe == NULL || cclosure == NULL)
|
||||
{
|
||||
[NSException raise: NSMallocException format: @"Allocating closure"];
|
||||
|
|
|
@ -543,7 +543,7 @@ UTF8String_c(ivars self)
|
|||
{
|
||||
unsigned i = self->_count;
|
||||
|
||||
r = (unsigned char*)_fastMallocBuffer(self->_count+1);
|
||||
r = (unsigned char*)GSAutoreleasedBuffer(self->_count+1);
|
||||
while (i-- > 0)
|
||||
{
|
||||
r[i] = self->_contents.c[i] & 0x7f;
|
||||
|
@ -777,7 +777,7 @@ cString_c(ivars self)
|
|||
}
|
||||
if (defEnc == intEnc)
|
||||
{
|
||||
r = (unsigned char*)_fastMallocBuffer(self->_count+1);
|
||||
r = (unsigned char*)GSAutoreleasedBuffer(self->_count+1);
|
||||
|
||||
if (self->_count > 0)
|
||||
{
|
||||
|
@ -1350,7 +1350,7 @@ lossyCString_c(ivars self)
|
|||
}
|
||||
if (defEnc == intEnc)
|
||||
{
|
||||
r = (char*)_fastMallocBuffer(self->_count+1);
|
||||
r = (char*)GSAutoreleasedBuffer(self->_count+1);
|
||||
|
||||
if (self->_count > 0)
|
||||
{
|
||||
|
|
|
@ -605,7 +605,7 @@ _arg_addr(NSInvocation *inv, int index)
|
|||
const char *t = _info[i].type;
|
||||
if (*t == _C_STRUCT_B || *t == _C_UNION_B || *t == _C_ARY_B)
|
||||
{
|
||||
*(void**)datum = _fastMallocBuffer(_info[i].size);
|
||||
*(void**)datum = GSAutoreleasedBuffer(_info[i].size);
|
||||
datum = *(void**)datum;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,12 +61,6 @@ extern BOOL __objc_responds_to(id, SEL);
|
|||
#include <gc.h>
|
||||
#include <gc_typed.h>
|
||||
|
||||
#else
|
||||
|
||||
@class _FastMallocBuffer;
|
||||
static Class fastMallocClass;
|
||||
static unsigned fastMallocOffset;
|
||||
|
||||
#endif
|
||||
|
||||
static Class NSConstantStringClass;
|
||||
|
@ -812,12 +806,10 @@ static BOOL double_release_check_enabled = NO;
|
|||
autorelease_sel = @selector(addObject:);
|
||||
autorelease_imp = [autorelease_class methodForSelector: autorelease_sel];
|
||||
#if GS_WITH_GC == 0
|
||||
fastMallocClass = [_FastMallocBuffer class];
|
||||
#if !defined(REFCNT_LOCAL)
|
||||
GSIMapInitWithZoneAndCapacity(&retain_counts,
|
||||
NSDefaultMallocZone(), 1024);
|
||||
#endif
|
||||
fastMallocOffset = fastMallocClass->instance_size % ALIGN;
|
||||
#endif
|
||||
NSConstantStringClass = [NSString constantStringClass];
|
||||
GSBuildStrings();
|
||||
|
@ -2114,37 +2106,6 @@ static BOOL double_release_check_enabled = NO;
|
|||
|
||||
@end
|
||||
|
||||
/*
|
||||
* Stuff for temporary memory management.
|
||||
*/
|
||||
#if GS_WITH_GC == 0
|
||||
@interface _FastMallocBuffer : NSObject
|
||||
@end
|
||||
|
||||
@implementation _FastMallocBuffer
|
||||
@end
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Function for giving us the fastest possible allocation of memory to
|
||||
* be used for temporary storage.
|
||||
*/
|
||||
void *
|
||||
_fastMallocBuffer(unsigned size)
|
||||
{
|
||||
#if GS_WITH_GC
|
||||
return GC_malloc(size);
|
||||
#else
|
||||
_FastMallocBuffer *o;
|
||||
|
||||
o = (_FastMallocBuffer*)NSAllocateObject(fastMallocClass,
|
||||
size + fastMallocOffset, NSDefaultMallocZone());
|
||||
(*autorelease_imp)(autorelease_class, autorelease_sel, o);
|
||||
return ((void*)&o[1])+fastMallocOffset;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Stuff for compatibility with 'Object' derived classes.
|
||||
*/
|
||||
|
|
|
@ -798,7 +798,7 @@ static IMP _xRefImp; /* Serialize a crossref. */
|
|||
* add it to the crossref map.
|
||||
*/
|
||||
size = objc_sizeof_type(++type);
|
||||
*(void**)address = _fastMallocBuffer(size);
|
||||
*(void**)address = GSAutoreleasedBuffer(size);
|
||||
GSIArrayAddItem(_ptrAry, (GSIArrayItem)*(void**)address);
|
||||
|
||||
/*
|
||||
|
|
|
@ -808,7 +808,7 @@ static Class NSDataMallocClass;
|
|||
* add it to the crossref map.
|
||||
*/
|
||||
size = objc_sizeof_type(++type);
|
||||
*(void**)address = _fastMallocBuffer(size);
|
||||
*(void**)address = GSAutoreleasedBuffer(size);
|
||||
GSIArrayAddItem(ptrMap, (GSIArrayItem)*(void**)address);
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue