In gcc/objc/: 2011-04-15 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/objc/: 2011-04-15 Nicola Pero <nicola.pero@meta-innovation.com> * objc-act.c (ivar_of_class): New. (objc_is_public): Use ivar_of_class. From-SVN: r172523
This commit is contained in:
parent
4d15cfbcee
commit
5678a5a3bf
2 changed files with 35 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-04-15 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* objc-act.c (ivar_of_class): New.
|
||||
(objc_is_public): Use ivar_of_class.
|
||||
|
||||
2011-04-15 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* objc-act.c (objc_get_interface_ivars): Removed.
|
||||
|
|
|
@ -6367,6 +6367,35 @@ is_private (tree decl)
|
|||
DECL_NAME (decl)));
|
||||
}
|
||||
|
||||
/* Searches all the instance variables of 'klass' and of its
|
||||
superclasses for an instance variable whose name (identifier) is
|
||||
'ivar_name_ident'. Return the declaration (DECL) of the instance
|
||||
variable, if found, or NULL_TREE, if not found. */
|
||||
static inline tree
|
||||
ivar_of_class (tree klass, tree ivar_name_ident)
|
||||
{
|
||||
/* First, look up the ivar in CLASS_RAW_IVARS. */
|
||||
tree decl_chain = CLASS_RAW_IVARS (klass);
|
||||
|
||||
for ( ; decl_chain; decl_chain = DECL_CHAIN (decl_chain))
|
||||
if (DECL_NAME (decl_chain) == ivar_name_ident)
|
||||
return decl_chain;
|
||||
|
||||
/* If not found, search up the class hierarchy. */
|
||||
while (CLASS_SUPER_NAME (klass))
|
||||
{
|
||||
klass = lookup_interface (CLASS_SUPER_NAME (klass));
|
||||
|
||||
decl_chain = CLASS_RAW_IVARS (klass);
|
||||
|
||||
for ( ; decl_chain; decl_chain = DECL_CHAIN (decl_chain))
|
||||
if (DECL_NAME (decl_chain) == ivar_name_ident)
|
||||
return decl_chain;
|
||||
}
|
||||
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
/* We have an instance variable reference;, check to see if it is public. */
|
||||
|
||||
int
|
||||
|
@ -6397,7 +6426,7 @@ objc_is_public (tree expr, tree identifier)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if ((decl = is_ivar (get_class_ivars (klass, true), identifier)))
|
||||
if ((decl = ivar_of_class (klass, identifier)))
|
||||
{
|
||||
if (TREE_PUBLIC (decl))
|
||||
return 1;
|
||||
|
|
Loading…
Add table
Reference in a new issue