From 53f672caaac6f94342d74119d927c790bfca9e9d Mon Sep 17 00:00:00 2001 From: Nicola Pero Date: Wed, 15 Dec 2010 19:47:18 +0000 Subject: [PATCH] In libobjc/: 2010-12-15 Nicola Pero In libobjc/: 2010-12-15 Nicola Pero * 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'. From-SVN: r167869 --- libobjc/ChangeLog | 10 ++++++++++ libobjc/objc/message.h | 25 ++++++++++++++++++++----- libobjc/sendmsg.c | 2 +- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index bfcda715e76..a636c8ba4ef 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,5 +1,15 @@ 2010-12-15 Nicola Pero + * 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 + * objc/message.h: Update comments, reindented code and moved deprecated types and functions at the end of the file. No code changes. diff --git a/libobjc/objc/message.h b/libobjc/objc/message.h index 3eda27e1d2a..66f0160c1e8 100644 --- a/libobjc/objc/message.h +++ b/libobjc/objc/message.h @@ -91,25 +91,40 @@ objc_EXPORT IMP objc_msg_lookup (id receiver, SEL op); /* 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 diff --git a/libobjc/sendmsg.c b/libobjc/sendmsg.c index 48605fc67f8..07452cceb79 100644 --- a/libobjc/sendmsg.c +++ b/libobjc/sendmsg.c @@ -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); -- 2.11.4.GIT