[multiple changes]
authorAlexandre Petit-Bianco <apbianco@redhat.com>
Wed, 11 Jul 2001 07:33:43 +0000 (00:33 -0700)
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>
Wed, 11 Jul 2001 07:33:43 +0000 (00:33 -0700)
2001-07-10  Alexandre Petit-Bianco  <apbianco@redhat.com>

* lang-specs.h: Forbit the use if `-femit-class-file{s}' without
`-fsyntax-only.' Fixes PR java/3248

2001-07-10  Alexandre Petit-Bianco  <apbianco@redhat.com>

* jcf-io.c (find_class): Clarified error message. Fixes PR java/2603

2001-07-10  Alexandre Petit-Bianco  <apbianco@redhat.com>

* parse.h (INNER_ENCLOSING_SCOPE_CHECK): No `this' is fine if the
current function is static. Fixes PR java/1970

2001-07-09  Alexandre Petit-Bianco  <apbianco@redhat.com>

* parse.y (patch_method_invocation): Add enclosing context to ctor
calls if necessary. Fixes PR java/2953

2001-07-09  Alexandre Petit-Bianco  <apbianco@redhat.com>

* parse.y (resolve_package): Abort if qualified expression member
isn't right.
(qualify_ambiguous_name): Don't qualify as type if `this' in use.
Fixes PR java/1391

(http://gcc.gnu.org/ml/gcc-patches/2001-07/msg00701.html )

From-SVN: r43927

gcc/java/ChangeLog
gcc/java/jcf-io.c
gcc/java/lang-specs.h
gcc/java/parse.h
gcc/java/parse.y

index fd94fb746e1e4d3c6e0360597b1aafdd61d320ca..6a138b7e0b7898abd51458fc8ce6a4e0f8da108f 100644 (file)
@@ -1,3 +1,29 @@
+2001-07-10  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * lang-specs.h: Forbit the use if `-femit-class-file{s}' without
+       `-fsyntax-only.' Fixes PR java/3248
+
+2001-07-10  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * jcf-io.c (find_class): Clarified error message. Fixes PR java/2603
+
+2001-07-10  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.h (INNER_ENCLOSING_SCOPE_CHECK): No `this' is fine if the
+       current function is static. Fixes PR java/1970
+
+2001-07-09  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.y (patch_method_invocation): Add enclosing context to ctor
+       calls if necessary. Fixes PR java/2953
+
+2001-07-09  Alexandre Petit-Bianco  <apbianco@redhat.com>
+
+       * parse.y (resolve_package): Abort if qualified expression member
+       isn't right.
+       (qualify_ambiguous_name): Don't qualify as type if `this' in use.
+       Fixes PR java/1391
+
 2001-07-07  Zack Weinberg  <zackw@stanford.edu>
 
        * verify.c: Don't use // comments.
@@ -31,8 +57,7 @@
 2001-07-03  Alexandre Petit-Bianco  <apbianco@redhat.com>
 
        * parse.y (resolve_expression_name): Improved error message for
-       inner class cases.
-       Fixes PR java/1958
+       inner class cases. Fixes PR java/1958
 
 2001-06-28  Gabriel Dos Reis  <gdr@codesourcery.com>
 
index f254438050667dd527c651c6f5b26a6d243efb0a..f8a0f591db97861bf2ff535537bc02301ffb2fe6 100644 (file)
@@ -405,16 +405,8 @@ DEFUN(find_class, (classname, classname_length, jcf, source_ok),
      up no matter what. FIXME. */
   if (! java && ! class && java_buf.st_mtime > class_buf.st_mtime)
     {
-      char *stripped_class_name = xstrdup (classname);
-      int i = strlen (stripped_class_name);
-      
-      while (stripped_class_name [i] != '.')
-       i--;
-      
-      stripped_class_name [i] = '\0';
       if (flag_newer)
-       warning ("Source file for class `%s' is newer than its matching class file. Source file used instead", stripped_class_name);
-      free (stripped_class_name);
+       warning ("Source file for class `%s' is newer than its matching class file. Source file `%s' used instead", classname, java_buffer);
       class = -1;
     }
 
index fa139aa24ecc6ed5f939dd3aa63cd6dd14246583..3aaed8c103fd771483047d216dedbfc2a39bbde7 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for specs for the GNU compiler for the Java(TM) language.
-   Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -32,6 +32,8 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
   {"@java",
    "%{fjni:%{femit-class-files:%e-fjni and -femit-class-files are incompatible}}\
     %{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}}\
+    %{femit-class-file:%{!fsyntax-only:%e-femit-class-file should used along with -fsyntax-only}}\
+    %{femit-class-files:%{!fsyntax-only:%e-femit-class-file should used along with -fsyntax-only}}\
     %{!E:jc1 %i %(jc1) %(cc1_options) %{+e*} %{I*}\
              %{MD} %{MMD} %{M} %{MM} %{MA} %{MT*} %{MF*}\
              %{!fsyntax-only:%(invoke_as)}}", 0},
index c11e70d9295f2efa27a547fdde59d5d485f38d3e..798d139177066c7cd85546efae1b357e50e0430c 100644 (file)
@@ -844,8 +844,11 @@ struct parser_ctxt {
              (TREE_TYPE (DECL_CONTEXT                                        \
                          (TYPE_NAME (TREE_TYPE (TREE_TYPE (current_this))))),\
               TREE_TYPE (DECL_CONTEXT (TYPE_NAME (T)))))                     \
-       /* We don't have a this. */                                           \
-       || !current_this))
+       /* We don't have a this, which is OK if the current function is        \
+         static. */                                                          \
+       || (!current_this                                                     \
+          && current_function_decl                                           \
+           && ! METHOD_STATIC (current_function_decl))))
 
 /* Push macro. First argument to PUSH_CPC is a DECL_TYPE, second
    argument is the unqualified currently parsed class name.  */
index e4e682b453b85b6d31a1cc9458d4642a6341fb96..8c1806991de2b37cf3d8863cb4fa5bc8a7015474 100644 (file)
@@ -6818,6 +6818,10 @@ resolve_package (pkg, next)
     for (acc = NULL_TREE, current = EXPR_WFL_QUALIFICATION (pkg); 
         current; current = TREE_CHAIN (current))
       {
+       /* If we don't have what we're expecting, exit now. TYPE_NAME
+          will be null and the error caught later. */
+       if (TREE_CODE (QUAL_WFL (current)) != EXPR_WITH_FILE_LOCATION)
+         break;
        acc = merge_qualified_name (acc, EXPR_WFL_NODE (QUAL_WFL (current)));
        if ((type_name = resolve_no_layout (acc, NULL_TREE)))
          {
@@ -10120,7 +10124,9 @@ patch_method_invocation (patch, primary, where, from_super,
      to have an enclosing context passed as a second parameter (the
      constructor is one of an inner class. We extract it from the
      current function.  */
-  if (is_super_init && PURE_INNER_CLASS_TYPE_P (DECL_CONTEXT (list)))
+  if ((is_super_init || 
+       (TREE_CODE (patch) == CALL_EXPR && name == this_identifier_node))
+      && PURE_INNER_CLASS_TYPE_P (DECL_CONTEXT (list)))
     {
       tree enclosing_decl = DECL_CONTEXT (TYPE_NAME (current_class));
       tree extra_arg;
@@ -10986,9 +10992,12 @@ qualify_ambiguous_name (id)
        of the compilation unit containing NAME,
      - NAME is declared by exactly on type-import-on-demand declaration
      of the compilation unit containing NAME. 
-     - NAME is actually a STRING_CST. */
-  else if (TREE_CODE (name) == STRING_CST || TREE_CODE (name) == INTEGER_CST
-          || (decl = resolve_and_layout (name, NULL_TREE)))
+     - NAME is actually a STRING_CST.
+     This can't happen if the expression was qualified by `this.' */
+  else if (! this_found &&
+          (TREE_CODE (name) == STRING_CST ||
+           TREE_CODE (name) == INTEGER_CST ||
+           (decl = resolve_and_layout (name, NULL_TREE))))
     {
       RESOLVE_TYPE_NAME_P (qual_wfl) = 1;
       QUAL_RESOLUTION (qual) = decl;