libs-base/Source/NSInvocation.m
mccallum a457b29979 Initial revision
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@9 72102866-910b-0410-8b05-ffd578937521
1994-11-08 16:44:01 +00:00

92 lines
1.7 KiB
Objective-C

#include "NSInvocation.h"
@implementation NSInvocation
+ (NSInvocation*) invocationWithMethodSignature: (MethodSignature*)ms
frame: (arglist_t)aFrame
{
NSInvocation *newInv = [self invocationWithMethodSignature:ms];
bcopy(aFrame->arg_ptr, newInv->agrFrame->arg_ptr, [ms frameLength]);
...
return newInv;
}
+ (NSInvocation*) invocationWithMethodSignature: (MethodSignature*)ms
{
int argsize = [ms frameLength];
int retsize = [ms methodReturnLength];
NSInvocation* newInv = [self alloc];
newInv->methodSignature = ms;
newInv->argFrame = malloc(argsize);
newInv->argFrame->arg_ptr = malloc(argsize);
newInv->retFrame = malloc(retsize);
return newInv;
}
- (void) getArgument: (void*)argumentLocation atIndex: (int)index
{
*argumentLocation =
}
- (void) getReturnValue: (void*)returnLocation
{
bcopy(retFrame, returnLocation, [methodSignature methodReturnLength]);
return;
}
- (MethodSignature*) methodSignature
{
return methodSignature;
}
- (SEL) selector
{
SEL s;
[self getArgument:&s atIndex:1];
return s;
}
- (void) setArgument: (void*)argumentLocation atIndex: (int)index;
- (void) setReturnValue: (void*)returnLocation
{
bcopy(returnLocation, retFrame, [methodSignature methodReturnLength]);
return;
}
- (void) setSelector: (SEL)aSelector
{
[self setArgument:&aSelector atIndex:1];
return;
}
- (void) setTarget: (id)aTarget
{
target = aTarget;
return;
}
- (id) target
{
id t;
[self getArgument:&t atIndex:0];
return t;
}
- (void) invoke
{
char *type;
Method* m;
id target;
SEL sel;
IMP imp;
target = *(id*)method_get_first_argument(m, argFrame, &type);
= [target methodForSelector:
__builtin_apply(
- (void) invokeWithTarget: (id)target
{
@end