switch (c)
{
case '/':
+ /* FIXME: Should probably be merged with copy_comment. */
c = getc (finput);
if (c != '*' && c != '/')
{
}
}
-/* do a getc, but give error message if EOF encountered */
+
+/*-----------------------------------------------------.
+| Do a getc, but give error message if EOF encountered |
+`-----------------------------------------------------*/
+
static int
xgetc (FILE *f)
{
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)
}
c = skip_white_space ();
- *token_buffer = c; /* for error messages (token buffer always valid) */
+ /* for error messages (token buffer always valid) */
+ *token_buffer = c;
token_buffer[1] = 0;
switch (c)
int code; /* ignored here */
p = token_buffer;
*p++ = '\"';
- while (literalchar (&p, &code, '\"')) /* read up to and including " */
+ /* Read up to and including ". */
+ while (literalchar (&p, &code, '\"'))
{
if (p >= token_buffer + maxtoken - 4)
p = grow_token_buffer (p);
}
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 ();