mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-21 04:32:03 +00:00
Remove nested functions on broken compilers
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@10848 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
0b92b19919
commit
6580f6f86d
8 changed files with 510 additions and 479 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2001-09-05 Adam Fedor <fedor@gnu.org>
|
||||||
|
|
||||||
|
* configure.in: Define BROKEN_NESTED_FUNCTIONS if compiler sucks.
|
||||||
|
* Source/NSArray.m (-sortedArrayUsingSelector:): Remove nested
|
||||||
|
function.
|
||||||
|
([NSMutableArray -sortUsingSelector:]): Likewise.
|
||||||
|
* Source/NSConnection.m (-forwardForProxy:selector:argFrame:):
|
||||||
|
Use external encode/decode functions if BROKEN_NESTED_FUNCTIONS.
|
||||||
|
(-forwardInvocation:forProxy:): Likewise.
|
||||||
|
(-_service_forwardForProxy:): Likewise.
|
||||||
|
* Source/mframe.m (mframe_build_return_opts): Remove and
|
||||||
|
consolidate nested functions.
|
||||||
|
(mframe_handle_return): Likewise.
|
||||||
|
|
||||||
2001-08-31 Adam Fedor <fedor@gnu.org>
|
2001-08-31 Adam Fedor <fedor@gnu.org>
|
||||||
|
|
||||||
* Resources/French/Localizable.strings: Update (from
|
* Resources/French/Localizable.strings: Update (from
|
||||||
|
|
|
@ -58,6 +58,9 @@
|
||||||
#undef HAVE_UINTMAX_T
|
#undef HAVE_UINTMAX_T
|
||||||
#undef HANDLE_LONG_LONG_MAX
|
#undef HANDLE_LONG_LONG_MAX
|
||||||
|
|
||||||
|
/* Define if nested functions are broken on this compiler */
|
||||||
|
#undef BROKEN_NESTED_FUNCTIONS
|
||||||
|
|
||||||
/* The number of bytes in a double. */
|
/* The number of bytes in a double. */
|
||||||
#undef SIZEOF_DOUBLE
|
#undef SIZEOF_DOUBLE
|
||||||
|
|
||||||
|
@ -181,9 +184,6 @@
|
||||||
/* Define if you have the <libc.h> header file. */
|
/* Define if you have the <libc.h> header file. */
|
||||||
#undef HAVE_LIBC_H
|
#undef HAVE_LIBC_H
|
||||||
|
|
||||||
/* Define if you have the <libguile.h> header file. */
|
|
||||||
#undef HAVE_LIBGUILE_H
|
|
||||||
|
|
||||||
/* Define if you have the <limits.h> header file. */
|
/* Define if you have the <limits.h> header file. */
|
||||||
#undef HAVE_LIMITS_H
|
#undef HAVE_LIMITS_H
|
||||||
|
|
||||||
|
@ -208,6 +208,9 @@
|
||||||
/* Define if you have the <openssl/ssl.h> header file. */
|
/* Define if you have the <openssl/ssl.h> header file. */
|
||||||
#undef HAVE_OPENSSL_SSL_H
|
#undef HAVE_OPENSSL_SSL_H
|
||||||
|
|
||||||
|
/* Define if you have the <pthread.h> header file. */
|
||||||
|
#undef HAVE_PTHREAD_H
|
||||||
|
|
||||||
/* Define if you have the <pwd.h> header file. */
|
/* Define if you have the <pwd.h> header file. */
|
||||||
#undef HAVE_PWD_H
|
#undef HAVE_PWD_H
|
||||||
|
|
||||||
|
@ -283,6 +286,9 @@
|
||||||
/* Define if you have the <windows.h> header file. */
|
/* Define if you have the <windows.h> header file. */
|
||||||
#undef HAVE_WINDOWS_H
|
#undef HAVE_WINDOWS_H
|
||||||
|
|
||||||
|
/* Define if you have the giconv library (-lgiconv). */
|
||||||
|
#undef HAVE_LIBGICONV
|
||||||
|
|
||||||
/* Define if you have the iconv library (-liconv). */
|
/* Define if you have the iconv library (-liconv). */
|
||||||
#undef HAVE_LIBICONV
|
#undef HAVE_LIBICONV
|
||||||
|
|
||||||
|
|
|
@ -595,14 +595,14 @@ static SEL rlSel;
|
||||||
[self makeObjectsPerformSelector: aSelector withObject: argument];
|
[self makeObjectsPerformSelector: aSelector withObject: argument];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int compare(id elem1, id elem2, void* context)
|
||||||
|
{
|
||||||
|
return (int)[elem1 performSelector: (SEL)context withObject: elem2];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSArray*) sortedArrayUsingSelector: (SEL)comparator
|
- (NSArray*) sortedArrayUsingSelector: (SEL)comparator
|
||||||
{
|
{
|
||||||
int compare(id elem1, id elem2, void* context)
|
return [self sortedArrayUsingFunction: compare context: (void *)comparator];
|
||||||
{
|
|
||||||
return (int)[elem1 performSelector: comparator withObject: elem2];
|
|
||||||
}
|
|
||||||
|
|
||||||
return [self sortedArrayUsingFunction: compare context: NULL];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSArray*) sortedArrayUsingFunction: (int(*)(id,id,void*))comparator
|
- (NSArray*) sortedArrayUsingFunction: (int(*)(id,id,void*))comparator
|
||||||
|
@ -1293,12 +1293,7 @@ static NSString *indentStrings[] = {
|
||||||
|
|
||||||
- (void) sortUsingSelector: (SEL)comparator
|
- (void) sortUsingSelector: (SEL)comparator
|
||||||
{
|
{
|
||||||
int compare(id elem1, id elem2, void* context)
|
[self sortUsingFunction: compare context: (void *)comparator];
|
||||||
{
|
|
||||||
return (int)[elem1 performSelector: comparator withObject: elem2];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self sortUsingFunction: compare context: NULL];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) sortUsingFunction: (int(*)(id,id,void*))compare
|
- (void) sortUsingFunction: (int(*)(id,id,void*))compare
|
||||||
|
|
|
@ -1411,6 +1411,93 @@ static BOOL multi_threaded = NO;
|
||||||
RELEASE(arp);
|
RELEASE(arp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BROKEN_NESTED_FUNCTIONS
|
||||||
|
typedef struct _NSConnection_t {
|
||||||
|
@defs(NSConnection)
|
||||||
|
} NSConnection_t;
|
||||||
|
static NSConnection_t *c_self_t;
|
||||||
|
static NSPortCoder *op = nil;
|
||||||
|
static NSPortCoder *ip = nil;
|
||||||
|
static NSConnection *c_self;
|
||||||
|
static BOOL is_exception = NO;
|
||||||
|
static BOOL second_decode = NO;
|
||||||
|
static int seq_num;
|
||||||
|
|
||||||
|
void encoder (int argnum, void *datum, const char *type, int flags)
|
||||||
|
{
|
||||||
|
#define ENCODED_ARGNAME @"argument value"
|
||||||
|
switch (*type)
|
||||||
|
{
|
||||||
|
case _C_ID:
|
||||||
|
if (flags & _F_BYCOPY)
|
||||||
|
[op encodeBycopyObject: *(id*)datum];
|
||||||
|
#ifdef _F_BYREF
|
||||||
|
else if (flags & _F_BYREF)
|
||||||
|
[op encodeByrefObject: *(id*)datum];
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
[op encodeObject: *(id*)datum];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
[op encodeValueOfObjCType: type at: datum];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void decoder(int argnum, void *datum, const char *type, int flags)
|
||||||
|
{
|
||||||
|
c_self_t = (NSConnection_t *)c_self;
|
||||||
|
if (type == 0)
|
||||||
|
{
|
||||||
|
if (ip != nil)
|
||||||
|
{
|
||||||
|
[c_self _doneInRmc: ip];
|
||||||
|
/* this must be here to avoid trashing alloca'ed retframe */
|
||||||
|
ip = (id)-1;
|
||||||
|
c_self_t->_repInCount++; /* received a reply */
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* If we didn't get the reply packet yet, get it now. */
|
||||||
|
if (ip == nil)
|
||||||
|
{
|
||||||
|
if (c_self_t->_isValid == NO)
|
||||||
|
{
|
||||||
|
[NSException raise: NSGenericException
|
||||||
|
format: @"connection waiting for request was shut down"];
|
||||||
|
}
|
||||||
|
ip = [c_self _getReplyRmc: seq_num];
|
||||||
|
/*
|
||||||
|
* Find out if the server is returning an exception instead
|
||||||
|
* of the return values.
|
||||||
|
*/
|
||||||
|
[ip decodeValueOfObjCType: @encode(BOOL) at: &is_exception];
|
||||||
|
if (is_exception == YES)
|
||||||
|
{
|
||||||
|
/* Decode the exception object, and raise it. */
|
||||||
|
id exc;
|
||||||
|
[ip decodeValueOfObjCType: @encode(id) at: &exc];
|
||||||
|
[c_self _doneInRmc: ip];
|
||||||
|
ip = (id)-1;
|
||||||
|
/* xxx Is there anything else to clean up in
|
||||||
|
dissect_method_return()? */
|
||||||
|
[exc raise];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[ip decodeValueOfObjCType: type at: datum];
|
||||||
|
/* -decodeValueOfObjCType:at: malloc's new memory
|
||||||
|
for pointers. We need to make sure it gets freed eventually
|
||||||
|
so we don't have a memory leak. Request here that it be
|
||||||
|
autorelease'ed. Also autorelease created objects. */
|
||||||
|
if (second_decode == NO)
|
||||||
|
{
|
||||||
|
if ((*type == _C_CHARPTR || *type == _C_PTR) && *(void**)datum != 0)
|
||||||
|
[NSData dataWithBytesNoCopy: *(void**)datum length: 1];
|
||||||
|
}
|
||||||
|
else if (*type == _C_ID)
|
||||||
|
AUTORELEASE(*(id*)datum);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NSDistantObject's -forward: : method calls this to send the message
|
* NSDistantObject's -forward: : method calls this to send the message
|
||||||
* over the wire.
|
* over the wire.
|
||||||
|
@ -1419,13 +1506,16 @@ static BOOL multi_threaded = NO;
|
||||||
selector: (SEL)sel
|
selector: (SEL)sel
|
||||||
argFrame: (arglist_t)argframe
|
argFrame: (arglist_t)argframe
|
||||||
{
|
{
|
||||||
|
#ifndef BROKEN_NESTED_FUNCTIONS
|
||||||
NSPortCoder *op;
|
NSPortCoder *op;
|
||||||
|
int seq_num;
|
||||||
|
#endif
|
||||||
BOOL outParams;
|
BOOL outParams;
|
||||||
BOOL needsResponse;
|
BOOL needsResponse;
|
||||||
const char *type;
|
const char *type;
|
||||||
int seq_num;
|
|
||||||
retval_t retframe;
|
retval_t retframe;
|
||||||
|
|
||||||
|
#ifndef BROKEN_NESTED_FUNCTIONS
|
||||||
/* The callback for encoding the args of the method call. */
|
/* The callback for encoding the args of the method call. */
|
||||||
void encoder (int argnum, void *datum, const char *type, int flags)
|
void encoder (int argnum, void *datum, const char *type, int flags)
|
||||||
{
|
{
|
||||||
|
@ -1446,6 +1536,7 @@ static BOOL multi_threaded = NO;
|
||||||
[op encodeValueOfObjCType: type at: datum];
|
[op encodeValueOfObjCType: type at: datum];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Encode the method on an RMC, and send it. */
|
/* Encode the method on an RMC, and send it. */
|
||||||
|
|
||||||
|
@ -1546,6 +1637,7 @@ static BOOL multi_threaded = NO;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifndef BROKEN_NESTED_FUNCTIONS
|
||||||
NSPortCoder *ip = nil;
|
NSPortCoder *ip = nil;
|
||||||
BOOL is_exception = NO;
|
BOOL is_exception = NO;
|
||||||
|
|
||||||
|
@ -1598,6 +1690,11 @@ static BOOL multi_threaded = NO;
|
||||||
else if (*type == _C_ID)
|
else if (*type == _C_ID)
|
||||||
AUTORELEASE(*(id*)datum);
|
AUTORELEASE(*(id*)datum);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
c_self = self;
|
||||||
|
second_decode = NO;
|
||||||
|
#endif /* not BROKEN_NESTED_FUNCTIONS */
|
||||||
|
|
||||||
|
|
||||||
retframe = mframe_build_return (argframe, type, outParams, decoder);
|
retframe = mframe_build_return (argframe, type, outParams, decoder);
|
||||||
/* Make sure we processed all arguments, and dismissed the IP.
|
/* Make sure we processed all arguments, and dismissed the IP.
|
||||||
|
@ -1704,6 +1801,7 @@ static BOOL multi_threaded = NO;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifndef BROKEN_NESTED_FUNCTIONS
|
||||||
NSPortCoder *ip = nil;
|
NSPortCoder *ip = nil;
|
||||||
BOOL is_exception = NO;
|
BOOL is_exception = NO;
|
||||||
|
|
||||||
|
@ -1750,6 +1848,10 @@ static BOOL multi_threaded = NO;
|
||||||
if (*type == _C_ID)
|
if (*type == _C_ID)
|
||||||
AUTORELEASE(*(id*)datum);
|
AUTORELEASE(*(id*)datum);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
c_self = self;
|
||||||
|
second_decode = YES;
|
||||||
|
#endif /* not BROKEN_NESTED_FUNCTIONS */
|
||||||
|
|
||||||
#ifdef USE_FFCALL
|
#ifdef USE_FFCALL
|
||||||
callframe_build_return (inv, type, outParams, decoder);
|
callframe_build_return (inv, type, outParams, decoder);
|
||||||
|
@ -2002,10 +2104,77 @@ static BOOL multi_threaded = NO;
|
||||||
debug_connection = val;
|
debug_connection = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BROKEN_NESTED_FUNCTIONS
|
||||||
|
#define decoder service_decoder
|
||||||
|
#define encoder service_encoder
|
||||||
|
static id op;
|
||||||
|
static int reply_sno;
|
||||||
|
static NSConnection *c_self;
|
||||||
|
static NSConnection_t *c_self_t;
|
||||||
|
static NSPortCoder *c_aRmc;
|
||||||
|
void service_decoder (int argnum, void *datum, const char *type)
|
||||||
|
{
|
||||||
|
/* We need this "dismiss" to happen here and not later so that Coder
|
||||||
|
"-awake..." methods will get sent before the __builtin_apply! */
|
||||||
|
if (argnum == -1 && datum == 0 && type == 0)
|
||||||
|
{
|
||||||
|
[c_self _doneInRmc: c_aRmc];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[c_aRmc decodeValueOfObjCType: type at: datum];
|
||||||
|
#ifdef USE_FFCALL
|
||||||
|
if (*type == _C_ID)
|
||||||
|
#else
|
||||||
|
/* -decodeValueOfObjCType: at: malloc's new memory
|
||||||
|
for char*'s. We need to make sure it gets freed eventually
|
||||||
|
so we don't have a memory leak. Request here that it be
|
||||||
|
autorelease'ed. Also autorelease created objects. */
|
||||||
|
if ((*type == _C_CHARPTR || *type == _C_PTR) && *(void**)datum != 0)
|
||||||
|
[NSData dataWithBytesNoCopy: *(void**)datum length: 1];
|
||||||
|
else if (*type == _C_ID)
|
||||||
|
#endif
|
||||||
|
AUTORELEASE(*(id*)datum);
|
||||||
|
}
|
||||||
|
|
||||||
|
void service_encoder (int argnum, void *datum, const char *type, int flags)
|
||||||
|
{
|
||||||
|
c_self_t = (NSConnection_t *)c_self;
|
||||||
|
if (op == nil)
|
||||||
|
{
|
||||||
|
BOOL is_exception = NO;
|
||||||
|
/* It is possible that our connection died while the method was
|
||||||
|
being called - in this case we mustn't try to send the result
|
||||||
|
back to the remote application! */
|
||||||
|
if (c_self_t->_isValid == NO)
|
||||||
|
return;
|
||||||
|
op = [c_self _makeOutRmc: reply_sno generate: 0 reply: NO];
|
||||||
|
[op encodeValueOfObjCType: @encode(BOOL) at: &is_exception];
|
||||||
|
}
|
||||||
|
switch (*type)
|
||||||
|
{
|
||||||
|
case _C_ID:
|
||||||
|
if (flags & _F_BYCOPY)
|
||||||
|
[op encodeBycopyObject: *(id*)datum];
|
||||||
|
#ifdef _F_BYREF
|
||||||
|
else if (flags & _F_BYREF)
|
||||||
|
[op encodeByrefObject: *(id*)datum];
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
[op encodeObject: *(id*)datum];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
[op encodeValueOfObjCType: type at: datum];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* NSConnection calls this to service the incoming method request. */
|
/* NSConnection calls this to service the incoming method request. */
|
||||||
- (void) _service_forwardForProxy: (NSPortCoder*)aRmc
|
- (void) _service_forwardForProxy: (NSPortCoder*)aRmc
|
||||||
{
|
{
|
||||||
char *forward_type = 0;
|
char *forward_type = 0;
|
||||||
|
#ifndef BROKEN_NESTED_FUNCTIONS
|
||||||
id op = nil;
|
id op = nil;
|
||||||
int reply_sno;
|
int reply_sno;
|
||||||
|
|
||||||
|
@ -2063,6 +2232,10 @@ static BOOL multi_threaded = NO;
|
||||||
[op encodeValueOfObjCType: type at: datum];
|
[op encodeValueOfObjCType: type at: datum];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
c_self = self;
|
||||||
|
c_aRmc = aRmc;
|
||||||
|
#endif /* not BROKEN_NESTED_FUNCTIONS */
|
||||||
|
|
||||||
/* Make sure don't let exceptions caused by servicing the client's
|
/* Make sure don't let exceptions caused by servicing the client's
|
||||||
request cause us to crash. */
|
request cause us to crash. */
|
||||||
|
|
152
Source/mframe.m
152
Source/mframe.m
|
@ -1249,6 +1249,57 @@ mframe_do_call (const char *encoded_types,
|
||||||
mframe_do_call_opts(encoded_types, decoder, encoder, NO);
|
mframe_do_call_opts(encoded_types, decoder, encoder, NO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For returning strucutres etc */
|
||||||
|
typedef struct { id many[8];} __big;
|
||||||
|
static __big return_block (void* data)
|
||||||
|
{
|
||||||
|
return *(__big*)data;
|
||||||
|
}
|
||||||
|
/* For returning a char (or unsigned char) */
|
||||||
|
static char return_char (char data)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
/* For returning a double */
|
||||||
|
static double return_double (double data)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
/* For returning a float */
|
||||||
|
static float return_float (float data)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
/* For returning a short (or unsigned short) */
|
||||||
|
static short return_short (short data)
|
||||||
|
{
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
static retval_t apply_block(void* data)
|
||||||
|
{
|
||||||
|
void* args = __builtin_apply_args();
|
||||||
|
return __builtin_apply((apply_t)return_block, args, sizeof(void*));
|
||||||
|
}
|
||||||
|
static retval_t apply_char(char data)
|
||||||
|
{
|
||||||
|
void* args = __builtin_apply_args();
|
||||||
|
return __builtin_apply((apply_t)return_char, args, sizeof(void*));
|
||||||
|
}
|
||||||
|
static retval_t apply_float(float data)
|
||||||
|
{
|
||||||
|
void* args = __builtin_apply_args();
|
||||||
|
return __builtin_apply((apply_t)return_float, args, sizeof(float));
|
||||||
|
}
|
||||||
|
static retval_t apply_double(double data)
|
||||||
|
{
|
||||||
|
void* args = __builtin_apply_args();
|
||||||
|
return __builtin_apply((apply_t)return_double, args, sizeof(double));
|
||||||
|
}
|
||||||
|
static retval_t apply_short(short data)
|
||||||
|
{
|
||||||
|
void* args = __builtin_apply_args();
|
||||||
|
return __builtin_apply((apply_t)return_short, args, sizeof(void*));
|
||||||
|
}
|
||||||
|
|
||||||
/* mframe_build_return()
|
/* mframe_build_return()
|
||||||
|
|
||||||
|
@ -1287,57 +1338,6 @@ mframe_build_return_opts (arglist_t argframe,
|
||||||
/* A pointer into the ARGFRAME; points at individual arguments. */
|
/* A pointer into the ARGFRAME; points at individual arguments. */
|
||||||
void *datum;
|
void *datum;
|
||||||
const char *rettype;
|
const char *rettype;
|
||||||
/* For returning strucutres etc */
|
|
||||||
typedef struct { id many[8];} __big;
|
|
||||||
__big return_block (void* data)
|
|
||||||
{
|
|
||||||
return *(__big*)data;
|
|
||||||
}
|
|
||||||
/* For returning a char (or unsigned char) */
|
|
||||||
char return_char (char data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
/* For returning a double */
|
|
||||||
double return_double (double data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
/* For returning a float */
|
|
||||||
float return_float (float data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
/* For returning a short (or unsigned short) */
|
|
||||||
short return_short (short data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
retval_t apply_block(void* data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_block, args, sizeof(void*));
|
|
||||||
}
|
|
||||||
retval_t apply_char(char data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_char, args, sizeof(void*));
|
|
||||||
}
|
|
||||||
retval_t apply_float(float data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_float, args, sizeof(float));
|
|
||||||
}
|
|
||||||
retval_t apply_double(double data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_double, args, sizeof(double));
|
|
||||||
}
|
|
||||||
retval_t apply_short(short data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_short, args, sizeof(void*));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*type == _C_STRUCT_B || *type == _C_UNION_B || *type == _C_ARY_B)
|
if (*type == _C_STRUCT_B || *type == _C_UNION_B || *type == _C_ARY_B)
|
||||||
{
|
{
|
||||||
|
@ -1763,56 +1763,6 @@ void*
|
||||||
mframe_handle_return(const char* type, void* retval, arglist_t argframe)
|
mframe_handle_return(const char* type, void* retval, arglist_t argframe)
|
||||||
{
|
{
|
||||||
retval_t retframe;
|
retval_t retframe;
|
||||||
typedef struct { id many[8];} __big;
|
|
||||||
__big return_block (void* data)
|
|
||||||
{
|
|
||||||
return *(__big*)data;
|
|
||||||
}
|
|
||||||
/* For returning a char (or unsigned char) */
|
|
||||||
char return_char (char data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
/* For returning a double */
|
|
||||||
double return_double (double data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
/* For returning a float */
|
|
||||||
float return_float (float data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
/* For returning a short (or unsigned short) */
|
|
||||||
short return_short (short data)
|
|
||||||
{
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
retval_t apply_block(void* data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_block, args, sizeof(void*));
|
|
||||||
}
|
|
||||||
retval_t apply_char(char data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_char, args, sizeof(void*));
|
|
||||||
}
|
|
||||||
retval_t apply_float(float data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_float, args, sizeof(float));
|
|
||||||
}
|
|
||||||
retval_t apply_double(double data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_double, args, sizeof(double));
|
|
||||||
}
|
|
||||||
retval_t apply_short(short data)
|
|
||||||
{
|
|
||||||
void* args = __builtin_apply_args();
|
|
||||||
return __builtin_apply((apply_t)return_short, args, sizeof(void*));
|
|
||||||
}
|
|
||||||
|
|
||||||
retframe = alloca(MFRAME_RESULT_SIZE);
|
retframe = alloca(MFRAME_RESULT_SIZE);
|
||||||
|
|
||||||
|
|
111
acconfig.h
111
acconfig.h
|
@ -15,115 +15,9 @@
|
||||||
/* Define if your system needs to have short/int word aligned */
|
/* Define if your system needs to have short/int word aligned */
|
||||||
#undef NEED_WORD_ALIGNMENT
|
#undef NEED_WORD_ALIGNMENT
|
||||||
|
|
||||||
/* The number of bytes in a int. */
|
|
||||||
#undef SIZEOF_INT
|
|
||||||
|
|
||||||
/* Define if you have the getcwd function. */
|
|
||||||
#undef HAVE_GETCWD
|
|
||||||
|
|
||||||
/* Define if you have the inet_aton function. */
|
|
||||||
#undef HAVE_INET_ATON
|
|
||||||
|
|
||||||
/* Define if you have the killpg function. */
|
|
||||||
#undef HAVE_KILLPG
|
|
||||||
|
|
||||||
/* Define if you have the setpgrp function. */
|
|
||||||
#undef HAVE_SETPGRP
|
|
||||||
|
|
||||||
/* Define if you have the setpgid function. */
|
|
||||||
#undef HAVE_SETPGID
|
|
||||||
|
|
||||||
/* Define if you have the mmap function. */
|
|
||||||
#undef HAVE_MMAP
|
|
||||||
|
|
||||||
/* Define if you have the register_printf_function function. */
|
/* Define if you have the register_printf_function function. */
|
||||||
#undef HAVE_REGISTER_PRINTF_FUNCTION
|
#undef HAVE_REGISTER_PRINTF_FUNCTION
|
||||||
|
|
||||||
/* Define if you have the shmctl function. */
|
|
||||||
#undef HAVE_SHMCTL
|
|
||||||
|
|
||||||
/* Define if you have the mkstemp function. */
|
|
||||||
#undef HAVE_MKSTEMP
|
|
||||||
|
|
||||||
/* Define if you have the statvfs function. */
|
|
||||||
#undef HAVE_STATVFS
|
|
||||||
|
|
||||||
/* Define if you have the strerror function. */
|
|
||||||
#undef HAVE_STRERROR
|
|
||||||
|
|
||||||
/* Define if you have the times function. */
|
|
||||||
#undef HAVE_TIMES
|
|
||||||
|
|
||||||
/* Define if you have the usleep function. */
|
|
||||||
#undef HAVE_USLEEP
|
|
||||||
|
|
||||||
/* Define if you have the valloc function. */
|
|
||||||
#undef HAVE_VALLOC
|
|
||||||
|
|
||||||
/* Define if you have the vsprintf function. */
|
|
||||||
#undef HAVE_VSPRINTF
|
|
||||||
|
|
||||||
/* Define if you have the <dirent.h> header file. */
|
|
||||||
#undef HAVE_DIRENT_H
|
|
||||||
|
|
||||||
/* Define if you have the <memory.h> header file. */
|
|
||||||
#undef HAVE_MEMORY_H
|
|
||||||
|
|
||||||
/* Define if you have the <ndir.h> header file. */
|
|
||||||
#undef HAVE_NDIR_H
|
|
||||||
|
|
||||||
/* Define if you have the <netinet/in.h> header file. */
|
|
||||||
#undef HAVE_NETINET_IN_H
|
|
||||||
|
|
||||||
/* Define if you have the <pwd.h> header file. */
|
|
||||||
#undef HAVE_PWD_H
|
|
||||||
|
|
||||||
/* Define if you have the <getgrent.h> header file. */
|
|
||||||
#undef HAVE_GRP_H
|
|
||||||
|
|
||||||
/* Define if you have the <string.h> header file. */
|
|
||||||
#undef HAVE_STRING_H
|
|
||||||
|
|
||||||
/* Define if you have the <syslog.h> header file. */
|
|
||||||
#undef HAVE_SYSLOG_H
|
|
||||||
#undef HAVE_SYSLOG
|
|
||||||
|
|
||||||
/* Define if you have the <sys/dir.h> header file. */
|
|
||||||
#undef HAVE_SYS_DIR_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/ndir.h> header file. */
|
|
||||||
#undef HAVE_SYS_NDIR_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/resource.h> header file. */
|
|
||||||
#undef HAVE_SYS_RESOURCE_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/rusage.h> header file. */
|
|
||||||
#undef HAVE_SYS_RUSAGE_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/socket.h> header file. */
|
|
||||||
#undef HAVE_SYS_SOCKET_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/stat.h> header file. */
|
|
||||||
#undef HAVE_SYS_STAT_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/statfs.h> header file. */
|
|
||||||
#undef HAVE_SYS_STATFS_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/statvfs.h> header file. */
|
|
||||||
#undef HAVE_SYS_STATVFS_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/time.h> header file. */
|
|
||||||
#undef HAVE_SYS_TIME_H
|
|
||||||
|
|
||||||
/* Define if you have the <sys/vfs.h> header file. */
|
|
||||||
#undef HAVE_SYS_VFS_H
|
|
||||||
|
|
||||||
/* Define if you have the <ucbinclude/sys/resource.h> header file. */
|
|
||||||
#undef HAVE_UCBINCLUDE_SYS_RESOURCE_H
|
|
||||||
|
|
||||||
/* Define if you have the <values.h> header file. */
|
|
||||||
#undef HAVE_VALUES_H
|
|
||||||
|
|
||||||
/* Define if your Obj-C compiler calls +load methods before main */
|
/* Define if your Obj-C compiler calls +load methods before main */
|
||||||
#undef HAVE_LOAD_METHOD
|
#undef HAVE_LOAD_METHOD
|
||||||
|
|
||||||
|
@ -149,5 +43,6 @@
|
||||||
#undef HAVE_UINTMAX_T
|
#undef HAVE_UINTMAX_T
|
||||||
#undef HANDLE_LONG_LONG_MAX
|
#undef HANDLE_LONG_LONG_MAX
|
||||||
|
|
||||||
/* Define if wchar.h header available */
|
/* Define if nested functions are broken on this compiler */
|
||||||
#undef HAVE_WCHAR_H
|
#undef BROKEN_NESTED_FUNCTIONS
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,8 @@ AC_EXEEXT
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
freebsd*) CPPFLAGS="$CPPFLAGS -I/usr/local/include"
|
freebsd*) CPPFLAGS="$CPPFLAGS -I/usr/local/include"
|
||||||
LIBS="$LIBS -L/usr/local/lib";;
|
LIBS="$LIBS -L/usr/local/lib";;
|
||||||
|
darwin1.3*) CPPFLAGS="$CPPFLAGS -force_cpusubtype_ALL";;
|
||||||
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#----------------------------------------------------------------
|
#----------------------------------------------------------------
|
||||||
|
@ -67,6 +69,7 @@ AC_TRY_RUN([#include "$srcdir/config/config.nested.c"],
|
||||||
gcc_nested=1, gcc_nested=0, gcc_nested=1)
|
gcc_nested=1, gcc_nested=0, gcc_nested=1)
|
||||||
if test $gcc_nested = 0; then
|
if test $gcc_nested = 0; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
|
AC_DEFINE(BROKEN_NESTED_FUNCTIONS)
|
||||||
echo
|
echo
|
||||||
echo "The GCC 'nested functions' feature does not seem to be working on"
|
echo "The GCC 'nested functions' feature does not seem to be working on"
|
||||||
echo "this machine. "
|
echo "this machine. "
|
||||||
|
@ -496,10 +499,6 @@ AC_CHECK_FUNCS(syslog)
|
||||||
# Check for pthread.h (only when building on Darwin machines)
|
# Check for pthread.h (only when building on Darwin machines)
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
AC_CHECK_HEADERS(pthread.h)
|
AC_CHECK_HEADERS(pthread.h)
|
||||||
if test $ac_cv_header_pthread_h = yes ; then
|
|
||||||
HAVE_PTHREAD_H=yes
|
|
||||||
AC_DEFINE(HAVE_PTHREAD_H)
|
|
||||||
fi
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
# This function needed by StdioStream.m
|
# This function needed by StdioStream.m
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue