OSDN Git Service

* lang-options.h: Mention -Wout-of-date.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Nov 2000 04:57:33 +0000 (04:57 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Nov 2000 04:57:33 +0000 (04:57 +0000)
* jcf-dump.c (flag_newer): New global.
* gjavah.c (flag_newer): New global.
* jcf-io.c (find_class): Only warn when flag_newer set.
* lang.c (flag_newer): New global.
(struct string_option): New declaration.
(lang_W_options): New global.
(process_option_with_no): New function.
(lang_decode_option): Use it.

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

gcc/java/ChangeLog
gcc/java/gjavah.c
gcc/java/java-tree.h
gcc/java/jcf-dump.c
gcc/java/jcf-io.c
gcc/java/lang-options.h
gcc/java/lang.c

index 3aeede4..6528d40 100644 (file)
@@ -1,5 +1,15 @@
 2000-11-03  Tom Tromey  <tromey@cygnus.com>
 
+       * lang-options.h: Mention -Wout-of-date.
+       * jcf-dump.c (flag_newer): New global.
+       * gjavah.c (flag_newer): New global.
+       * jcf-io.c (find_class): Only warn when flag_newer set.
+       * lang.c (flag_newer): New global.
+       (struct string_option): New declaration.
+       (lang_W_options): New global.
+       (process_option_with_no): New function.
+       (lang_decode_option): Use it.
+
        * class.c (cxx_keyword_p): Accept keywords with trailing `$'s.
        * gjavah.c (cxx_keyword_subst): Handle any number of trailing
        `$'.
index f49b717..6e6075e 100644 (file)
@@ -47,6 +47,10 @@ static int found_error = 0;
 /* Nonzero if we're generating JNI output.  */
 static int flag_jni = 0;
 
+/* When non zero, warn when source file is newer than matching class
+   file.  */
+int flag_newer = 1;
+
 /* Directory to place resulting files in. Set by -d option. */
 const char *output_directory = "";
 
index 8196ea6..2753367 100644 (file)
@@ -162,6 +162,10 @@ extern int flag_redundant;
 extern int flag_not_overriding;
 extern int flag_static_local_jdk1_1;
 
+/* When non zero, warn when source file is newer than matching class
+   file.  */
+extern int flag_newer;
+
 /* When non zero, call a library routine to do integer divisions. */
 extern int flag_use_divide_subroutine;
 
index 88b188b..1becf16 100644 (file)
@@ -71,6 +71,10 @@ int flag_print_fields = 1;
 int flag_print_methods = 1;
 int flag_print_attributes = 1;
 
+/* When non zero, warn when source file is newer than matching class
+   file.  */
+int flag_newer = 1;
+
 /* Print names of classes that have a "main" method. */
 int flag_print_main = 0;
 
index 7bd4fe8..db19208 100644 (file)
@@ -403,7 +403,8 @@ DEFUN(find_class, (classname, classname_length, jcf, source_ok),
        i--;
       
       stripped_class_name [i] = '\0';
-      warning ("Source file for class `%s' is newer than its matching class file. Source file used instead", stripped_class_name);
+      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);
       class = -1;
     }
index 3d4ec6d..25a5015 100644 (file)
@@ -57,3 +57,4 @@ DEFINE_LANG_NAME ("Java")
     "Warn if modifiers are specified when not necessary"},
   { "-Wunsupported-jdk11", "Warn if `final' local variables are specified"},
   { "-Wextraneous-semicolon", "Warn if deprecated empty statements are found"},
+  { "-Wout-of-date", "Warn if .class files are out of date" },
index 8065fc7..b90abdb 100644 (file)
@@ -37,10 +37,20 @@ The Free Software Foundation is independent of Sun Microsystems, Inc.  */
 #include "xref.h"
 #include "ggc.h"
 
+struct string_option
+{
+  const char *string;
+  int *variable;
+  int on_value;
+};
+
 static void put_decl_string PARAMS ((const char *, int));
 static void put_decl_node PARAMS ((tree));
 static void java_dummy_print PARAMS ((const char *));
 static void lang_print_error PARAMS ((const char *));
+static int process_option_with_no PARAMS ((char *,
+                                          struct string_option *,
+                                          int));
 
 #ifndef OBJECT_SUFFIX
 # define OBJECT_SUFFIX ".o"
@@ -122,6 +132,10 @@ int flag_hash_synchronization;
    JNI, not CNI.  */
 int flag_jni = 0;
 
+/* When non zero, warn when source file is newer than matching class
+   file.  */
+int flag_newer = 1;
+
 /* The encoding of the source file.  */
 const char *current_encoding = NULL;
 
@@ -139,7 +153,7 @@ extern int flag_exceptions;
     if `-fSTRING' is seen as an option.
    (If `-fno-STRING' is seen as an option, the opposite value is stored.)  */
 
-static struct { const char *string; int *variable; int on_value;}
+static struct string_option
 lang_f_options[] =
 {
   {"emit-class-file", &flag_emit_class_files, 1},
@@ -150,6 +164,15 @@ lang_f_options[] =
   {"jni", &flag_jni, 1}
 };
 
+static struct string_option
+lang_W_options[] =
+{
+  { "unsupported-jdk11", &flag_static_local_jdk1_1, 1 },
+  { "redundant-modifiers", &flag_redundant, 1 },
+  { "extraneous-semicolon", &flag_extraneous_semicolon, 1 },
+  { "out-of-date", &flag_newer, 1 }
+};
+
 JCF *current_jcf;
 
 /* Variable controlling how dependency tracking is enabled in
@@ -162,6 +185,34 @@ static int dependency_tracking = 0;
 #define DEPEND_TARGET_SET 4
 #define DEPEND_FILE_ALREADY_SET 8
 
+/* Process an option that can accept a `no-' form.
+   Return 1 if option found, 0 otherwise.  */
+static int
+process_option_with_no (p, table, table_size)
+     char *p;
+     struct string_option *table;
+     int table_size;
+{
+  int j;
+
+  for (j = 0; j < table_size; j++)
+    {
+      if (!strcmp (p, table[j].string))
+       {
+         *table[j].variable = table[j].on_value;
+         return 1;
+       }
+      if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
+         && ! strcmp (p+3, table[j].string))
+       {
+         *table[j].variable = ! table[j].on_value;
+         return 1;
+       }
+    }
+
+  return 0;
+}
+
 /*
  * process java-specific compiler command-line options
  * return 0, but do not complain if the option is not recognised.
@@ -241,28 +292,9 @@ lang_decode_option (argc, argv)
       /* Some kind of -f option.
         P's value is the option sans `-f'.
         Search for it in the table of options.  */
-      int found = 0, j;
-
       p += 2;
-
-      for (j = 0; !found && j < (int) ARRAY_SIZE (lang_f_options); j++)
-       {
-         if (!strcmp (p, lang_f_options[j].string))
-           {
-             *lang_f_options[j].variable = lang_f_options[j].on_value;
-             /* A goto here would be cleaner,
-                but breaks the vax pcc.  */
-             found = 1;
-           }
-         if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
-             && ! strcmp (p+3, lang_f_options[j].string))
-           {
-             *lang_f_options[j].variable = ! lang_f_options[j].on_value;
-             found = 1;
-           }
-       }
-
-      return found;
+      return process_option_with_no (p, lang_f_options,
+                                    ARRAY_SIZE (lang_f_options));
     }
 
   if (strcmp (p, "-Wall") == 0)
@@ -276,22 +308,12 @@ lang_decode_option (argc, argv)
       return 1;
     }
 
-  if (strcmp (p, "-Wunsupported-jdk11") == 0)
-    {
-      flag_static_local_jdk1_1 = 1;
-      return 1;
-    }
-
-  if (strcmp (p, "-Wredundant-modifiers") == 0)
-    {
-      flag_redundant = 1;
-      return 1;
-    }
-
-  if (strcmp (p, "-Wextraneous-semicolon") == 0)
+  if (p[0] == '-' && p[1] == 'W')
     {
-      flag_extraneous_semicolon = 1;
-      return 1;
+      /* Skip `-W' and see if we accept the option or its `no-' form.  */
+      p += 2;
+      return process_option_with_no (p, lang_W_options,
+                                    ARRAY_SIZE (lang_W_options));
     }
 
   if (strcmp (p, "-MD") == 0)