From patchwork Sun Dec 19 02:13:00 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: =?UTF-8?Q?libobjc:=20header=20cleanup=20for=20new=20API=20(6)?= Date: Sat, 18 Dec 2010 16:13:00 -0000 From: Nicola Pero X-Patchwork-Id: 76111 Message-Id: <1292724780.152826388@192.168.2.229> To: "gcc-patches@gnu.org" This patch adds a declaration of a hook that was available in the old API and should be available in the new API as well, but I had forgotten to declare it in the headers. :-( Committed to trunk. Thanks Index: init.c =================================================================== --- init.c (revision 168043) +++ init.c (working copy) @@ -83,11 +83,7 @@ /* Add protocol to class. */ static void __objc_class_add_protocols (Class, struct objc_protocol_list *); -/* This is a hook which is called by __objc_exec_class every time a - class or a category is loaded into the runtime. This may e.g. help - a dynamic loader determine the classes that have been loaded when - an object file is dynamically linked in. */ -/* TODO: This needs to be declared in a public file with the new API. */ +/* Load callback hook. */ void (*_objc_load_callback) (Class class, struct objc_category *category); /* !T:SAFE */ /* Are all categories/classes resolved? */ @@ -724,6 +720,10 @@ objc_send_load (); objc_mutex_unlock (__objc_runtime_mutex); + + /* TODO: Do we need to add a call to __objc_resolve_class_links() + here ? gnustep-base does it manually after it loads a module. + Shouldn't we do it automatically ? */ } static void Index: ChangeLog =================================================================== --- ChangeLog (revision 168043) +++ ChangeLog (working copy) @@ -1,5 +1,11 @@ 2010-12-19 Nicola Pero + * init.c: Updated comments. + * objc/objc-api.h: Updated comments. + * objc/runtime.h (_objc_load_callback): Declare. + +2010-12-19 Nicola Pero + * objc/Object.h: Include deprecated/typedstream.h and deprecated/hash.h instead of typedstream.h. Updated comments. Index: objc/runtime.h =================================================================== --- objc/runtime.h (revision 168043) +++ objc/runtime.h (working copy) @@ -876,7 +876,15 @@ /* TODO: Add all the other functions in the API. */ +/** Implementation: the following hook is in init.c. */ +/* This is a hook which is called by __objc_exec_class every time a + class or a category is loaded into the runtime. This may e.g. help + a dynamic loader determine the classes that have been loaded when + an object file is dynamically linked in. */ +objc_EXPORT void (*_objc_load_callback)(Class _class, struct objc_category *category); + + /** Implementation: the following functions are in objc-foreach.c. */ /* 'objc_enumerationMutation()' is called when a collection is Index: objc/objc-api.h =================================================================== --- objc/objc-api.h (revision 168043) +++ objc/objc-api.h (working copy) @@ -26,25 +26,28 @@ #ifndef __objc_api_INCLUDE_GNU #define __objc_api_INCLUDE_GNU -/* - This file declares the "traditional" GNU Objective-C Runtime API. - It is the API supported by older versions of the GNU Objective-C - Runtime. Include this file to use it. +/* This file declares the "traditional" GNU Objective-C Runtime API. + It is the API supported by older versions of the GNU Objective-C + Runtime. Include this file to use it. - This API is being replaced by the "modern" GNU Objective-C Runtime - API, which is declared in objc/runtime.h. The "modern" API is very - similar to the API used by the modern Apple/NeXT runtime. + This API is being replaced by the "modern" GNU Objective-C Runtime + API, which is declared in objc/runtime.h. The "modern" API is very + similar to the API used by the modern Apple/NeXT runtime. - Because the two APIs have some conflicting definitions (in - particular, Method and Category are defined differently) you should - include either objc/objc-api.h (to use the traditional GNU - Objective-C Runtime API) or objc/runtime.h (to use the modern GNU - Objective-C Runtime API), but not both. -*/ + The last version of GCC supporting the traditional API is GCC 4.6. + This file will not exist in later versions of GCC. + + Because the two APIs have some conflicting definitions (in + particular, Method and Category are defined differently) you should + include either objc/objc-api.h (to use the traditional GNU + Objective-C Runtime API) or objc/runtime.h (to use the modern GNU + Objective-C Runtime API), but not both. */ #ifdef __objc_runtime_INCLUDE_GNU # error You can not include both objc/objc-api.h and objc/runtime.h. Include objc/objc-api.h for the traditional GNU Objective-C Runtime API and objc/runtime.h for the modern one. #endif +/* TODO: A deprecation warning any time the file is included ? */ + #include "objc.h" #ifndef GNU_LIBOBJC_COMPILING_LIBOBJC_ITSELF # include "deprecated/hash.h" @@ -182,6 +185,8 @@ ** objc_get_class if the runtime is not able to find the class. ** This may e.g. try to load in the class using dynamic loading. ** The function is guaranteed to be passed a non-NULL name string. +** In the Modern API, this is replaced by +** objc_setGetUnknownClassHandler (). */ objc_EXPORT Class (*_objc_lookup_class)(const char *name);