Fix instance variable lookup to match OSX

main
rfm 16 years ago
parent 719b540317
commit 607bc433c9

@ -135,6 +135,10 @@ Method class_getInstanceMethod(Class aClass, SEL aSelector);
size_t class_getInstanceSize(Class cls);
/** Look up the named instance variable in the class (and its superclasses)
* returning a pointer to the instance variable definition or a null
* pointer if no instance variable of that name was found.
*/
Ivar class_getInstanceVariable(Class cls, const char* name);
const char *class_getIvarLayout(Class cls);

@ -354,20 +354,33 @@ size_t class_getInstanceSize(Class cls)
return cls->instance_size;
}
Ivar class_getInstanceVariable(Class cls, const char* name)
Ivar
class_getInstanceVariable(Class cls, const char* name)
{
struct objc_ivar_list *ivarlist = cls->ivars;
if (NULL == ivarlist) { return NULL; }
for (int i=0 ; i<ivarlist->ivar_count ; i++)
if (name != NULL)
{
while (cls != Nil)
{
Ivar ivar = &ivarlist->ivar_list[i];
if (strcmp(ivar->ivar_name, name) == 0)
struct objc_ivar_list *ivarlist = cls->ivars;
int i;
if (NULL == ivarlist)
{
return NULL;
}
for (i = 0; i < ivarlist->ivar_count; i++)
{
Ivar ivar = &ivarlist->ivar_list[i];
if (strcmp(ivar->ivar_name, name) == 0)
{
return ivar;
return ivar;
}
}
cls = class_getSuperclass(cls);
}
return NULL;
}
return NULL;
}
// The format of the char* is undocumented. This function is only ever used in

Loading…
Cancel
Save