From 1e13b8762fd121ad1d83c8ceb22b8f9dfb98d18c Mon Sep 17 00:00:00 2001 From: nicola Date: Fri, 15 Oct 2010 10:35:00 +0000 Subject: In libobjc/: 2010-10-14 Nicola Pero * init.c (__objc_init_protocol): New function which fixes up a protocol's class pointer, registers it with the runtime, register all protocol selectors and registers associated protocols too. (objc_init_statics): Detect if we are initializing protocols, and if so, use __objc_init_protocol instead of only fixing up the class pointer. (__objc_init_protocls): Use __objc_init_protocol. * objc-private/module-abi-8.h: Updated comments. * objc-private/runtime.h (__objc_register_selectors_from_description_list): New. * selector.c (__objc_register_selectors_from_description_list): New. (struct objc_method_description_list): Declare. * Protocol.m ([-descriptionForInstanceMethod:]): Use sel_get_name when accessing the name of a method, which is now correctly a SEL. ([-descriptionForClassMethod:]): Same change. * protocols.c (protocol_getMethodDescription): Same change. * objc/runtime.h: Updated comments. (sel_registerTypedName): Fixed typo in function name. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165499 138bc75d-0d04-0410-961f-82ee72b054a4 --- libobjc/selector.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'libobjc/selector.c') diff --git a/libobjc/selector.c b/libobjc/selector.c index 1d4bc7e69d7..ca8aa42e140 100644 --- a/libobjc/selector.c +++ b/libobjc/selector.c @@ -95,6 +95,40 @@ __objc_register_selectors_from_list (MethodList_t method_list) objc_mutex_unlock (__objc_runtime_mutex); } +/* Temporary definition while we include objc/objc-api.h instead of + objc-private/module-abi-8.h. It should go away once we include + module-abi-8.h. */ +struct objc_method_description_list +{ + int count; + struct objc_method_description list[1]; +}; + +/* The same as __objc_register_selectors_from_list, but works on a + struct objc_method_description_list* instead of a struct + objc_method_list*. This is only used for protocols, which have + lists of method descriptions, not methods. + */ +void +__objc_register_selectors_from_description_list +(struct objc_method_description_list *method_list) +{ + int i = 0; + + objc_mutex_lock (__objc_runtime_mutex); + while (i < method_list->count) + { + struct objc_method_description *method = &method_list->list[i]; + if (method->name) + { + method->name + = __sel_register_typed_name ((const char *) method->name, + method->types, 0, YES); + } + i += 1; + } + objc_mutex_unlock (__objc_runtime_mutex); +} /* Register instance methods as class methods for root classes */ void __objc_register_instance_methods_to_class (Class class) -- cgit v1.2.3