* parse.y (resolve_expression_name): Permit instance variables from
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jan 2001 03:00:56 +0000 (03:00 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jan 2001 03:00:56 +0000 (03:00 +0000)
enclosing context in super constructor call.
(resolve_qualified_expression_name): Permit enclosing class's
qualified "this" in super constructor call.

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

gcc/java/ChangeLog
gcc/java/parse.y

index bf0b323..9b9dd58 100644 (file)
@@ -1,3 +1,10 @@
+2001-01-11  Bryce McKinlay  <bryce@albatross.co.nz>
+
+       * parse.y (resolve_expression_name): Permit instance variables from
+       enclosing context in super constructor call.
+       (resolve_qualified_expression_name): Permit enclosing class's qualified
+       "this" in super constructor call.
+
 2001-01-10  Mark Mitchell  <mark@codesourcery.com>
 
        * class.c (build_utf8_ref): Remove last argument in call to
index a59e198..873de30 100644 (file)
@@ -8954,7 +8954,8 @@ resolve_expression_name (id, orig)
                }
              /* Instance variables can't appear as an argument of
                 an explicit constructor invocation */
-             if (!fs && ctxp->explicit_constructor_p)
+             if (!fs && ctxp->explicit_constructor_p
+                 && !enclosing_context_p (DECL_CONTEXT (decl), current_class))
                {
                  parse_error_context
                    (id, "Can't reference `%s' before the superclass constructor has been called", IDENTIFIER_POINTER (name));
@@ -9320,7 +9321,8 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
                (wfl, "Keyword `this' used outside allowed context");
              return 1;
            }
-         if (ctxp->explicit_constructor_p)
+         if (ctxp->explicit_constructor_p
+             && type == current_class)
            {
              parse_error_context (wfl, "Can't reference `this' before the superclass constructor has been called");
              return 1;