From c5168e64d4f7441a39bc2c173d74cc5e536e2dec Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 2 Sep 1998 10:04:26 +0000 Subject: [PATCH] Change HANDLE_PRAGMA macro so that it supports USE_CPPLIB From-SVN: r22167 --- gcc/ch/ChangeLog | 9 +++++++++ gcc/ch/lex.c | 42 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/gcc/ch/ChangeLog b/gcc/ch/ChangeLog index 60bd144aca8..ff424696a4b 100644 --- a/gcc/ch/ChangeLog +++ b/gcc/ch/ChangeLog @@ -1,3 +1,12 @@ +Wed Sep 02 09:25:29 1998 Nick Clifton + + * 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 * decl.c (layout_chill_variants): Calculate nlables properly. diff --git a/gcc/ch/lex.c b/gcc/ch/lex.c index a3dbbb27baa..17b926879e3 100644 --- a/gcc/ch/lex.c +++ b/gcc/ch/lex.c @@ -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; } +#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; } }