mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
check archiving
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@3142 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
4050627c7b
commit
5e80346763
1 changed files with 250 additions and 237 deletions
|
@ -1,7 +1,8 @@
|
||||||
#include <Foundation/NSMethodSignature.h>
|
#include <Foundation/NSMethodSignature.h>
|
||||||
#include <Foundation/NSInvocation.h>
|
#include <Foundation/NSInvocation.h>
|
||||||
#include <Foundation/NSString.h>
|
#include <Foundation/NSString.h>
|
||||||
#include <Foundation/NSAutoreleasePool.h>
|
#include <Foundation/NSAutoreleasePool.h>
|
||||||
|
#include <Foundation/NSArchiver.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char c;
|
char c;
|
||||||
|
@ -43,104 +44,104 @@ typedef struct {
|
||||||
@implementation Target
|
@implementation Target
|
||||||
- (char) loopChar: (char)v
|
- (char) loopChar: (char)v
|
||||||
{
|
{
|
||||||
return v+1;
|
return v+1;
|
||||||
}
|
}
|
||||||
- (double) loopDouble: (double)v
|
- (double) loopDouble: (double)v
|
||||||
{
|
{
|
||||||
return v+1.0;
|
return v+1.0;
|
||||||
}
|
}
|
||||||
- (float) loopFloat: (float)v
|
- (float) loopFloat: (float)v
|
||||||
{
|
{
|
||||||
return v+1.0;
|
return v+1.0;
|
||||||
}
|
}
|
||||||
- (int) loopInt: (int)v
|
- (int) loopInt: (int)v
|
||||||
{
|
{
|
||||||
return v+1;
|
return v+1;
|
||||||
}
|
}
|
||||||
- (large) loopLarge: (large)v
|
- (large) loopLarge: (large)v
|
||||||
{
|
{
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
- (long) loopLong: (long)v
|
- (long) loopLong: (long)v
|
||||||
{
|
{
|
||||||
return v+1;
|
return v+1;
|
||||||
}
|
}
|
||||||
- (large) loopLargePtr: (large*)v
|
- (large) loopLargePtr: (large*)v
|
||||||
{
|
{
|
||||||
return *v;
|
return *v;
|
||||||
}
|
}
|
||||||
- (id) loopObject: (id)v
|
- (id) loopObject: (id)v
|
||||||
{
|
{
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
- (short) loopShort: (short)v
|
- (short) loopShort: (short)v
|
||||||
{
|
{
|
||||||
return v+1;
|
return v+1;
|
||||||
}
|
}
|
||||||
- (small) loopSmall: (small)v
|
- (small) loopSmall: (small)v
|
||||||
{
|
{
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
- (small) loopSmallPtr: (small*)v
|
- (small) loopSmallPtr: (small*)v
|
||||||
{
|
{
|
||||||
return *v;
|
return *v;
|
||||||
}
|
}
|
||||||
- (char*) loopString: (char*)v
|
- (char*) loopString: (char*)v
|
||||||
{
|
{
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (char) retChar
|
- (char) retChar
|
||||||
{
|
{
|
||||||
return (char)99;
|
return (char)99;
|
||||||
}
|
}
|
||||||
- (double) retDouble
|
- (double) retDouble
|
||||||
{
|
{
|
||||||
return 123.456;
|
return 123.456;
|
||||||
}
|
}
|
||||||
- (float) retFloat
|
- (float) retFloat
|
||||||
{
|
{
|
||||||
return 123.456;
|
return 123.456;
|
||||||
}
|
}
|
||||||
- (int) retInt
|
- (int) retInt
|
||||||
{
|
{
|
||||||
return 123456;
|
return 123456;
|
||||||
}
|
}
|
||||||
- (large) retLarge
|
- (large) retLarge
|
||||||
{
|
{
|
||||||
static large l = {
|
static large l = {
|
||||||
99, "large", 99.99
|
99, "large", 99.99
|
||||||
};
|
};
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
- (long) retLong
|
- (long) retLong
|
||||||
{
|
{
|
||||||
return 123456;
|
return 123456;
|
||||||
}
|
}
|
||||||
- (id) retObject
|
- (id) retObject
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
- (short) retShort
|
- (short) retShort
|
||||||
{
|
{
|
||||||
return 12345;
|
return 12345;
|
||||||
}
|
}
|
||||||
- (small) retSmall
|
- (small) retSmall
|
||||||
{
|
{
|
||||||
static small s = {
|
static small s = {
|
||||||
11, 22
|
11, 22
|
||||||
};
|
};
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
- (char*) retString
|
- (char*) retString
|
||||||
{
|
{
|
||||||
return "string";
|
return "string";
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface MyProxy : NSObject
|
@interface MyProxy : NSObject
|
||||||
{
|
{
|
||||||
id obj;
|
id obj;
|
||||||
}
|
}
|
||||||
- (void) forwardInvocation: (NSInvocation*)inv;
|
- (void) forwardInvocation: (NSInvocation*)inv;
|
||||||
- (id) initWithTarget: (id)target;
|
- (id) initWithTarget: (id)target;
|
||||||
|
@ -149,252 +150,264 @@ typedef struct {
|
||||||
@implementation MyProxy
|
@implementation MyProxy
|
||||||
- (id) initWithTarget: (id)target
|
- (id) initWithTarget: (id)target
|
||||||
{
|
{
|
||||||
obj = target;
|
obj = target;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
- (void) forwardInvocation: (NSInvocation*)inv
|
- (void) forwardInvocation: (NSInvocation*)inv
|
||||||
{
|
{
|
||||||
[inv invokeWithTarget: obj];
|
NSData *d = [NSArchiver archivedDataWithRootObject: inv];
|
||||||
|
NSInvocation *i = [NSUnarchiver unarchiveObjectWithData: d];
|
||||||
|
unsigned l;
|
||||||
|
void *b;
|
||||||
|
|
||||||
|
[i invokeWithTarget: obj];
|
||||||
|
d = [NSArchiver archivedDataWithRootObject: i];
|
||||||
|
i = [NSUnarchiver unarchiveObjectWithData: d];
|
||||||
|
l = [[i methodSignature] methodReturnLength];
|
||||||
|
b = (void *)objc_malloc(l);
|
||||||
|
[i getReturnValue: b];
|
||||||
|
[inv setReturnValue: b];
|
||||||
|
objc_free(b);
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
{
|
{
|
||||||
large la;
|
large la;
|
||||||
small sm;
|
small sm;
|
||||||
large tmpla;
|
large tmpla;
|
||||||
large *laptr = &tmpla;
|
large *laptr = &tmpla;
|
||||||
small tmpsm;
|
small tmpsm;
|
||||||
small *smptr = &tmpsm;
|
small *smptr = &tmpsm;
|
||||||
int i;
|
int i;
|
||||||
char c;
|
char c;
|
||||||
short s;
|
short s;
|
||||||
long l;
|
long l;
|
||||||
float f;
|
float f;
|
||||||
double d;
|
double d;
|
||||||
id o;
|
id o;
|
||||||
char* str;
|
char* str;
|
||||||
NSInvocation *inv;
|
NSInvocation *inv;
|
||||||
NSMethodSignature *sig;
|
NSMethodSignature *sig;
|
||||||
Target *t;
|
Target *t;
|
||||||
id p;
|
id p;
|
||||||
NSAutoreleasePool *arp = [NSAutoreleasePool new];
|
NSAutoreleasePool *arp = [NSAutoreleasePool new];
|
||||||
|
|
||||||
t = [Target new];
|
t = [Target new];
|
||||||
p = [[MyProxy alloc] initWithTarget: t];
|
p = [[MyProxy alloc] initWithTarget: t];
|
||||||
|
|
||||||
#define SETUP(X) \
|
#define SETUP(X) \
|
||||||
sig = [t methodSignatureForSelector: @selector(X)]; \
|
sig = [t methodSignatureForSelector: @selector(X)]; \
|
||||||
inv = [NSInvocation invocationWithMethodSignature: sig]; \
|
inv = [NSInvocation invocationWithMethodSignature: sig]; \
|
||||||
[inv setSelector: @selector(X)];
|
[inv setSelector: @selector(X)];
|
||||||
|
|
||||||
tmpsm.c = 8;
|
tmpsm.c = 8;
|
||||||
tmpsm.i = 9;
|
tmpsm.i = 9;
|
||||||
|
|
||||||
tmpla.i = 1;
|
tmpla.i = 1;
|
||||||
tmpla.s = "hello";
|
tmpla.s = "hello";
|
||||||
tmpla.f = 1.23;
|
tmpla.f = 1.23;
|
||||||
|
|
||||||
SETUP(retChar);
|
SETUP(retChar);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 99, ");
|
printf("Expect: 99, ");
|
||||||
[inv getReturnValue: &c];
|
[inv getReturnValue: &c];
|
||||||
printf("invoke: %d ", c);
|
printf("invoke: %d ", c);
|
||||||
c = [p retChar];
|
c = [p retChar];
|
||||||
printf("forward: %d\n", c);
|
printf("forward: %d\n", c);
|
||||||
|
|
||||||
SETUP(retShort);
|
SETUP(retShort);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 12345, ");
|
printf("Expect: 12345, ");
|
||||||
[inv getReturnValue: &s];
|
[inv getReturnValue: &s];
|
||||||
printf("invoke: %d ", s);
|
printf("invoke: %d ", s);
|
||||||
s = [p retShort];
|
s = [p retShort];
|
||||||
printf("forward: %d\n", s);
|
printf("forward: %d\n", s);
|
||||||
|
|
||||||
SETUP(retInt);
|
SETUP(retInt);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 123456, ");
|
printf("Expect: 123456, ");
|
||||||
[inv getReturnValue: &i];
|
[inv getReturnValue: &i];
|
||||||
printf("invoke: %d ", i);
|
printf("invoke: %d ", i);
|
||||||
i = [p retInt];
|
i = [p retInt];
|
||||||
printf("forward: %d\n", i);
|
printf("forward: %d\n", i);
|
||||||
|
|
||||||
SETUP(retLong);
|
SETUP(retLong);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 123456, ");
|
printf("Expect: 123456, ");
|
||||||
[inv getReturnValue: &l];
|
[inv getReturnValue: &l];
|
||||||
printf("invoke: %ld ", l);
|
printf("invoke: %ld ", l);
|
||||||
l = [p retLong];
|
l = [p retLong];
|
||||||
printf("forward: %ld\n", l);
|
printf("forward: %ld\n", l);
|
||||||
|
|
||||||
SETUP(retFloat);
|
SETUP(retFloat);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 123.456, ");
|
printf("Expect: 123.456, ");
|
||||||
[inv getReturnValue: &f];
|
[inv getReturnValue: &f];
|
||||||
printf("invoke: %.3f ", f);
|
printf("invoke: %.3f ", f);
|
||||||
f = [p retFloat];
|
f = [p retFloat];
|
||||||
printf("forward: %.3f\n", f);
|
printf("forward: %.3f\n", f);
|
||||||
|
|
||||||
SETUP(retDouble);
|
SETUP(retDouble);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 123.456, ");
|
printf("Expect: 123.456, ");
|
||||||
[inv getReturnValue: &d];
|
[inv getReturnValue: &d];
|
||||||
printf("invoke: %.3f ", d);
|
printf("invoke: %.3f ", d);
|
||||||
d = [p retDouble];
|
d = [p retDouble];
|
||||||
printf("forward: %.3f\n", d);
|
printf("forward: %.3f\n", d);
|
||||||
|
|
||||||
SETUP(retObject);
|
SETUP(retObject);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: %x, ", t);
|
printf("Expect: %x, ", t);
|
||||||
[inv getReturnValue: &o];
|
[inv getReturnValue: &o];
|
||||||
printf("invoke: %x ", o);
|
printf("invoke: %x ", o);
|
||||||
o = [p retObject];
|
o = [p retObject];
|
||||||
printf("forward: %x\n", o);
|
printf("forward: %x\n", o);
|
||||||
|
|
||||||
SETUP(retString);
|
SETUP(retString);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 'string', ");
|
printf("Expect: 'string', ");
|
||||||
[inv getReturnValue: &str];
|
[inv getReturnValue: &str];
|
||||||
printf("invoke: '%s' ", str);
|
printf("invoke: '%s' ", str);
|
||||||
str = [p retString];
|
str = [p retString];
|
||||||
printf("forward: '%s'\n", str);
|
printf("forward: '%s'\n", str);
|
||||||
|
|
||||||
SETUP(retSmall);
|
SETUP(retSmall);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: {11,22}, ");
|
printf("Expect: {11,22}, ");
|
||||||
[inv getReturnValue: &sm];
|
[inv getReturnValue: &sm];
|
||||||
printf("invoke: {%d,%d} ", sm.c, sm.i);
|
printf("invoke: {%d,%d} ", sm.c, sm.i);
|
||||||
sm = [p retSmall];
|
sm = [p retSmall];
|
||||||
printf("forward: {%d,%d}\n", sm.c, sm.i);
|
printf("forward: {%d,%d}\n", sm.c, sm.i);
|
||||||
|
|
||||||
SETUP(retLarge);
|
SETUP(retLarge);
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: {99,large,99.99}, ");
|
printf("Expect: {99,large,99.99}, ");
|
||||||
[inv getReturnValue: &la];
|
[inv getReturnValue: &la];
|
||||||
printf("invoke: {%d,%s,%.2f} ", la.i, la.s, la.f);
|
printf("invoke: {%d,%s,%.2f} ", la.i, la.s, la.f);
|
||||||
la = [p retLarge];
|
la = [p retLarge];
|
||||||
printf("forward: {%d,%s,%.2f}\n", la.i, la.s, la.f);
|
printf("forward: {%d,%s,%.2f}\n", la.i, la.s, la.f);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SETUP(loopChar:);
|
SETUP(loopChar:);
|
||||||
c = 0;
|
c = 0;
|
||||||
[inv setArgument: &c atIndex: 2];
|
[inv setArgument: &c atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 1, ");
|
printf("Expect: 1, ");
|
||||||
[inv getReturnValue: &c];
|
[inv getReturnValue: &c];
|
||||||
printf("invoke: %d ", c);
|
printf("invoke: %d ", c);
|
||||||
c = [p loopChar: 0];
|
c = [p loopChar: 0];
|
||||||
printf("forward: %d\n", c);
|
printf("forward: %d\n", c);
|
||||||
|
|
||||||
SETUP(loopShort:);
|
SETUP(loopShort:);
|
||||||
s = 1;
|
s = 1;
|
||||||
[inv setArgument: &s atIndex: 2];
|
[inv setArgument: &s atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 2, ");
|
printf("Expect: 2, ");
|
||||||
[inv getReturnValue: &s];
|
[inv getReturnValue: &s];
|
||||||
printf("invoke: %d ", s);
|
printf("invoke: %d ", s);
|
||||||
s = [p loopShort: 1];
|
s = [p loopShort: 1];
|
||||||
printf("forward: %d\n", s);
|
printf("forward: %d\n", s);
|
||||||
|
|
||||||
SETUP(loopInt:);
|
SETUP(loopInt:);
|
||||||
i = 2;
|
i = 2;
|
||||||
[inv setArgument: &i atIndex: 2];
|
[inv setArgument: &i atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 3, ");
|
printf("Expect: 3, ");
|
||||||
[inv getReturnValue: &i];
|
[inv getReturnValue: &i];
|
||||||
printf("invoke: %d ", i);
|
printf("invoke: %d ", i);
|
||||||
i = [p loopInt: 2];
|
i = [p loopInt: 2];
|
||||||
printf("forward: %d\n", i);
|
printf("forward: %d\n", i);
|
||||||
|
|
||||||
SETUP(loopLong:);
|
SETUP(loopLong:);
|
||||||
l = 3;
|
l = 3;
|
||||||
[inv setArgument: &l atIndex: 2];
|
[inv setArgument: &l atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 4, ");
|
printf("Expect: 4, ");
|
||||||
[inv getReturnValue: &l];
|
[inv getReturnValue: &l];
|
||||||
printf("invoke: %d ", l);
|
printf("invoke: %d ", l);
|
||||||
l = [p loopLong: 3];
|
l = [p loopLong: 3];
|
||||||
printf("forward: %d\n", l);
|
printf("forward: %d\n", l);
|
||||||
|
|
||||||
SETUP(loopFloat:);
|
SETUP(loopFloat:);
|
||||||
f = 4.0;
|
f = 4.0;
|
||||||
[inv setArgument: &f atIndex: 2];
|
[inv setArgument: &f atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 5.0, ");
|
printf("Expect: 5.0, ");
|
||||||
[inv getReturnValue: &f];
|
[inv getReturnValue: &f];
|
||||||
printf("invoke: %.1f ", f);
|
printf("invoke: %.1f ", f);
|
||||||
f = [p loopFloat: 4.0];
|
f = [p loopFloat: 4.0];
|
||||||
printf("forward: %.1f\n", f);
|
printf("forward: %.1f\n", f);
|
||||||
|
|
||||||
SETUP(loopDouble:);
|
SETUP(loopDouble:);
|
||||||
d = 5.0;
|
d = 5.0;
|
||||||
[inv setArgument: &d atIndex: 2];
|
[inv setArgument: &d atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 6.0, ");
|
printf("Expect: 6.0, ");
|
||||||
[inv getReturnValue: &d];
|
[inv getReturnValue: &d];
|
||||||
printf("invoke: %.1f ", d);
|
printf("invoke: %.1f ", d);
|
||||||
d = [p loopDouble: 5.0];
|
d = [p loopDouble: 5.0];
|
||||||
printf("forward: %.1f\n", d);
|
printf("forward: %.1f\n", d);
|
||||||
|
|
||||||
SETUP(loopObject:);
|
SETUP(loopObject:);
|
||||||
[inv setArgument: &p atIndex: 2];
|
[inv setArgument: &p atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: %x, ", p);
|
printf("Expect: %x, ", p);
|
||||||
[inv getReturnValue: &o];
|
[inv getReturnValue: &o];
|
||||||
printf("invoke: %x ", o);
|
printf("invoke: %x ", o);
|
||||||
o = [p loopObject: p];
|
o = [p loopObject: p];
|
||||||
printf("forward: %x\n", o);
|
printf("forward: %x\n", o);
|
||||||
|
|
||||||
SETUP(loopString:);
|
SETUP(loopString:);
|
||||||
str = "Hello";
|
str = "Hello";
|
||||||
[inv setArgument: &str atIndex: 2];
|
[inv setArgument: &str atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
printf("Expect: 'Hello', ");
|
printf("Expect: 'Hello', ");
|
||||||
[inv getReturnValue: &str];
|
[inv getReturnValue: &str];
|
||||||
printf("invoke: '%s' ", str);
|
printf("invoke: '%s' ", str);
|
||||||
str = [p loopString: str];
|
str = [p loopString: str];
|
||||||
printf("forward: '%s'\n", str);
|
printf("forward: '%s'\n", str);
|
||||||
|
|
||||||
SETUP(loopSmall:);
|
SETUP(loopSmall:);
|
||||||
printf("Expect: {8,9}, ");
|
printf("Expect: {8,9}, ");
|
||||||
[inv setArgument: &tmpsm atIndex: 2];
|
[inv setArgument: &tmpsm atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
[inv getReturnValue: &sm];
|
[inv getReturnValue: &sm];
|
||||||
printf("invoke: {%d,%d} ", sm.c, sm.i);
|
printf("invoke: {%d,%d} ", sm.c, sm.i);
|
||||||
sm = [p loopSmall: tmpsm];
|
sm = [p loopSmall: tmpsm];
|
||||||
printf("forward: {%d,%d}\n", sm.c, sm.i);
|
printf("forward: {%d,%d}\n", sm.c, sm.i);
|
||||||
|
|
||||||
SETUP(loopLarge:);
|
SETUP(loopLarge:);
|
||||||
printf("Expect: {1,hello,1.23}, ");
|
printf("Expect: {1,hello,1.23}, ");
|
||||||
[inv setArgument: &tmpla atIndex: 2];
|
[inv setArgument: &tmpla atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
[inv getReturnValue: &la];
|
[inv getReturnValue: &la];
|
||||||
printf("invoke: {%d,%s,%.2f} ", la.i, la.s, la.f);
|
printf("invoke: {%d,%s,%.2f} ", la.i, la.s, la.f);
|
||||||
la = [p loopLarge: tmpla];
|
la = [p loopLarge: tmpla];
|
||||||
printf("forward: {%d,%s,%.2f}\n", la.i, la.s, la.f);
|
printf("forward: {%d,%s,%.2f}\n", la.i, la.s, la.f);
|
||||||
|
|
||||||
SETUP(loopSmallPtr:);
|
SETUP(loopSmallPtr:);
|
||||||
printf("Expect: {8,9}, ");
|
printf("Expect: {8,9}, ");
|
||||||
[inv setArgument: &smptr atIndex: 2];
|
[inv setArgument: &smptr atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
[inv getReturnValue: &sm];
|
[inv getReturnValue: &sm];
|
||||||
printf("invoke: {%d,%d} ", sm.c, sm.i);
|
printf("invoke: {%d,%d} ", sm.c, sm.i);
|
||||||
sm = [p loopSmallPtr: smptr];
|
sm = [p loopSmallPtr: smptr];
|
||||||
printf("forward: {%d,%d}\n", sm.c, sm.i);
|
printf("forward: {%d,%d}\n", sm.c, sm.i);
|
||||||
|
|
||||||
SETUP(loopLargePtr:);
|
SETUP(loopLargePtr:);
|
||||||
printf("Expect: {1,hello,1.23}, ");
|
printf("Expect: {1,hello,1.23}, ");
|
||||||
[inv setArgument: &laptr atIndex: 2];
|
[inv setArgument: &laptr atIndex: 2];
|
||||||
[inv invokeWithTarget: t];
|
[inv invokeWithTarget: t];
|
||||||
[inv getReturnValue: &la];
|
[inv getReturnValue: &la];
|
||||||
printf("invoke: {%d,%s,%.2f} ", la.i, la.s, la.f);
|
printf("invoke: {%d,%s,%.2f} ", la.i, la.s, la.f);
|
||||||
la = [p loopLargePtr: laptr];
|
la = [p loopLargePtr: laptr];
|
||||||
printf("forward: {%d,%s,%.2f}\n", la.i, la.s, la.f);
|
printf("forward: {%d,%s,%.2f}\n", la.i, la.s, la.f);
|
||||||
|
|
||||||
[arp release];
|
[arp release];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue