Patchwork =?UTF-8?Q?libobjc:=20Tidied=20up=20declaration=20of=20objc=5Fsuper=20for?= =?UTF-8?Q?=20modern=20API?=

login
register
mail settings
Submitter Nicola Pero
Date Dec. 15, 2010, 7:47 p.m.
Message ID <1292442440.929718458@192.168.2.227>
Download mbox | patch
Permalink /patch/75674/
State New
Headers show

Comments

Nicola Pero - Dec. 15, 2010, 7:47 p.m.
This patch does some renaming of 'struct objc_super' related types
and fields when using the "Modern API", making it identical to the
Apple/NeXT definition and removing the annoyance of having a different
field name in the struct for ObjC and ObjC++.

It leaves the fields unchanged for the "Traditional API".

Committed to trunk.

Thanks

In libobjc/:
2010-12-15  Nicola Pero  <nicola.pero@meta-innovation.com>

        * objc/message.h (objc_super): When using the modern API, do not
        define Super and Super_t, and always use 'super_class' for the
        super class field.      
        (objc_msg_lookup_super): Updated prototype to use 'struct
        objc_super *' instead of 'Super_t'.
        * sendmsg.c (objc_msg_lookup_super): Updated prototype to use
        'struct objc_super *' instead of 'Super_t'.

Patch

Index: sendmsg.c
===================================================================
--- sendmsg.c	(revision 167865)
+++ sendmsg.c	(working copy)
@@ -445,7 +445,7 @@  objc_msg_lookup (id receiver, SEL op)
 }
 
 IMP
-objc_msg_lookup_super (Super_t super, SEL sel)
+objc_msg_lookup_super (struct objc_super *super, SEL sel)
 {
   if (super->self)
     return get_imp (super->class, sel);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 167865)
+++ ChangeLog	(working copy)
@@ -1,5 +1,15 @@ 
 2010-12-15  Nicola Pero  <nicola.pero@meta-innovation.com>
 
+	* objc/message.h (objc_super): When using the modern API, do not
+	define Super and Super_t, and always use 'super_class' for the
+	super class field.	
+	(objc_msg_lookup_super): Updated prototype to use 'struct
+	objc_super *' instead of 'Super_t'.
+	* sendmsg.c (objc_msg_lookup_super): Updated prototype to use
+	'struct objc_super *' instead of 'Super_t'.
+
+2010-12-15  Nicola Pero  <nicola.pero@meta-innovation.com>
+
 	* objc/message.h: Update comments, reindented code and moved
 	deprecated types and functions at the end of the file.  No code
 	changes.
Index: objc/message.h
===================================================================
--- objc/message.h	(revision 167865)
+++ objc/message.h	(working copy)
@@ -91,25 +91,40 @@  objc_EXPORT IMP objc_msg_lookup (id receiver, SEL
 /* Structure used when a message is send to a class's super class.
    The compiler generates one of these structures and passes it to
    objc_msg_lookup_super() when a [super method] call is compiled.  */
+
+/* In the traditional API, the super class field is called 'class' in
+   Objective-C and 'super_class' in Objective-C++.  In the new API
+   (objc/runtime.h) it is always called 'super_class'.  We detect the
+   "traditional API" by the fact that the objc/objc-api.h header
+   include guards are defined, which means objc/objc-api.h has been
+   included.  This works because objc/message.h does not exist in the
+   Traditional API and is only read because objc-api.h itself includes
+   it.  */
+#ifdef __objc_api_INCLUDE_GNU
+/* Traditional API.  */
 typedef struct objc_super
 {
   id    self;       /* Id of the object sending the message. */
-
-  /* The new version of the API will always use 'super_class'.  TODO:
-     Use class only if objc-api.h is included, otherwise always use
-     super_class.  */
 #ifdef __cplusplus
   Class super_class;
 #else
   Class class;        /* Object's super class. */
 #endif
 } Super, *Super_t;
+#else
+/* Modern API.  */
+struct objc_super
+{
+  id    self;        /* The receiver of the message.  */
+  Class super_class; /* The superclass of the receiver.  */
+};
+#endif
 
 /* This is used by the compiler instead of objc_msg_lookup () when
    compiling a call to 'super', such as [super method].  This requires
    sending a message to super->self, but looking up the method as if
    super->self was in class super->super_class.  */
-objc_EXPORT IMP objc_msg_lookup_super (Super_t super, SEL sel);
+objc_EXPORT IMP objc_msg_lookup_super (struct objc_super *super, SEL sel);
 
 /* Hooks for method forwarding.  They make it easy to substitute the
    built-in forwarding with one based on a library, such as ffi, that