* reader.c (copy_comment): New function, factored out from:

(copy_action): Use it.  Removed now unused `match', `ended',
`cplus_comment'.
(copy_guard): Likewise.
This commit is contained in:
Akim Demaille
2000-03-17 11:32:28 +00:00
parent ca36d2efbc
commit 3cef001a70
2 changed files with 62 additions and 88 deletions

View File

@@ -1,3 +1,10 @@
2000-03-17 Akim Demaille <akim@epita.fr>
* reader.c (copy_comment): New function, factored out from:
(copy_action): Use it. Removed now unused `match', `ended',
`cplus_comment'.
(copy_guard): Likewise.
2000-03-17 Akim Demaille <akim@epita.fr> 2000-03-17 Akim Demaille <akim@epita.fr>
* reader.c (copy_string): New function, factored out from: * reader.c (copy_string): New function, factored out from:

View File

@@ -1030,6 +1030,57 @@ copy_string (FILE *finput, FILE *foutput, int match)
putc(c, foutput); putc(c, foutput);
} }
/* Dump the comment from FINPUT to FOUTPUT. C is either `*' or `/',
depending upon the type of comments used. */
void
copy_comment (FILE *finput, FILE *foutput, int c)
{
int cplus_comment;
register int match;
register int ended;
cplus_comment = (c == '/');
putc (c, foutput);
c = getc (finput);
ended = 0;
while (!ended)
{
if (!cplus_comment && c == '*')
{
while (c == '*')
{
putc(c, foutput);
c = getc(finput);
}
if (c == '/')
{
putc(c, foutput);
ended = 1;
}
}
else if (c == '\n')
{
lineno++;
putc (c, foutput);
if (cplus_comment)
ended = 1;
else
c = getc(finput);
}
else if (c == EOF)
fatal (_("unterminated comment"));
else
{
putc (c, foutput);
c = getc (finput);
}
}
}
/* After `%guard' is seen in the input file, copy the actual guard /* After `%guard' is seen in the input file, copy the actual guard
into the guards file. If the guard is followed by an action, copy into the guards file. If the guard is followed by an action, copy
that into the actions file. STACK_OFFSET is the number of values that into the actions file. STACK_OFFSET is the number of values
@@ -1043,11 +1094,8 @@ copy_guard (symbol_list *rule, int stack_offset)
register int c; register int c;
register int n; register int n;
register int count; register int count;
register int match;
register int ended;
register char *type_name; register char *type_name;
int brace_flag = 0; int brace_flag = 0;
int cplus_comment;
/* offset is always 0 if parser has already popped the stack pointer */ /* offset is always 0 if parser has already popped the stack pointer */
if (semantic_parser) stack_offset = 0; if (semantic_parser) stack_offset = 0;
@@ -1092,50 +1140,11 @@ copy_guard (symbol_list *rule, int stack_offset)
break; break;
case '/': case '/':
putc(c, fguard); putc (c, fguard);
c = getc(finput); c = getc (finput);
if (c != '*' && c != '/') if (c != '*' && c != '/')
continue; continue;
copy_comment (finput, fguard, c);
cplus_comment = (c == '/');
putc(c, fguard);
c = getc(finput);
ended = 0;
while (!ended)
{
if (!cplus_comment && c == '*')
{
while (c == '*')
{
putc(c, fguard);
c = getc(finput);
}
if (c == '/')
{
putc(c, fguard);
ended = 1;
}
}
else if (c == '\n')
{
lineno++;
putc(c, fguard);
if (cplus_comment)
ended = 1;
else
c = getc(finput);
}
else if (c == EOF)
fatal(_("unterminated comment"));
else
{
putc(c, fguard);
c = getc(finput);
}
}
break; break;
case '$': case '$':
@@ -1252,10 +1261,7 @@ copy_action (symbol_list *rule, int stack_offset)
register int c; register int c;
register int n; register int n;
register int count; register int count;
register int match;
register int ended;
register char *type_name; register char *type_name;
int cplus_comment;
/* offset is always 0 if parser has already popped the stack pointer */ /* offset is always 0 if parser has already popped the stack pointer */
if (semantic_parser) if (semantic_parser)
@@ -1295,46 +1301,7 @@ copy_action (symbol_list *rule, int stack_offset)
c = getc(finput); c = getc(finput);
if (c != '*' && c != '/') if (c != '*' && c != '/')
continue; continue;
copy_comment (finput, faction, c);
cplus_comment = (c == '/');
putc(c, faction);
c = getc(finput);
ended = 0;
while (!ended)
{
if (!cplus_comment && c == '*')
{
while (c == '*')
{
putc(c, faction);
c = getc(finput);
}
if (c == '/')
{
putc(c, faction);
ended = 1;
}
}
else if (c == '\n')
{
lineno++;
putc(c, faction);
if (cplus_comment)
ended = 1;
else
c = getc(finput);
}
else if (c == EOF)
fatal(_("unterminated comment"));
else
{
putc(c, faction);
c = getc(finput);
}
}
break; break;
case '$': case '$':