mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 00:11:26 +00:00
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:
parent
68bda2e25c
commit
948cbdcbb3
28 changed files with 3985 additions and 730 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue