diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2010-10-09 20:11:02 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2010-10-09 20:11:02 +0000 |
commit | 6176c2a993ffb40b937e30bbce1f7cce171c92ec (patch) | |
tree | 0c429c12b12d0a09da825834eb01fa1e1dd730ef /libobjc/objc/message.h | |
parent | 5074d72c59a2d98e1c5162b1144d060d319bd519 (diff) | |
download | gcc-6176c2a993ffb40b937e30bbce1f7cce171c92ec.zip gcc-6176c2a993ffb40b937e30bbce1f7cce171c92ec.tar.gz gcc-6176c2a993ffb40b937e30bbce1f7cce171c92ec.tar.bz2 |
In libobjc/: 2010-10-09 Nicola Pero <nicola.pero@meta-innovation.com>
In libobjc/:
2010-10-09 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/objc-api.h (struct objc_super, Super, Super_t,
objc_msg_lookup_super, objc_msg_sendv, objc_msg_forward,
objc_msg_forward2): Declarations moved to objc/message.h. Include
message.h here.
* objc/message.h: Added such declarations; updated comments.
From-SVN: r165236
Diffstat (limited to 'libobjc/objc/message.h')
-rw-r--r-- | libobjc/objc/message.h | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/libobjc/objc/message.h b/libobjc/objc/message.h index 6d47636..f0038e7 100644 --- a/libobjc/objc/message.h +++ b/libobjc/objc/message.h @@ -33,7 +33,16 @@ extern "C" { #include "objc.h" #include "objc-decls.h" -/* This file includes declarations of the messaging functions and types. */ +/* This file includes declarations of the messaging functions and + types. +*/ + +/* Compatibility note: the messaging function is one area where the + GNU runtime and the Apple/NeXT runtime differ significantly. If + you can, it is recommended that you use higher-level facilities + (provided by a Foundation library such as GNUstep Base) to perform + forwarding or other advanced messaging tricks. +*/ typedef void* retval_t; /* return value */ typedef void(*apply_t)(void); /* function pointer */ @@ -44,7 +53,37 @@ typedef union arglist { objc_EXPORT IMP objc_msg_lookup(id receiver, SEL op); -/* TODO: Add the remaining messaging declarations from objc-api.h. */ +/* + * 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. + */ +typedef struct objc_super { + id self; /* Id of the object sending the message. */ +#ifdef __cplusplus + /* The new version of the API will always use 'super_class'. */ + Class super_class; +#else + Class class; /* Object's super class. */ +#endif +} Super, *Super_t; + +objc_EXPORT IMP objc_msg_lookup_super(Super_t super, SEL sel); + +objc_EXPORT retval_t objc_msg_sendv(id, SEL, arglist_t); + +/* + * Hooks for method forwarding. This makes it easy to substitute a + * library, such as ffcall, that implements closures, thereby avoiding + * gcc's __builtin_apply problems. __objc_msg_forward2's result will + * be preferred over that of __objc_msg_forward if both are set and + * return non-NULL. + * + * TODO: The API should define objc_set_msg_forward_handler () or + * similar instead of these hooks. + */ +objc_EXPORT IMP (*__objc_msg_forward)(SEL); +objc_EXPORT IMP (*__objc_msg_forward2)(id, SEL); #ifdef __cplusplus } |