On Mon, Mar 29, 2010 at 2:15 PM, Philip Mötteli
<philip.moett...@tele2.ch> wrote:
> Hi,
>
>
> Am 29.03.2010 um 18:52 schrieb A.M.:
>>
>> On Mar 29, 2010, at 11:07 AM, Philip Mötteli wrote:
>>
>>> I need to temporary save the invocation of a method. For that, I just need 
>>> to put the stack frame into an NSInvocation. Unfortunately, Apple has 
>>> removed the -setStackFrame: from NSInvocation. Though they still use 
>>> something like it, because they need it for -forwardInvocation:.
>>> Has anybody implemented a method like [NSInvocation initWithArgframe: 
>>> (arglist_t)frame selector: (SEL)aSelector]?
>>
>> Hm- you haven't made it clear why you need the stack frame. The stack frame 
>> is still there (or constructed on-the-fly), but it is an opaque, hidden 
>> structure. As long as you call retainArguments, NSInvocation can be saved 
>> for later use.
>
> I see, I really wasn't enough clear. Lets say, I have a method
>
> - someMethodWithArgument:(struct *)anArgument 
> andSomeOtherArgument:(id)anotherArgument
> {
>        // Here I want to create an NSInvocation, capturing the call of this 
> method. Something like:
>        NSInvocation *anInvocation = [NSInvocation initWithArgframe: 
> (arglist_t)frame selector: _cmd];
> }

I don't think that such a thing is possible in the general case
without compiler support, because once your function begins executing,
there's no guarantee that the arguments remain in their original
locations on the stack frame. (Especially true on PPC and x86_64,
where arguments are frequently passed in registers.) And no such
compiler support exists.

I'd say that your best bet is probably to do some fancy method
replacement stuff so that your IMP gets replaced with the forwarding
IMP, then your -forwardInvocation: method can store the invocation
somewhere and then pass control over to the real method, where it can
retrieve it.

Mike
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to