Patch to add digraphs to cpplib
Jason Merrill
jason@cygnus.com
Mon Apr 10 17:44:00 GMT 2000
OK?
2000-04-10 Jason Merrill <jason@casey.cygnus.com>
* cpplex.c (_cpp_lex_token): Handle digraphs.
Index: cpplex.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cpplex.c,v
retrieving revision 1.10
diff -c -p -r1.10 cpplex.c
*** cpplex.c 2000/04/10 11:08:12 1.10
--- cpplex.c 2000/04/11 00:42:24
*************** _cpp_lex_token (pfile)
*** 760,766 ****
return CPP_HSPACE;
}
! case '#':
if (pfile->parsing_if_directive)
{
if (_cpp_parse_assertion (pfile))
--- 760,766 ----
return CPP_HSPACE;
}
! case '#': hash:
if (pfile->parsing_if_directive)
{
if (_cpp_parse_assertion (pfile))
*************** _cpp_lex_token (pfile)
*** 773,781 ****
CPP_RESERVE (pfile, 3);
CPP_PUTC_Q (pfile, '#');
CPP_NUL_TERMINATE_Q (pfile);
! if (PEEKC () != '#')
return CPP_STRINGIZE;
!
FORWARD (1);
CPP_PUTC_Q (pfile, '#');
CPP_NUL_TERMINATE_Q (pfile);
--- 773,786 ----
CPP_RESERVE (pfile, 3);
CPP_PUTC_Q (pfile, '#');
CPP_NUL_TERMINATE_Q (pfile);
!
! c2 = PEEKC ();
! if (c2 == '%' && PEEKN (1) == ':')
! /* Digraph. */
! FORWARD (1);
! else if (c2 != '#')
return CPP_STRINGIZE;
!
FORWARD (1);
CPP_PUTC_Q (pfile, '#');
CPP_NUL_TERMINATE_Q (pfile);
*************** _cpp_lex_token (pfile)
*** 797,804 ****
goto letter;
case ':':
! if (CPP_OPTION (pfile, cplusplus) && PEEKC () == ':')
goto op2;
goto randomchar;
case '&':
--- 802,816 ----
goto letter;
case ':':
! c2 = PEEKC ();
! if (CPP_OPTION (pfile, cplusplus) && c2 == ':')
goto op2;
+ /* Digraph. */
+ else if (c2 == '>')
+ {
+ FORWARD (1);
+ c = ']';
+ }
goto randomchar;
case '&':
*************** _cpp_lex_token (pfile)
*** 809,817 ****
goto op2;
goto randomchar;
case '*':
case '!':
- case '%':
case '=':
case '^':
if (PEEKC () == '=')
--- 821,844 ----
goto op2;
goto randomchar;
+ case '%':
+ /* Digraphs. */
+ c2 = PEEKC ();
+ if (c2 == ':')
+ {
+ FORWARD (1);
+ goto hash;
+ }
+ else if (c2 == '>')
+ {
+ FORWARD (1);
+ c = '}';
+ goto rbrace;
+ }
+ /* else fall through */
+
case '*':
case '!':
case '=':
case '^':
if (PEEKC () == '=')
*************** _cpp_lex_token (pfile)
*** 882,887 ****
--- 909,928 ----
}
return CPP_STRING;
}
+ /* Digraph. */
+ c2 = PEEKC ();
+ if (c2 == '%')
+ {
+ FORWARD (1);
+ c = '{';
+ goto lbrace;
+ }
+ else if (c2 == ':')
+ {
+ FORWARD (1);
+ c = '[';
+ goto randomchar;
+ }
/* else fall through */
case '>':
c2 = PEEKC ();
*************** _cpp_lex_token (pfile)
*** 1074,1081 ****
case '(': token = CPP_LPAREN; goto char1;
case ')': token = CPP_RPAREN; goto char1;
! case '{': token = CPP_LBRACE; goto char1;
! case '}': token = CPP_RBRACE; goto char1;
case ',': token = CPP_COMMA; goto char1;
case ';': token = CPP_SEMICOLON; goto char1;
--- 1115,1122 ----
case '(': token = CPP_LPAREN; goto char1;
case ')': token = CPP_RPAREN; goto char1;
! case '{': lbrace: token = CPP_LBRACE; goto char1;
! case '}': rbrace: token = CPP_RBRACE; goto char1;
case ',': token = CPP_COMMA; goto char1;
case ';': token = CPP_SEMICOLON; goto char1;
More information about the Gcc-patches
mailing list