cppinit.c: (cpp_reader_init): Allow digraphs by default.
authorNeil Booth <neilb@earthling.net>
Tue, 11 Jul 2000 08:58:28 +0000 (08:58 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Tue, 11 Jul 2000 08:58:28 +0000 (08:58 +0000)
* cppinit.c: (cpp_reader_init): Allow digraphs by default.
(handle_option): Set digraphs according to standard.
Merge OPT_lang_c89 handler with OPT_std_c89.

* cpplex.c: (lex_line, can_paste): Honour digraphs in
accordance with the digraphs flag.

* cpplib.h: (struct cpp_options): New option digraphs.

From-SVN: r34956

gcc/ChangeLog
gcc/cppinit.c
gcc/cpplex.c
gcc/cpplib.h

index 4232e8be484a3c0a3be77156aee99d324432fc8d..df3a1c3c73efcfc68b0f08633bf8f85d22b8c799 100644 (file)
@@ -1,3 +1,14 @@
+2000-07-11  Neil Booth  <NeilB@earthling.net>
+
+       * cppinit.c: (cpp_reader_init): Allow digraphs by default.
+       (handle_option): Set digraphs according to standard.
+       Merge OPT_lang_c89 handler with OPT_std_c89.
+
+       * cpplex.c: (lex_line, can_paste): Honour digraphs in
+       accordance with the digraphs flag.
+
+       * cpplib.h: (struct cpp_options): New option digraphs.
+
 2000-07-10  Hans-Peter Nilsson  <hp@axis.com>
            Bruce Korb  <bkorb@gnu.org>
 
index 88a3e8ccaf87dbfdc6d073baaa1c213ecf81ed49..db8b6e92c76ac7e3d110e02a6923364bbf1a87ab 100644 (file)
@@ -418,6 +418,7 @@ cpp_reader_init (pfile)
   CPP_OPTION (pfile, cplusplus_comments) = 1;
   CPP_OPTION (pfile, warn_import) = 1;
   CPP_OPTION (pfile, warn_paste) = 1;
+  CPP_OPTION (pfile, digraphs) = 1;
   CPP_OPTION (pfile, discard_comments) = 1;
   CPP_OPTION (pfile, show_column) = 1;
   CPP_OPTION (pfile, tabstop) = 8;
@@ -1270,6 +1271,7 @@ handle_option (pfile, argc, argv)
          CPP_OPTION (pfile, traditional) = 1;
          CPP_OPTION (pfile, cplusplus_comments) = 0;
          CPP_OPTION (pfile, trigraphs) = 0;
+         CPP_OPTION (pfile, digraphs) = 0;
          CPP_OPTION (pfile, warn_trigraphs) = 0;
          break;
        case OPT_trigraphs:
@@ -1291,23 +1293,16 @@ handle_option (pfile, argc, argv)
          CPP_OPTION (pfile, cplusplus_comments) = 1;
          CPP_OPTION (pfile, c89) = 0;
          CPP_OPTION (pfile, c99) = 1;
+         CPP_OPTION (pfile, digraphs) = 1;
          CPP_OPTION (pfile, objc) = 0;
          break;
-       case OPT_lang_c89:
-         CPP_OPTION (pfile, cplusplus) = 0;
-         CPP_OPTION (pfile, cplusplus_comments) = 0;
-         CPP_OPTION (pfile, c89) = 1;
-         CPP_OPTION (pfile, c99) = 0;
-         CPP_OPTION (pfile, objc) = 0;
-         CPP_OPTION (pfile, trigraphs) = 1;
-         new_pending_directive (pend, "__STRICT_ANSI__", cpp_define);
-         break;
        case OPT_lang_cplusplus:
          CPP_OPTION (pfile, cplusplus) = 1;
          CPP_OPTION (pfile, cplusplus_comments) = 1;
          CPP_OPTION (pfile, c89) = 0;
          CPP_OPTION (pfile, c99) = 0;
          CPP_OPTION (pfile, objc) = 0;
+         CPP_OPTION (pfile, digraphs) = 1;
          new_pending_directive (pend, "__cplusplus", cpp_define);
          break;
        case OPT_lang_objcplusplus:
@@ -1353,6 +1348,7 @@ handle_option (pfile, argc, argv)
          CPP_OPTION (pfile, c89) = 1;
          CPP_OPTION (pfile, c99) = 0;
          CPP_OPTION (pfile, objc) = 0;
+         CPP_OPTION (pfile, digraphs) = 1;
          break;
        case OPT_std_gnu9x:
        case OPT_std_gnu99:
@@ -1360,6 +1356,7 @@ handle_option (pfile, argc, argv)
          CPP_OPTION (pfile, cplusplus_comments) = 1;
          CPP_OPTION (pfile, c89) = 0;
          CPP_OPTION (pfile, c99) = 1;
+         CPP_OPTION (pfile, digraphs) = 1;
          CPP_OPTION (pfile, objc) = 0;
          new_pending_directive (CPP_OPTION (pfile, pending),
                                 "__STDC_VERSION__=199901L", cpp_define);
@@ -1370,14 +1367,15 @@ handle_option (pfile, argc, argv)
          /* Fall through */
        case OPT_std_iso9899_1990:
        case OPT_std_c89:
+       case OPT_lang_c89:
          CPP_OPTION (pfile, cplusplus) = 0;
          CPP_OPTION (pfile, cplusplus_comments) = 0;
          CPP_OPTION (pfile, c89) = 1;
          CPP_OPTION (pfile, c99) = 0;
          CPP_OPTION (pfile, objc) = 0;
+         CPP_OPTION (pfile, digraphs) = opt_code == OPT_std_iso9899_199409;
          CPP_OPTION (pfile, trigraphs) = 1;
-         new_pending_directive (CPP_OPTION (pfile, pending),
-                                "__STRICT_ANSI__", cpp_define);
+         new_pending_directive (pend, "__STRICT_ANSI__", cpp_define);
          break;
        case OPT_std_iso9899_199x:
        case OPT_std_iso9899_1999:
@@ -1388,6 +1386,7 @@ handle_option (pfile, argc, argv)
          CPP_OPTION (pfile, c89) = 0;
          CPP_OPTION (pfile, c99) = 1;
          CPP_OPTION (pfile, objc) = 0;
+         CPP_OPTION (pfile, digraphs) = 1;
          CPP_OPTION (pfile, trigraphs) = 1;
          new_pending_directive (CPP_OPTION (pfile, pending),
                                 "__STRICT_ANSI__", cpp_define);
index 951f633b2a421d09b1dc2dda664f652f5e86aeac..d75c1e3b9221185ce846854358ce0a873798b8be 100644 (file)
@@ -24,7 +24,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 Cleanups to do:-
 
-o Get use of digraphs in sync with the standard reqd on the command line.
 o -dM and with _cpp_dump_list: too many \n output.
 o Put a printer object in cpp_reader?
 o Check line numbers assigned to all errors.
@@ -1572,14 +1571,17 @@ lex_line (pfile, list)
              if (PREV_TOKEN_TYPE == CPP_COLON
                  && CPP_OPTION (pfile, cplusplus))
                BACKUP_TOKEN (CPP_SCOPE);
-             /* Digraph: "<:" is a '['  */
-             else if (PREV_TOKEN_TYPE == CPP_LESS)
-               BACKUP_DIGRAPH (CPP_OPEN_SQUARE);
-             /* Digraph: "%:" is a '#'  */
-             else if (PREV_TOKEN_TYPE == CPP_MOD)
+             else if (CPP_OPTION (pfile, digraphs))
                {
-                 (--cur_token)->flags |= DIGRAPH;
-                 goto make_hash;
+                 /* Digraph: "<:" is a '['  */
+                 if (PREV_TOKEN_TYPE == CPP_LESS)
+                   BACKUP_DIGRAPH (CPP_OPEN_SQUARE);
+                 /* Digraph: "%:" is a '#'  */
+                 else if (PREV_TOKEN_TYPE == CPP_MOD)
+                   {
+                     (--cur_token)->flags |= DIGRAPH;
+                     goto make_hash;
+                   }
                }
            }
          cur_token++;
@@ -1623,12 +1625,15 @@ lex_line (pfile, list)
                BACKUP_TOKEN (CPP_RSHIFT);
              else if (PREV_TOKEN_TYPE == CPP_MINUS)
                BACKUP_TOKEN (CPP_DEREF);
-             /* Digraph: ":>" is a ']'  */
-             else if (PREV_TOKEN_TYPE == CPP_COLON)
-               BACKUP_DIGRAPH (CPP_CLOSE_SQUARE);
-             /* Digraph: "%>" is a '}'  */
-             else if (PREV_TOKEN_TYPE == CPP_MOD)
-               BACKUP_DIGRAPH (CPP_CLOSE_BRACE);
+             else if (CPP_OPTION (pfile, digraphs))
+               {
+                 /* Digraph: ":>" is a ']'  */
+                 if (PREV_TOKEN_TYPE == CPP_COLON)
+                   BACKUP_DIGRAPH (CPP_CLOSE_SQUARE);
+                 /* Digraph: "%>" is a '}'  */
+                 else if (PREV_TOKEN_TYPE == CPP_MOD)
+                   BACKUP_DIGRAPH (CPP_CLOSE_BRACE);
+               }
            }
          cur_token++;
          break;
@@ -1652,7 +1657,8 @@ lex_line (pfile, list)
        case '%':
          /* Digraph: "<%" is a '{'  */
          cur_token->type = CPP_MOD;
-         if (IMMED_TOKEN () && PREV_TOKEN_TYPE == CPP_LESS)
+         if (IMMED_TOKEN () && PREV_TOKEN_TYPE == CPP_LESS
+             && CPP_OPTION (pfile, digraphs))
            BACKUP_DIGRAPH (CPP_OPEN_BRACE);
          cur_token++;
          break;
@@ -2421,10 +2427,13 @@ can_paste (pfile, token1, token2, digraph)
       if (b == a) return CPP_LSHIFT;
       if (b == CPP_QUERY && cxx)       return CPP_MIN;
       if (b == CPP_LESS_EQ)    return CPP_LSHIFT_EQ;
-      if (b == CPP_COLON)
-       {*digraph = 1; return CPP_OPEN_SQUARE;} /* <: digraph */
-      if (b == CPP_MOD)
-       {*digraph = 1; return CPP_OPEN_BRACE;}  /* <% digraph */
+      if (CPP_OPTION (pfile, digraphs))
+       {
+         if (b == CPP_COLON)
+           {*digraph = 1; return CPP_OPEN_SQUARE;} /* <: digraph */
+         if (b == CPP_MOD)
+           {*digraph = 1; return CPP_OPEN_BRACE;}      /* <% digraph */
+       }
       break;
 
     case CPP_PLUS: if (b == a) return CPP_PLUS_PLUS; break;
@@ -2437,15 +2446,18 @@ can_paste (pfile, token1, token2, digraph)
       break;
     case CPP_COLON:
       if (b == a && cxx)       return CPP_SCOPE;
-      if (b == CPP_GREATER)
+      if (b == CPP_GREATER && CPP_OPTION (pfile, digraphs))
        {*digraph = 1; return CPP_CLOSE_SQUARE;} /* :> digraph */
       break;
 
     case CPP_MOD:
-      if (b == CPP_GREATER)
-       {*digraph = 1; return CPP_CLOSE_BRACE;}  /* %> digraph */
-      if (b == CPP_COLON)
-       {*digraph = 1; return CPP_HASH;}         /* %: digraph */
+      if (CPP_OPTION (pfile, digraphs))
+       {
+         if (b == CPP_GREATER)
+           {*digraph = 1; return CPP_CLOSE_BRACE;}  /* %> digraph */
+         if (b == CPP_COLON)
+           {*digraph = 1; return CPP_HASH;}         /* %: digraph */
+       }
       break;
     case CPP_DEREF:
       if (b == CPP_MULT && cxx)        return CPP_DEREF_STAR;
index 2868a5bbe623a97c8aa50f89165f2bf3814e71d5..8db8c51f73dc457a99e62712146654daadb084f3 100644 (file)
@@ -329,6 +329,9 @@ struct cpp_options
   /* Nonzero means process the ISO trigraph sequences.  */
   unsigned char trigraphs;
 
+  /* Nonzero means process the ISO digraph sequences.  */
+  unsigned char digraphs;
+
   /* Nonzero means print the names of included files rather than the
      preprocessed output.  1 means just the #include "...", 2 means
      #include <...> as well.  */