Add FFI interface to NSInvocation and NSConnection

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@8286 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fedor 2000-12-08 19:06:00 +00:00
parent 68bda2e25c
commit 948cbdcbb3
28 changed files with 3985 additions and 730 deletions

View file

@ -88,7 +88,7 @@ int con_data (id prx)
printf(send, var); \
varr = [prx msg1 var]; \
printf(got, varr); \
if (varr != var+ADD_CONST) \
if (varr != (var+ADD_CONST)) \
printf(" *** ERROR ***\n"); \
else \
printf(" ...ok\n"); \
@ -96,20 +96,37 @@ int con_data (id prx)
printf(sendp, varr); \
[prx msg2 &varr]; \
printf(got, varr); \
if (varr != var+ADD_CONST) \
if (varr != (var+ADD_CONST)) \
printf(" *** ERROR ***\n"); \
else \
printf(" ...ok\n");
TEST_CALL("UChar:\n", " sending %x", " got %x", " sending ptr to %x",
#define TEST_FCALL(test, send, got, sendp, var, varr, val, msg1, msg2) \
printf(test); \
var = val; \
printf(send, var); \
varr = [prx msg1 var]; \
printf(got, varr); \
if (varr - (var+ADD_CONST) > 1e-3) \
printf(" *** ERROR ***\n"); \
else \
printf(" ...ok\n"); \
varr = var = val+1; \
printf(sendp, varr); \
[prx msg2 &varr]; \
printf(got, varr); \
if (varr - (var+ADD_CONST) > 1e-3) \
printf(" *** ERROR ***\n"); \
else \
printf(" ...ok\n");
TEST_CALL("UChar:\n", " sending %d", " got %d", " sending ptr to %d",
uc, ucr, 23, sendUChar:, getUChar:)
printf(" (should get error returning ptr)\n");
TEST_CALL("Char:\n", " sending %x", " got %x", " sending ptr to %x",
TEST_CALL("Char:\n", " sending %d", " got %d", " sending ptr to %d",
c, cr, 23, sendChar:, getChar:)
printf(" (should get error returning ptr)\n");
TEST_CALL("Short:\n", " sending %d", " got %d", " sending ptr to %d",
TEST_CALL("Short:\n", " sending %hd", " got %hd", " sending ptr to %hd",
s, sr, 23, sendShort:, getShort:)
TEST_CALL("Int:\n", " sending %d", " got %d", " sending ptr to %d",
@ -118,10 +135,10 @@ int con_data (id prx)
TEST_CALL("Long:\n", " sending %ld", " got %ld", " sending ptr to %ld",
l, lr, 23, sendLong:, getLong:)
TEST_CALL("Float:\n", " sending %f", " got %f", " sending ptr to %f",
TEST_FCALL("Float:\n", " sending %f", " got %f", " sending ptr to %f",
flt, fltr, 23.2, sendFloat:, getFloat:)
TEST_CALL("Double:\n", " sending %g", " got %g", " sending ptr to %g",
TEST_FCALL("Double:\n", " sending %g", " got %g", " sending ptr to %g",
dbl, dblr, 23.2, sendDouble:, getDouble:)
flt = 2.718;

View file

@ -74,7 +74,7 @@
- (BOOL) sendBoolean: (BOOL)b
{
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), b, !b);
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), (int)b, (int)(!b));
fflush(stdout);
return !b;
}
@ -82,16 +82,18 @@
/* This causes problems, because the runtime encodes this as "*", a string! */
- (void) getBoolean: (BOOL*)bp
{
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), *bp, !(*bp));
BOOL rbp = !(*bp);
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd),
(int)*bp, (int)rbp);
fflush(stdout);
*bp = !(*bp);
*bp = rbp;
}
/* This causes problems, because the runtime encodes this as "*", a string! */
- (unsigned char) sendUChar: (unsigned char)num
{
unsigned char rnum = num + ADD_CONST;
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), num, rnum);
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd),
(int)num, (int)rnum);
fflush(stdout);
return rnum;
}
@ -100,7 +102,8 @@
- (void) getUChar: (unsigned char *)num
{
unsigned char rnum = *num + ADD_CONST;
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), *num, rnum);
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd),
(int)(*num), (int)rnum);
*num = rnum;
fflush(stdout);
}
@ -108,7 +111,8 @@
- (char) sendChar: (char)num
{
char rnum = num + ADD_CONST;
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), num, rnum);
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd),
(int)num, (int)rnum);
fflush(stdout);
return rnum;
}
@ -116,7 +120,8 @@
- (void) getChar: (char *)num
{
char rnum = *num + ADD_CONST;
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), *num, rnum);
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd),
(int)(*num), (int)rnum);
*num = rnum;
fflush(stdout);
}
@ -124,7 +129,8 @@
- (short) sendShort: (short)num
{
short rnum = num + ADD_CONST;
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), num, rnum);
printf("(%s) got %hd, returning %hd\n", sel_get_name(_cmd),
num, rnum);
fflush(stdout);
return rnum;
}
@ -132,7 +138,8 @@
- (void) getShort: (short *)num
{
short rnum = *num + ADD_CONST;
printf("(%s) got %d, returning %d\n", sel_get_name(_cmd), *num, rnum);
printf("(%s) got %hd, returning %hd\n", sel_get_name(_cmd),
(*num), rnum);
*num = rnum;
fflush(stdout);
}