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

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

        * objc-foreach.c: Include objc-private/common.h.
        * objc/deprecated/METHOD_NULL.h: New file.
        * objc/objc-api.h: Include deprecated/METHOD_NULL.h instead of
        defining METHOD_NULL here.
        * Makefile.in (OBJC_DEPRECATED_H): Added METHOD_NULL.h.
        * Object.m ([+instancesRespondTo:]): Use (Method_t)0 instead of
        METHOD_NULL.
        ([-respondsTo:]): Same change.
        * objc/objc-api.h (method_get_imp): Converted it into a normal
        function so that we can hide the internals of struct objc_method.
        * sendmsg.c (method_get_imp): Implemented.

From-SVN: r165241
This commit is contained in:
Nicola Pero 2010-10-09 22:22:23 +00:00 committed by Nicola Pero
parent 3a42502df4
commit cf3822f181
7 changed files with 31 additions and 11 deletions

View File

@ -1,3 +1,17 @@
2010-10-10 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-foreach.c: Include objc-private/common.h.
* objc/deprecated/METHOD_NULL.h: New file.
* objc/objc-api.h: Include deprecated/METHOD_NULL.h instead of
defining METHOD_NULL here.
* Makefile.in (OBJC_DEPRECATED_H): Added METHOD_NULL.h.
* Object.m ([+instancesRespondTo:]): Use (Method_t)0 instead of
METHOD_NULL.
([-respondsTo:]): Same change.
* objc/objc-api.h (method_get_imp): Converted it into a normal
function so that we can hide the internals of struct objc_method.
* sendmsg.c (method_get_imp): Implemented.
2010-10-09 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/objc-api.h (struct objc_super, Super, Super_t,

View File

@ -131,6 +131,7 @@ OBJC_H = \
# User-visible header files containing deprecated APIs, from the
# objc/deprecated directory
OBJC_DEPRECATED_H = \
METHOD_NULL.h \
MetaClass.h \
Object.h \
STR.h \

View File

@ -172,14 +172,14 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ (BOOL)instancesRespondTo:(SEL)aSel
{
return class_get_instance_method(self, aSel)!=METHOD_NULL;
return class_get_instance_method(self, aSel) != (Method_t)0;
}
- (BOOL)respondsTo:(SEL)aSel
{
return ((object_is_instance(self)
?class_get_instance_method(self->isa, aSel)
:class_get_class_method(self->isa, aSel))!=METHOD_NULL);
:class_get_class_method(self->isa, aSel)) != (Method_t)0);
}
+ (IMP)instanceMethodFor:(SEL)aSel

View File

@ -27,8 +27,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
objc_set_enumeration_mutation_handler(), the two functions required
to handle mutations during a fast enumeration.
*/
#include "objc/runtime.h" /* For objc_enumerationMutation() and objc_set_enumeration_mutation_handler() */
#include "objc-private/common.h"
#include "objc-private/error.h" /* For _objc_abort() */
#include "objc/runtime.h" /* For objc_enumerationMutation() and objc_set_enumeration_mutation_handler() */
/* The enumeration mutation handler currently in use. */
static void (*__objc_enumeration_mutation_handler)(id) = NULL;

View File

@ -0,0 +1,2 @@
/* For functions which return Method_t */
#define METHOD_NULL (Method_t)0

View File

@ -40,9 +40,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
extern "C" {
#endif /* __cplusplus */
/* For functions which return Method_t */
#define METHOD_NULL (Method_t)0
/* Boolean typedefs */
#include "deprecated/METHOD_NULL.h"
/* Method descriptor returned by introspective Object methods.
This is really just the first part of the more complete objc_method
structure defined below and used internally by the runtime. */
@ -441,11 +440,7 @@ extern void class_ivar_set_gcinvisible (Class _class,
const char* ivarname,
BOOL gcInvisible);
static inline IMP
method_get_imp(Method_t method)
{
return (method!=METHOD_NULL)?method->method_imp:(IMP)0;
}
objc_EXPORT IMP method_get_imp(Method_t method);
objc_EXPORT IMP get_imp (Class _class, SEL sel);

View File

@ -194,6 +194,13 @@ get_imp (Class class, SEL sel)
return res;
}
/* Given a method, return its implementation. */
IMP
method_get_imp (Method_t method)
{
return (method != (Method_t)0) ? method->method_imp : (IMP)0;
}
/* Query if an object can respond to a selector, returns YES if the
object implements the selector otherwise NO. Does not check if the
method can be forwarded. */