Change HANDLE_PRAGMA macro so that it supports USE_CPPLIB
authorNick Clifton <nickc@cygnus.com>
Wed, 2 Sep 1998 10:04:26 +0000 (10:04 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 2 Sep 1998 10:04:26 +0000 (10:04 +0000)
From-SVN: r22167

gcc/ch/ChangeLog
gcc/ch/lex.c

index 60bd144aca8077ee30649befb72c6ebc3c7cf987..ff424696a4b437a95612647701d3a27791730be4 100644 (file)
@@ -1,3 +1,12 @@
+Wed Sep 02 09:25:29 1998  Nick Clifton  <nickc@cygnus.com>
+
+       * lex.c (check_newline):  Change how HANDLE_PRAGMA is called.
+       Generate warning messages if unknown pragmas are encountered.
+       (pragma_getc): New function: retrieves characters from the
+       input stream.  Defined when HANDLE_PRAGMA is defined.
+       (pragma_ungetc): New function: replaces characters back into the
+       input stream.  Defined when HANDLE_PRAGMA is defined.
+
 Mon Aug 31 15:35:16 1998  Dave Brolley  <brolley@cygnus.com>
 
        * decl.c (layout_chill_variants): Calculate nlables properly.
index a3dbbb27baa751e09a8651eca7cd3f198e0e5887..17b926879e389a3321566c05c327edc55bc28a1e 100644 (file)
@@ -1,5 +1,5 @@
 /* Lexical analyzer for GNU CHILL. -*- C -*-
-   Copyright (C) 1992, 93, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1992, 93, 1994, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -1495,6 +1495,22 @@ getlc (file)
   return c;
 }
 \f
+#if defined HANDLE_PRAGMA
+/* Local versions of these macros, that can be passed as function pointers.  */
+static int
+pragma_getc ()
+{
+  return getc (finput);
+}
+
+static void
+pragma_ungetc (arg)
+     int arg;
+{
+  ungetc (arg, finput);
+}
+#endif /* HANDLE_PRAGMA */
+
 /* At the beginning of a line, increment the line number and process
    any #-directive on this line.  If the line is a #-directive, read
    the entire line and return a newline.  Otherwise, return the line's
@@ -1553,10 +1569,28 @@ check_newline ()
              && (isspace (c = getlc (finput))))
            {
 #ifdef HANDLE_PRAGMA
-             return HANDLE_PRAGMA (finput, c);
-#else
-             goto skipline;
+             static char buffer [128];
+             char * buff = buffer;
+
+             /* Read the pragma name into a buffer.  */
+             while (isspace (c = getlc (finput)))
+               continue;
+             
+             do
+               {
+                 * buff ++ = c;
+                 c = getlc (finput);
+               }
+             while (c != EOF && ! isspace (c) && c != '\n'
+                    && buff < buffer + 128);
+
+             pragma_ungetc (c);
+               
+             * -- buff = 0;
+             
+             (void) HANDLE_PRAGMA (pragma_getc, pragma_ungetc, buffer);
 #endif /* HANDLE_PRAGMA */
+             goto skipline;
            }
        }