/* GNU Objective C Runtime selector related functions
- Copyright (C) 1993, 1995, 1996, 1997, 2002, 2004, 2009, 2010
- Free Software Foundation, Inc.
+ Copyright (C) 1993-2020 Free Software Foundation, Inc.
Contributed by Kresten Krab Thorup
This file is part of GCC.
/* Return YES iff t1 and t2 have same method types. Ignore the
argframe layout. */
-BOOL
+static BOOL
sel_types_match (const char *t1, const char *t2)
{
if (! t1 || ! t2)
return NO;
}
-/* Return selector representing name. In the Modern API, you'd
- normally use sel_registerTypedName() for this, which does the same
- but would register the selector with the runtime if not registered
- yet (if you only want to check for selectors without registering,
- use sel_copyTypedSelectorList()). */
-SEL
-sel_get_typed_uid (const char *name, const char *types)
-{
- struct objc_list *l;
- sidx i;
-
- objc_mutex_lock (__objc_runtime_mutex);
-
- i = (sidx) objc_hash_value_for_key (__objc_selector_hash, name);
- if (i == 0)
- {
- objc_mutex_unlock (__objc_runtime_mutex);
- return 0;
- }
-
- for (l = (struct objc_list *) sarray_get_safe (__objc_selector_array, i);
- l; l = l->tail)
- {
- SEL s = (SEL) l->head;
- if (types == 0 || s->sel_types == 0)
- {
- if (s->sel_types == types)
- {
- objc_mutex_unlock (__objc_runtime_mutex);
- return s;
- }
- }
- else if (sel_types_match (s->sel_types, types))
- {
- objc_mutex_unlock (__objc_runtime_mutex);
- return s;
- }
- }
-
- objc_mutex_unlock (__objc_runtime_mutex);
- return 0;
-}
-
-/* Return selector representing name; prefer a selector with non-NULL
- type. In the Modern API, sel_getTypedSelector() is similar but
- returns NULL if a typed selector couldn't be found. */
-SEL
-sel_get_any_typed_uid (const char *name)
-{
- struct objc_list *l;
- sidx i;
- SEL s = NULL;
-
- objc_mutex_lock (__objc_runtime_mutex);
-
- i = (sidx) objc_hash_value_for_key (__objc_selector_hash, name);
- if (i == 0)
- {
- objc_mutex_unlock (__objc_runtime_mutex);
- return 0;
- }
-
- for (l = (struct objc_list *) sarray_get_safe (__objc_selector_array, i);
- l; l = l->tail)
- {
- s = (SEL) l->head;
- if (s->sel_types)
- {
- objc_mutex_unlock (__objc_runtime_mutex);
- return s;
- }
- }
-
- objc_mutex_unlock (__objc_runtime_mutex);
- return s;
-}
-
/* Return selector representing name. */
SEL
sel_get_any_uid (const char *name)
return ret;
}
-/* Traditional GNU Objective-C Runtime API. */
-const char *sel_get_name (SEL selector)
-{
- if (selector == NULL)
- return 0;
-
- return sel_getName (selector);
-}
-
BOOL
sel_is_mapped (SEL selector)
{
return 0;
}
-/* Traditional GNU Objective-C Runtime API. */
-const char *sel_get_type (SEL selector)
-{
- return sel_getTypeEncoding (selector);
-}
-
/* The uninstalled dispatch table. */
extern struct sarray *__objc_uninstalled_dtable;
return s;
}
}
- else if (! strcmp (s->sel_types, types))
+ else if (sel_types_match (s->sel_types, types))
{
if (orig)
{
return ret;
}
-/* Traditional GNU Objective-C Runtime API. */
-SEL
-sel_register_name (const char *name)
-{
- return sel_registerName (name);
-}
-
SEL
sel_registerTypedName (const char *name, const char *type)
{
return ret;
}
-SEL
-sel_register_typed_name (const char *name, const char *type)
-{
- return sel_registerTypedName (name, type);
-}
-
/* Return the selector representing name. */
SEL
sel_getUid (const char *name)
{
return sel_registerTypedName (name, 0);
}
-
-/* Traditional GNU Objective-C Runtime API. */
-SEL
-sel_get_uid (const char *name)
-{
- return sel_getUid (name);
-}