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

In libobjc/:
2010-10-15  Nicola Pero  <nicola.pero@meta-innovation.com>
        
        * objc/runtime.h (class_copyPropertyList): New.
        (class_getProperty): New.
        (property_getAttributes): New.
        (property_getName): New.
        * ivars.c (class_copyPropertyList): New.
        (class_getProperty): New.
        (property_getAttributes): New.
        (property_getName): New.

From-SVN: r165531
This commit is contained in:
Nicola Pero 2010-10-15 23:42:02 +00:00 committed by Nicola Pero
parent 2edb37a65e
commit 8437e063bc
3 changed files with 116 additions and 20 deletions

View File

@ -1,3 +1,14 @@
2010-10-15 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/runtime.h (class_copyPropertyList): New.
(class_getProperty): New.
(property_getAttributes): New.
(property_getName): New.
* ivars.c (class_copyPropertyList): New.
(class_getProperty): New.
(property_getAttributes): New.
(property_getName): New.
2010-10-15 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-private/runtime.h (__objc_update_classes_with_methods): New.

View File

@ -228,3 +228,56 @@ struct objc_ivar ** class_copyIvarList (Class class_, unsigned int *numberOfRetu
return returnValue;
}
const char *
property_getName (struct objc_property * property __attribute__ ((__unused__)))
{
if (property == NULL)
return NULL;
/* TODO: New ABI. */
/* The current ABI does not have any information on properties. */
return NULL;
}
const char *
property_getAttributes (struct objc_property * property __attribute__ ((__unused__)))
{
if (property == NULL)
return NULL;
/* TODO: New ABI. */
/* The current ABI does not have any information on properties. */
return NULL;
}
struct objc_property *
class_getProperty (Class class_ __attribute__ ((__unused__)),
const char *propertyName __attribute__ ((__unused__)))
{
if (class_ == NULL || propertyName == NULL)
return NULL;
/* TODO: New ABI. */
/* The current ABI does not have any information on class properties. */
return NULL;
}
struct objc_property **
class_copyPropertyList (Class class_ __attribute__ ((__unused__)),
unsigned int *numberOfReturnedProperties __attribute__ ((__unused__)))
{
if (class_ == Nil)
{
if (numberOfReturnedProperties)
*numberOfReturnedProperties = 0;
return NULL;
}
/* TODO: New ABI. */
/* The current ABI does not have any information on class properties. */
if (numberOfReturnedProperties)
*numberOfReturnedProperties = 0;
return NULL;
}

View File

@ -305,6 +305,37 @@ objc_EXPORT const char * ivar_getTypeEncoding (Ivar variable);
will be filled with the number of instance variables returned. */
objc_EXPORT Ivar * class_copyIvarList (Class class_, unsigned int *numberOfReturnedIvars);
/* Return the name of the property. Return NULL if 'property' is
NULL. */
objc_EXPORT const char * property_getName (Property property);
/* Return the attributes of the property as a string. Return NULL if
'property' is NULL. */
objc_EXPORT const char * property_getAttributes (Property property);
/* Return the property with name 'propertyName' of the class 'class_'.
This function returns NULL if the required property can not be
found. Return NULL if 'class_' or 'propertyName' is NULL.
Note that the traditional ABI does not store the list of properties
of a class in a compiled module, so the traditional ABI will always
return NULL. */
objc_EXPORT Property class_getProperty (Class class_, const char *propertyName);
/* Return all the properties of the class. The return value
of the function is a pointer to an area, allocated with malloc(),
that contains all the properties of the class. It does not
include properties of superclasses. The list is terminated
by NULL. Optionally, if you pass a non-NULL
'numberOfReturnedIvars' pointer, the unsigned int that it points to
will be filled with the number of properties returned.
Note that the traditional ABI does not store the list of properties
of a class in a compiled module, so the traditional ABI will always
return an empty list. */
objc_EXPORT Property * class_copyPropertyList
(Class class_, unsigned int *numberOfReturnedProperties);
/** Implementation: the following functions are in class.c. */
@ -422,6 +453,27 @@ objc_EXPORT void class_setVersion (Class class_, int version);
for all classes). */
objc_EXPORT size_t class_getInstanceSize (Class class_);
/* Change the implementation of the method. It also searches all
classes for any class implementing the method, and replaces the
existing implementation with the new one. For that to work,
'method' must be a method returned by class_getInstanceMethod() or
class_getClassMethod() as the matching is done by comparing the
pointers; in that case, only the implementation in the class is
modified. Return the previous implementation that has been
replaced. If method or implementation is NULL, do nothing and
return NULL. */
objc_EXPORT IMP
method_setImplementation (Method method, IMP implementation);
/* Swap the implementation of two methods in a single, atomic
operation. This is equivalent to getting the implementation of
each method and then calling method_setImplementation() on the
other one. For this to work, the two methods must have been
returned by class_getInstanceMethod() or class_getClassMethod().
If 'method_a' or 'method_b' is NULL, do nothing. */
objc_EXPORT void
method_exchangeImplementations (Method method_a, Method method_b);
/** Implementation: the following functions are in sendmsg.c. */
@ -545,26 +597,6 @@ objc_EXPORT void method_getReturnType (Method method, char *returnValue,
objc_EXPORT void method_getArgumentType (Method method, unsigned int argumentNumber,
char *returnValue, size_t returnValueSize);
/* Change the implementation of the method. It also searches all
classes for any class implementing the method, and replaces the
existing implementation with the new one. For that to work,
'method' must be a method returned by class_getInstanceMethod() or
class_getClassMethod() as the matching is done by comparing the
pointers; in that case, only the implementation in the class is
modified. Return the previous implementation that has been
replaced. If method or implementation is NULL, do nothing and
return NULL. */
objc_EXPORT IMP
method_setImplementation (Method method, IMP implementation);
/* Swap the implementation of two methods in a single, atomic
operation. This is equivalent to getting the implementation of
each method and then calling method_setImplementation() on the
other one. For this to work, the two methods must have been
returned by class_getInstanceMethod() or class_getClassMethod().
If 'method_a' or 'method_b' is NULL, do nothing. */
objc_EXPORT void
method_exchangeImplementations (Method method_a, Method method_b);
/** Implementation: the following functions are in protocols.c. */