re PR java/5850 (resolving inherited member variables with same name works poorly)

Fix for PR java/5850:
        * parse.y (lookup_field_wrapper): Call itself recursively for enclosing
        context if field was not found in the current scope.
        * expr.c (lookup_field): Don't look in enclosing contexts.

From-SVN: r51438
This commit is contained in:
Bryce McKinlay 2002-03-27 08:27:27 +00:00 committed by Bryce McKinlay
parent 473aef78b4
commit 058330951d
3 changed files with 14 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2002-03-27 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
Fix for PR java/5850:
* parse.y (lookup_field_wrapper): Call itself recursively for enclosing
context if field was not found in the current scope.
* expr.c (lookup_field): Don't look in enclosing contexts.
2002-03-26 Tom Tromey <tromey@redhat.com>
Fix for PR java/5942:

View File

@ -1517,16 +1517,6 @@ lookup_field (typep, name)
if (DECL_NAME (field) == name)
return field;
/* If *typep is an innerclass, lookup the field in its enclosing
contexts */
if (INNER_CLASS_TYPE_P (*typep))
{
tree outer_type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (*typep)));
if ((field = lookup_field (&outer_type, name)))
return field;
}
/* Process implemented interfaces. */
basetype_vec = TYPE_BINFO_BASETYPES (*typep);
n = TREE_VEC_LENGTH (basetype_vec);

View File

@ -4209,6 +4209,13 @@ lookup_field_wrapper (class, name)
decl = lookup_field (&type, name);
}
/* If the field still hasn't been found, try the next enclosing context. */
if (!decl && INNER_CLASS_TYPE_P (class))
{
tree outer_type = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (class)));
decl = lookup_field_wrapper (outer_type, name);
}
java_parser_context_restore_global ();
return decl == error_mark_node ? NULL : decl;
}