diff options
author | Bryce McKinlay <bryce@waitaki.otago.ac.nz> | 2002-03-27 08:27:27 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2002-03-27 08:27:27 +0000 |
commit | 058330951de0cd5db55aa5ece905689faf0de920 (patch) | |
tree | 8ae6cfc4e900d10e7d90077f2bd75059564303ee /gcc/java | |
parent | 473aef78b4cd09a11ff492d1a3ae6945bbdaf1bd (diff) | |
download | gcc-058330951de0cd5db55aa5ece905689faf0de920.zip gcc-058330951de0cd5db55aa5ece905689faf0de920.tar.gz gcc-058330951de0cd5db55aa5ece905689faf0de920.tar.bz2 |
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
Diffstat (limited to 'gcc/java')
-rw-r--r-- | gcc/java/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/java/expr.c | 10 | ||||
-rw-r--r-- | gcc/java/parse.y | 7 |
3 files changed, 14 insertions, 10 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 8549fcb..8fc8e7b 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -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: diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 2a8e2e3..a1ec332 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -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); diff --git a/gcc/java/parse.y b/gcc/java/parse.y index e8ef2ef..50ed45d 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -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; } |