mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
simplify typed selector usage.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32396 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
1b2dd79c1f
commit
08440691cb
6 changed files with 46 additions and 55 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2011-02-27 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/GSFFCallInvocation.m:
|
||||||
|
* Source/ObjectiveC2/runtime.c:
|
||||||
|
* Source/ObjectiveC2/runtime.h:
|
||||||
|
* Source/Additions/GSObjCRuntime.m:
|
||||||
|
Avoid messy runtime differences by using old runtime api for typed
|
||||||
|
selector features not in the Apple runtime.
|
||||||
|
|
||||||
2011-02-27 Banlu Kemiyatorn <object@gmail.com>
|
2011-02-27 Banlu Kemiyatorn <object@gmail.com>
|
||||||
|
|
||||||
* Source/NSOperation.m: Fix error checking condition for dependencies.
|
* Source/NSOperation.m: Fix error checking condition for dependencies.
|
||||||
|
|
|
@ -149,11 +149,28 @@ GSSelectorFromNameAndTypes(const char *name, const char *types)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef __GNU_LIBOBJC__
|
SEL s;
|
||||||
return sel_registerTypedName(name, types);
|
|
||||||
#else
|
if (types == 0)
|
||||||
return sel_registerTypedName_np(name, types);
|
{
|
||||||
#endif
|
s = sel_get_any_typed_uid(name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = sel_get_typed_uid(name, types);
|
||||||
|
}
|
||||||
|
if (s == 0)
|
||||||
|
{
|
||||||
|
if (types == 0)
|
||||||
|
{
|
||||||
|
s = sel_register_name(name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = sel_register_typed_name(name, types);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -164,12 +181,13 @@ GSTypesFromSelector(SEL sel)
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
if (sel == 0)
|
if (sel == 0)
|
||||||
return 0;
|
{
|
||||||
#ifdef __GNU_LIBOBJC__
|
return 0;
|
||||||
return sel_getTypeEncoding(sel);
|
}
|
||||||
#else
|
else
|
||||||
return sel_getType_np(sel);
|
{
|
||||||
#endif
|
return sel_get_type(sel);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
|
@ -1347,7 +1365,7 @@ GSObjCGetVal(NSObject *self, const char *key, SEL sel,
|
||||||
|
|
||||||
cls = [self class];
|
cls = [self class];
|
||||||
type_slot = objc_get_slot(cls, @selector(retain));
|
type_slot = objc_get_slot(cls, @selector(retain));
|
||||||
typed = sel_registerTypedName_np(sel_getName(sel),
|
typed = GSObjCSelectorFromNameAndTypes(sel_getName(sel),
|
||||||
type_slot->types);
|
type_slot->types);
|
||||||
slot = objc_get_slot(cls, typed);
|
slot = objc_get_slot(cls, typed);
|
||||||
if (strcmp(slot->types, type_slot->types) == 0)
|
if (strcmp(slot->types, type_slot->types) == 0)
|
||||||
|
|
|
@ -919,7 +919,7 @@ GSInvocationCallback (void *callback_data, va_alist args)
|
||||||
{
|
{
|
||||||
const char *runtimeName = sel_getName(selector);
|
const char *runtimeName = sel_getName(selector);
|
||||||
|
|
||||||
selector = sel_getType_np(runtimeName, receiverTypes);
|
runtimeTypes = GSTypesFromSelector(selector);
|
||||||
if (selector == 0)
|
if (selector == 0)
|
||||||
{
|
{
|
||||||
selector = GSSelectorFromNameAndTypes(runtimeName, receiverTypes);
|
selector = GSSelectorFromNameAndTypes(runtimeName, receiverTypes);
|
||||||
|
|
|
@ -99,15 +99,16 @@ gs_find_best_typed_sel (SEL sel)
|
||||||
return (SEL)0;
|
return (SEL)0;
|
||||||
|
|
||||||
sel_copyTypes_np (selName, &types, 1);
|
sel_copyTypes_np (selName, &types, 1);
|
||||||
return sel_registerTypedName_np(selName, types);
|
return GSObjCSelectorFromNameAndTypes(selName, types);
|
||||||
}
|
}
|
||||||
#elif defined (__GNU_LIBOBJC__)
|
#elif defined (__GNU_LIBOBJC__)
|
||||||
{
|
{
|
||||||
/* Get the list of all selectors with this name. */
|
/* Get the list of all selectors with this name. */
|
||||||
const char *selName = sel_getName (sel);
|
const char *selName = sel_getName (sel);
|
||||||
unsigned int numberOfReturnedSelectors;
|
unsigned int numberOfReturnedSelectors;
|
||||||
SEL *selectors = sel_copyTypedSelectorList (selName, &numberOfReturnedSelectors);
|
SEL *selectors;
|
||||||
|
|
||||||
|
selectors = sel_copyTypedSelectorList (selName, &numberOfReturnedSelectors);
|
||||||
/* If no selectors are returned, there is no selector. */
|
/* If no selectors are returned, there is no selector. */
|
||||||
if (selectors == NULL)
|
if (selectors == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -118,7 +119,7 @@ gs_find_best_typed_sel (SEL sel)
|
||||||
SEL selector = selectors[0];
|
SEL selector = selectors[0];
|
||||||
free (selectors);
|
free (selectors);
|
||||||
|
|
||||||
if (sel_getTypeEncoding (selector))
|
if (GSTypesFromSelector(selector))
|
||||||
return selector;
|
return selector;
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -130,8 +131,8 @@ gs_find_best_typed_sel (SEL sel)
|
||||||
{
|
{
|
||||||
SEL first_selector = selectors[0];
|
SEL first_selector = selectors[0];
|
||||||
SEL second_selector = selectors[1];
|
SEL second_selector = selectors[1];
|
||||||
const char *first_selector_types = sel_getTypeEncoding (first_selector);
|
const char *first_selector_types = GSTypesFromSelector(first_selector);
|
||||||
const char *second_selector_types = sel_getTypeEncoding (second_selector);
|
const char *second_selector_types = GSTypesFromSelector(second_selector);
|
||||||
free (selectors);
|
free (selectors);
|
||||||
|
|
||||||
if (first_selector_types && !second_selector_types)
|
if (first_selector_types && !second_selector_types)
|
||||||
|
|
|
@ -1328,14 +1328,6 @@ sel_getName(SEL sel)
|
||||||
return sel_get_name(sel);
|
return sel_get_name(sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
|
||||||
sel_getType_np(SEL sel)
|
|
||||||
{
|
|
||||||
if (sel == 0)
|
|
||||||
return "";
|
|
||||||
return sel_get_type(sel);
|
|
||||||
}
|
|
||||||
|
|
||||||
SEL
|
SEL
|
||||||
sel_getUid(const char *selName)
|
sel_getUid(const char *selName)
|
||||||
{
|
{
|
||||||
|
@ -1356,28 +1348,3 @@ sel_registerName(const char *selName)
|
||||||
return sel_register_name(selName);
|
return sel_register_name(selName);
|
||||||
}
|
}
|
||||||
|
|
||||||
SEL sel_registerTypedName_np(const char *selName, const char *types)
|
|
||||||
{
|
|
||||||
SEL s;
|
|
||||||
|
|
||||||
if (types == 0)
|
|
||||||
{
|
|
||||||
s = sel_get_any_typed_uid(selName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s = sel_get_typed_uid(selName, types);
|
|
||||||
}
|
|
||||||
if (s == 0)
|
|
||||||
{
|
|
||||||
if (types == 0)
|
|
||||||
{
|
|
||||||
s = sel_register_name(selName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s = sel_register_typed_name(selName, types);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
|
@ -291,14 +291,10 @@ static const id self = nil;
|
||||||
|
|
||||||
const char *sel_getName(SEL sel);
|
const char *sel_getName(SEL sel);
|
||||||
|
|
||||||
const char *sel_getType_np(SEL sel);
|
|
||||||
|
|
||||||
SEL sel_getUid(const char *selName);
|
SEL sel_getUid(const char *selName);
|
||||||
|
|
||||||
BOOL sel_isEqual(SEL sel1, SEL sel2);
|
BOOL sel_isEqual(SEL sel1, SEL sel2);
|
||||||
|
|
||||||
SEL sel_registerName(const char *selName);
|
SEL sel_registerName(const char *selName);
|
||||||
|
|
||||||
SEL sel_registerTypedName_np(const char *selName, const char *types);
|
|
||||||
|
|
||||||
#endif // __OBJECTIVEC2_RUNTIME_H_INCLUDED
|
#endif // __OBJECTIVEC2_RUNTIME_H_INCLUDED
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue