X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/550a72a3be6adb5ec84545bef484685661c87f58..f282676b7e6c9ae1b66233dbfc522bb685c3ece2:/src/lex.c?ds=sidebyside diff --git a/src/lex.c b/src/lex.c index 1d07bc3e..c5d73082 100644 --- a/src/lex.c +++ b/src/lex.c @@ -323,6 +323,37 @@ unlex (int token) unlexed_symval = symval; } +/*-----------------------------------------------------------------. +| We just read `<' from FIN. Store in TOKEN_BUFFER, the type name | +| specified between the `<...>'. | +`-----------------------------------------------------------------*/ + +void +read_type_name (FILE *fin) +{ + char *p = token_buffer; + int c = getc (fin); + + while (c != '>') + { + if (c == EOF) + fatal (_("unterminated type name at end of file")); + if (c == '\n') + { + complain (_("unterminated type name")); + ungetc (c, fin); + break; + } + + if (p == token_buffer + maxtoken) + p = grow_token_buffer (p); + + *p++ = c; + c = getc (fin); + } + *p = 0; +} + int lex (void) @@ -488,29 +519,9 @@ lex (void) } case '<': - p = token_buffer; - c = getc (finput); - while (c != '>') - { - if (c == EOF) - fatal (_("unterminated type name at end of file")); - if (c == '\n') - { - complain (_("unterminated type name")); - ungetc (c, finput); - break; - } - - if (p == token_buffer + maxtoken) - p = grow_token_buffer (p); - - *p++ = c; - c = getc (finput); - } - *p = 0; + read_type_name (finput); return TYPENAME; - case '%': return parse_percent_token ();