aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/c-lex.c')
-rw-r--r--gcc/c-lex.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index 75a7f4d..8d91eb1 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -482,13 +482,7 @@ check_newline ()
&& ((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);
+ return handle_sysv_pragma (finput, c);
#endif /* HANDLE_SYSV_PRAGMA */
#ifdef HANDLE_PRAGMA
HANDLE_PRAGMA (finput);
@@ -741,9 +735,8 @@ linenum:
#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. */
+ and C is a character to reread. Processes the entire input line
+ and returns a character for the caller to reread: either \n or EOF. */
/* This function has to be in this file, in order to get at
the token types. */
@@ -753,26 +746,32 @@ 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 ())
+ for (;;)
{
- case IDENTIFIER:
- case TYPENAME:
- case STRING:
- case CONSTANT:
- handle_pragma_token (token_buffer, yylval.ttype);
- break;
- default:
- handle_pragma_token (token_buffer, 0);
+ 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);
+ }
+ if (nextchar >= 0)
+ c = nextchar, nextchar = -1;
+ else
+ c = getc (input);
}
- return -1;
}
#endif /* HANDLE_SYSV_PRAGMA */