mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 09:04:13 +00:00
Use osx style ivar lookup correctly
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@29808 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
05b7bfa194
commit
470d0b18f2
2 changed files with 17 additions and 22 deletions
|
@ -212,16 +212,8 @@ GSObjCFindVariable(id obj, const char *name,
|
|||
const char **type, unsigned int *size, int *offset)
|
||||
{
|
||||
Class class = object_getClass(obj);
|
||||
Ivar ivar = 0;
|
||||
Ivar ivar = class_getInstanceVariable(class, name);
|
||||
|
||||
while (class != 0 && ivar == 0)
|
||||
{
|
||||
ivar = class_getInstanceVariable(class, name);
|
||||
if (ivar == 0)
|
||||
{
|
||||
class = class_getSuperclass(class);
|
||||
}
|
||||
}
|
||||
if (ivar == 0)
|
||||
{
|
||||
return NO;
|
||||
|
|
|
@ -409,25 +409,28 @@ class_getInstanceSize(Class cls)
|
|||
Ivar
|
||||
class_getInstanceVariable(Class cls, const char *name)
|
||||
{
|
||||
while (cls != Nil)
|
||||
if (name != NULL)
|
||||
{
|
||||
struct objc_ivar_list *ivarlist = cls->ivars;
|
||||
int i;
|
||||
|
||||
if (NULL == ivarlist)
|
||||
while (cls != Nil)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
for (i = 0; i < ivarlist->ivar_count; i++)
|
||||
{
|
||||
Ivar ivar = &ivarlist->ivar_list[i];
|
||||
struct objc_ivar_list *ivarlist = cls->ivars;
|
||||
|
||||
if (strcmp(ivar->ivar_name, name) == 0)
|
||||
if (ivarlist != NULL)
|
||||
{
|
||||
return ivar;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ivarlist->ivar_count; i++)
|
||||
{
|
||||
Ivar ivar = &ivarlist->ivar_list[i];
|
||||
|
||||
if (strcmp(ivar->ivar_name, name) == 0)
|
||||
{
|
||||
return ivar;
|
||||
}
|
||||
}
|
||||
}
|
||||
cls = class_getSuperclass(cls);
|
||||
}
|
||||
cls = class_getSuperclass(cls);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue