• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: "-forwardInvocation:" like NSInvocation creation
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "-forwardInvocation:" like NSInvocation creation


  • Subject: Re: "-forwardInvocation:" like NSInvocation creation
  • From: Gwynne Raskind <email@hidden>
  • Date: Tue, 30 Mar 2010 16:23:12 -0400

On Mar 30, 2010, at 2:54 PM, Michael Ash wrote:
>> 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.


Another alternative would be to combine method_getNumberOfArguments() and method_copyArgumentType() with ffi_prep_cif() and ffi_call(), which I think is what libobjc itself does these days. libffi is available since at least 10.5. Pass the method's IMP to ffi_call() and don't forget to adjust the call to ffi_prep_cif() for the hidden self and _cmd arguments. libffi is available at least since 10.5.

-- Gwynne

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

References: 
 >"-forwardInvocation:" like NSInvocation creation (From: Philip Mötteli <email@hidden>)
 >Re: "-forwardInvocation:" like NSInvocation creation (From: Philip Mötteli <email@hidden>)
 >Re: "-forwardInvocation:" like NSInvocation creation (From: Michael Ash <email@hidden>)

  • Prev by Date: Re: Terminating subtasks reliably
  • Next by Date: Re: Terminating subtasks reliably
  • Previous by thread: Re: "-forwardInvocation:" like NSInvocation creation
  • Next by thread: Re: "-forwardInvocation:" like NSInvocation creation
  • Index(es):
    • Date
    • Thread