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