mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 09:41:15 +00:00
Attempt workaround for runtime providing insufficient information in callback.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@33814 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
b7b4333de4
commit
6cd7e3a588
2 changed files with 17 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2011-09-07 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/GSFFIInvocation.m: Check that we have a typed selector
|
||||||
|
during invocation (copy types from method signature if necessary)
|
||||||
|
so that forwarding won't fail if the runtime does a callback to
|
||||||
|
us without providing the receiver for us to check ... workaround
|
||||||
|
for proxying issues with very old runtimes.
|
||||||
|
|
||||||
2011-08-27 Richard Frith-Macdonald <rfm@gnu.org>
|
2011-08-27 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Source/NSLock.m: Fix bug #34154 ... logic error locking before date.
|
* Source/NSLock.m: Fix bug #34154 ... logic error locking before date.
|
||||||
|
|
|
@ -433,7 +433,14 @@ GSFFIInvokeWithTargetAndImp(NSInvocation *inv, id anObject, IMP imp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Make sure we have a typed selector for forwarding.
|
||||||
|
*/
|
||||||
NSAssert(_selector != 0, @"you must set the selector before invoking");
|
NSAssert(_selector != 0, @"you must set the selector before invoking");
|
||||||
|
if (0 == GSTypesFromSelector(_selector))
|
||||||
|
{
|
||||||
|
_selector = GSSelectorFromNameAndTypes(sel_getName(_selector),
|
||||||
|
[_sig methodType]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Temporarily set new target and copy it (and the selector) into the
|
* Temporarily set new target and copy it (and the selector) into the
|
||||||
|
@ -560,7 +567,8 @@ GSFFIInvocationCallback(ffi_cif *cif, void *retp, void **args, void *user)
|
||||||
sig = nil;
|
sig = nil;
|
||||||
if (gs_protocol_selector(GSTypesFromSelector(selector)) == YES)
|
if (gs_protocol_selector(GSTypesFromSelector(selector)) == YES)
|
||||||
{
|
{
|
||||||
sig = [NSMethodSignature signatureWithObjCTypes: GSTypesFromSelector(selector)];
|
sig = [NSMethodSignature signatureWithObjCTypes:
|
||||||
|
GSTypesFromSelector(selector)];
|
||||||
}
|
}
|
||||||
if (sig == nil)
|
if (sig == nil)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue