Fix for PR java/5850:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Mar 2002 08:27:27 +0000 (08:27 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Mar 2002 08:27:27 +0000 (08:27 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51438 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/expr.c
gcc/java/parse.y

index 8549fcb..8fc8e7b 100644 (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:
index 2a8e2e3..a1ec332 100644 (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);
index e8ef2ef..50ed45d 100644 (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;
 }