Commit 5678a5a3 by Nicola Pero Committed by Nicola Pero

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
parent 4d15cfbc
2011-04-15 Nicola Pero <nicola.pero@meta-innovation.com> 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. * objc-act.c (objc_get_interface_ivars): Removed.
(objc_detect_field_duplicates): New. (objc_detect_field_duplicates): New.
(hash_instance_variable): New. (hash_instance_variable): New.
......
...@@ -6367,6 +6367,35 @@ is_private (tree decl) ...@@ -6367,6 +6367,35 @@ is_private (tree decl)
DECL_NAME (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. */ /* We have an instance variable reference;, check to see if it is public. */
int int
...@@ -6397,7 +6426,7 @@ objc_is_public (tree expr, tree identifier) ...@@ -6397,7 +6426,7 @@ objc_is_public (tree expr, tree identifier)
return 0; return 0;
} }
if ((decl = is_ivar (get_class_ivars (klass, true), identifier))) if ((decl = ivar_of_class (klass, identifier)))
{ {
if (TREE_PUBLIC (decl)) if (TREE_PUBLIC (decl))
return 1; return 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment