aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@waitaki.otago.ac.nz>2002-03-27 08:27:27 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2002-03-27 08:27:27 +0000
commit058330951de0cd5db55aa5ece905689faf0de920 (patch)
tree8ae6cfc4e900d10e7d90077f2bd75059564303ee /gcc/java
parent473aef78b4cd09a11ff492d1a3ae6945bbdaf1bd (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/java/expr.c10
-rw-r--r--gcc/java/parse.y7
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;
}