(check_newline): Support HANDLE_SYSV_PRAGMA.
authorRichard Stallman <rms@gnu.org>
Wed, 1 Jul 1992 02:34:39 +0000 (02:34 +0000)
committerRichard Stallman <rms@gnu.org>
Wed, 1 Jul 1992 02:34:39 +0000 (02:34 +0000)
(handle_sysv_pragma): New function.

From-SVN: r1367

gcc/c-lex.c

index 3611efbd4a1915d5ddedca921ef5c15df8d46d3f..75a7f4ddff0998feacb2f7b6455d620cecb06cf5 100644 (file)
@@ -481,6 +481,15 @@ check_newline ()
              && getc (finput) == 'a'
              && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))
            {
+#ifdef HANDLE_SYSV_PRAGMA
+             c = handle_sysv_pragma (finput, c);
+             if (c >= 0)
+               ;
+             else if (nextchar >= 0)
+               c = nextchar, nextchar = -1;
+             else
+               c = getc (finput);
+#endif /* HANDLE_SYSV_PRAGMA */
 #ifdef HANDLE_PRAGMA
              HANDLE_PRAGMA (finput);
 #endif /* HANDLE_PRAGMA */
@@ -729,6 +738,45 @@ linenum:
   return c;
 }
 \f
+#ifdef HANDLE_SYSV_PRAGMA
+
+/* Handle a #pragma directive.  INPUT is the current input stream,
+   and C is a character to reread.
+   Returns a character for the caller to reread,
+   or -1 meaning there isn't one.  */
+
+/* This function has to be in this file, in order to get at
+   the token types.  */
+
+int
+handle_sysv_pragma (input, c)
+     FILE *input;
+     int c;
+{
+  while (c == ' ' || c == '\t')
+    c = getc (input);
+  if (c == '\n' || c == EOF)
+    {
+      handle_pragma_token (0, 0);
+      return c;
+    }
+  ungetc (c, input);
+  switch (yylex ())
+    {
+    case IDENTIFIER:
+    case TYPENAME:
+    case STRING:
+    case CONSTANT:
+      handle_pragma_token (token_buffer, yylval.ttype);
+      break;
+    default:
+      handle_pragma_token (token_buffer, 0);
+    }
+  return -1;
+}
+
+#endif /* HANDLE_SYSV_PRAGMA */
+\f
 #define isalnum(char) ((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9'))
 #define isdigit(char) (char >= '0' && char <= '9')
 #define ENDFILE -1  /* token that represents end-of-file */