summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2000-07-11 08:58:28 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2000-07-11 08:58:28 +0000
commit27fdc0b6702eeddad8825b45a4a38e05caa56f0d (patch)
tree34bafa80cd73a9004dc7444f72a7555fb0602318 /gcc
parent73d6b89357b894ad376e38ba81993a9ac7aeb4a5 (diff)
downloadppe42-gcc-27fdc0b6702eeddad8825b45a4a38e05caa56f0d.tar.gz
ppe42-gcc-27fdc0b6702eeddad8825b45a4a38e05caa56f0d.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34956 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/cppinit.c21
-rw-r--r--gcc/cpplex.c60
-rw-r--r--gcc/cpplib.h3
4 files changed, 60 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4232e8be484..df3a1c3c73e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 88a3e8ccaf8..db8b6e92c76 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -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);
diff --git a/gcc/cpplex.c b/gcc/cpplex.c
index 951f633b2a4..d75c1e3b922 100644
--- a/gcc/cpplex.c
+++ b/gcc/cpplex.c
@@ -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;
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 2868a5bbe62..8db8c51f73d 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -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. */
OpenPOWER on IntegriCloud