* src/reader.c (copy_string, copy_comment, copy_comment2, copy_at)

(copy_dollar): Now that everything uses obstacks, get rid of the
FILE * parameters.
This commit is contained in:
Akim Demaille
2000-12-20 12:38:01 +00:00
parent 5d3214b854
commit 337bab46f2
3 changed files with 53 additions and 101 deletions

View File

@@ -1,3 +1,9 @@
2000-12-20 Akim Demaille <akim@epita.fr>
* src/reader.c (copy_string, copy_comment, copy_comment2, copy_at)
(copy_dollar): Now that everything uses obstacks, get rid of the
FILE * parameters.
2000-12-20 Akim Demaille <akim@epita.fr> 2000-12-20 Akim Demaille <akim@epita.fr>
* src/files.c (open_files): Actually the `.output' file is based * src/files.c (open_files): Actually the `.output' file is based

View File

View File

@@ -153,20 +153,17 @@ get_type_name (int n, symbol_list * rule)
return rp->sym->type_name; return rp->sym->type_name;
} }
/*-----------------------------------------------------------------. /*------------------------------------------------------------.
| Dump the string from FIN to FOUT and OOUT if non null. MATCH is | | Dump the string from FIN to OOUT if non null. MATCH is the |
| the delimiter of the string (either ' or "). | | delimiter of the string (either ' or "). |
`-----------------------------------------------------------------*/ `------------------------------------------------------------*/
static inline void static inline void
copy_string (FILE *fin, FILE *fout, struct obstack *oout, int match) copy_string (FILE *fin, struct obstack *oout, int match)
{ {
int c; int c;
if (fout) obstack_1grow (oout, match);
putc (match, fout);
if (oout)
obstack_1grow (oout, match);
c = getc (fin); c = getc (fin);
@@ -182,20 +179,14 @@ copy_string (FILE *fin, FILE *fout, struct obstack *oout, int match)
continue; continue;
} }
if (fout) obstack_1grow (oout, c);
putc (c, fout);
if (oout)
obstack_1grow (oout, c);
if (c == '\\') if (c == '\\')
{ {
c = getc (fin); c = getc (fin);
if (c == EOF) if (c == EOF)
fatal (_("unterminated string at end of file")); fatal (_("unterminated string at end of file"));
if (fout) obstack_1grow (oout, c);
putc (c, fout);
if (oout)
obstack_1grow (oout, c);
if (c == '\n') if (c == '\n')
lineno++; lineno++;
@@ -204,34 +195,27 @@ copy_string (FILE *fin, FILE *fout, struct obstack *oout, int match)
c = getc (fin); c = getc (fin);
} }
if (fout) obstack_1grow (oout, c);
putc (c, fout);
if (oout)
obstack_1grow (oout, c);
} }
/*----------------------------------------------------------------. /*-----------------------------------------------------------------.
| Dump the wannabee comment from IN to OUT1 and OUT2. In fact we | | Dump the wannabee comment from IN to OUT1 and OUT2 (which can be |
| just saw a `/', which might or might not be a comment. In any | | NULL). In fact we just saw a `/', which might or might not be a |
| case, copy what we saw. | | comment. In any case, copy what we saw. |
| | | |
| OUT2 might be NULL. | | OUT2 might be NULL. |
`----------------------------------------------------------------*/ `-----------------------------------------------------------------*/
static inline void static inline void
copy_comment2 (FILE *fin, FILE *out1, copy_comment2 (FILE *fin, struct obstack *oout1, struct obstack *oout2)
struct obstack *oout2, struct obstack *oout)
{ {
int cplus_comment; int cplus_comment;
int ended; int ended;
int c; int c;
/* We read a `/', output it. */ /* We read a `/', output it. */
if (out1) obstack_1grow (oout1, '/');
putc ('/', out1);
if (oout)
obstack_1grow (oout, '/');
if (oout2) if (oout2)
obstack_1grow (oout2, '/'); obstack_1grow (oout2, '/');
@@ -248,10 +232,7 @@ copy_comment2 (FILE *fin, FILE *out1,
return; return;
} }
if (out1) obstack_1grow (oout1, c);
putc (c, out1);
if (oout)
obstack_1grow (oout, c);
if (oout2) if (oout2)
obstack_1grow (oout2, c); obstack_1grow (oout2, c);
c = getc (fin); c = getc (fin);
@@ -263,10 +244,7 @@ copy_comment2 (FILE *fin, FILE *out1,
{ {
while (c == '*') while (c == '*')
{ {
if (out1) obstack_1grow (oout1, c);
putc (c, out1);
if (oout)
obstack_1grow (oout, c);
if (oout2) if (oout2)
obstack_1grow (oout2, c); obstack_1grow (oout2, c);
c = getc (fin); c = getc (fin);
@@ -274,10 +252,7 @@ copy_comment2 (FILE *fin, FILE *out1,
if (c == '/') if (c == '/')
{ {
if (out1) obstack_1grow (oout1, c);
putc (c, out1);
if (oout)
obstack_1grow (oout, c);
if (oout2) if (oout2)
obstack_1grow (oout2, c); obstack_1grow (oout2, c);
ended = 1; ended = 1;
@@ -286,10 +261,7 @@ copy_comment2 (FILE *fin, FILE *out1,
else if (c == '\n') else if (c == '\n')
{ {
lineno++; lineno++;
if (out1) obstack_1grow (oout1, c);
putc (c, out1);
if (oout)
obstack_1grow (oout, c);
if (oout2) if (oout2)
obstack_1grow (oout2, c); obstack_1grow (oout2, c);
if (cplus_comment) if (cplus_comment)
@@ -301,10 +273,7 @@ copy_comment2 (FILE *fin, FILE *out1,
fatal (_("unterminated comment")); fatal (_("unterminated comment"));
else else
{ {
if (out1) obstack_1grow (oout1, c);
putc (c, out1);
if (oout)
obstack_1grow (oout, c);
if (oout2) if (oout2)
obstack_1grow (oout2, c); obstack_1grow (oout2, c);
c = getc (fin); c = getc (fin);
@@ -315,35 +284,32 @@ copy_comment2 (FILE *fin, FILE *out1,
/*-------------------------------------------------------------------. /*-------------------------------------------------------------------.
| Dump the comment (actually the current string starting with a `/') | | Dump the comment (actually the current string starting with a `/') |
| from FIN to FOUT. | | from FIN to OOUT. |
`-------------------------------------------------------------------*/ `-------------------------------------------------------------------*/
static inline void static inline void
copy_comment (FILE *fin, FILE *fout, struct obstack *oout) copy_comment (FILE *fin, struct obstack *oout)
{ {
copy_comment2 (fin, fout, NULL, oout); copy_comment2 (fin, oout, NULL);
} }
/*-----------------------------------------------------------------. /*-----------------------------------------------------------------.
| FIN is pointing to a location (i.e., a `@'). Output to FOUT a | | FIN is pointing to a location (i.e., a `@'). Output to OOUT a |
| reference to this location. STACK_OFFSET is the number of values | | reference to this location. STACK_OFFSET is the number of values |
| in the current rule so far, which says where to find `$0' with | | in the current rule so far, which says where to find `$0' with |
| respect to the top of the stack. | | respect to the top of the stack. |
`-----------------------------------------------------------------*/ `-----------------------------------------------------------------*/
static inline void static inline void
copy_at (FILE *fin, FILE *fout, struct obstack *oout, int stack_offset) copy_at (FILE *fin, struct obstack *oout, int stack_offset)
{ {
int c; int c;
c = getc (fin); c = getc (fin);
if (c == '$') if (c == '$')
{ {
if (fout) obstack_grow_string (oout, "yyloc");
fprintf (fout, "yyloc");
if (oout)
obstack_grow_string (oout, "yyloc");
locations_flag = 1; locations_flag = 1;
} }
else if (isdigit (c) || c == '-') else if (isdigit (c) || c == '-')
@@ -354,11 +320,7 @@ copy_at (FILE *fin, FILE *fout, struct obstack *oout, int stack_offset)
ungetc (c, fin); ungetc (c, fin);
n = read_signed_integer (fin); n = read_signed_integer (fin);
sprintf (buf, "yylsp[%d]", n - stack_offset); obstack_fgrow1 (oout, "yylsp[%d]", n - stack_offset);
if (fout)
fputs (buf, fout);
if (oout)
obstack_grow (oout, buf, strlen (buf));
locations_flag = 1; locations_flag = 1;
} }
else else
@@ -375,13 +337,13 @@ copy_at (FILE *fin, FILE *fout, struct obstack *oout, int stack_offset)
| | | |
| Possible inputs: $[<TYPENAME>]($|integer) | | Possible inputs: $[<TYPENAME>]($|integer) |
| | | |
| Output to FOUT a reference to this semantic value. STACK_OFFSET is | | Output to OOUT a reference to this semantic value. STACK_OFFSET is |
| the number of values in the current rule so far, which says where | | the number of values in the current rule so far, which says where |
| to find `$0' with respect to the top of the stack. | | to find `$0' with respect to the top of the stack. |
`-------------------------------------------------------------------*/ `-------------------------------------------------------------------*/
static inline void static inline void
copy_dollar (FILE *fin, FILE *fout, struct obstack *oout, copy_dollar (FILE *fin, struct obstack *oout,
symbol_list *rule, int stack_offset) symbol_list *rule, int stack_offset)
{ {
int c = getc (fin); int c = getc (fin);
@@ -398,20 +360,12 @@ copy_dollar (FILE *fin, FILE *fout, struct obstack *oout,
if (c == '$') if (c == '$')
{ {
if (fout) obstack_grow_string (oout, "yyval");
fputs ("yyval", fout);
if (oout)
obstack_grow_string (oout, "yyval");
if (!type_name) if (!type_name)
type_name = get_type_name (0, rule); type_name = get_type_name (0, rule);
if (type_name) if (type_name)
{ obstack_fgrow1 (oout, ".%s", type_name);
if (fout)
fprintf (fout, ".%s", type_name);
if (oout)
obstack_fgrow1 (oout, ".%s", type_name);
}
if (!type_name && typed) if (!type_name && typed)
complain (_("$$ of `%s' has no declared type"), complain (_("$$ of `%s' has no declared type"),
rule->sym->tag); rule->sym->tag);
@@ -425,18 +379,10 @@ copy_dollar (FILE *fin, FILE *fout, struct obstack *oout,
if (!type_name && n > 0) if (!type_name && n > 0)
type_name = get_type_name (n, rule); type_name = get_type_name (n, rule);
if (fout) obstack_fgrow1 (oout, "yyvsp[%d]", n - stack_offset);
fprintf (fout, "yyvsp[%d]", n - stack_offset);
if (oout)
obstack_fgrow1 (oout, "yyvsp[%d]", n - stack_offset);
if (type_name) if (type_name)
{ obstack_fgrow1 (oout, ".%s", type_name);
if (fout)
fprintf (fout, ".%s", type_name);
if (oout)
obstack_fgrow1 (oout, ".%s", type_name);
}
if (!type_name && typed) if (!type_name && typed)
complain (_("$%d of `%s' has no declared type"), complain (_("$%d of `%s' has no declared type"),
n, rule->sym->tag); n, rule->sym->tag);
@@ -484,11 +430,11 @@ copy_definition (void)
case '\'': case '\'':
case '"': case '"':
copy_string (finput, 0, &attrs_obstack, c); copy_string (finput, &attrs_obstack, c);
break; break;
case '/': case '/':
copy_comment (finput, 0, &attrs_obstack); copy_comment (finput, &attrs_obstack);
break; break;
case EOF: case EOF:
@@ -805,7 +751,7 @@ parse_union_decl (void)
break; break;
case '/': case '/':
copy_comment2 (finput, 0, &defines_obstack, &attrs_obstack); copy_comment2 (finput, &defines_obstack, &attrs_obstack);
break; break;
case '{': case '{':
@@ -1079,20 +1025,20 @@ copy_action (symbol_list *rule, int stack_offset)
case '\'': case '\'':
case '"': case '"':
copy_string (finput, 0, &action_obstack, c); copy_string (finput, &action_obstack, c);
break; break;
case '/': case '/':
copy_comment (finput, 0, &action_obstack); copy_comment (finput, &action_obstack);
break; break;
case '$': case '$':
copy_dollar (finput, 0, &action_obstack, copy_dollar (finput, &action_obstack,
rule, stack_offset); rule, stack_offset);
break; break;
case '@': case '@':
copy_at (finput, 0, &action_obstack, copy_at (finput, &action_obstack,
stack_offset); stack_offset);
break; break;
@@ -1175,19 +1121,19 @@ copy_guard (symbol_list *rule, int stack_offset)
case '\'': case '\'':
case '"': case '"':
copy_string (finput, 0, &guard_obstack, c); copy_string (finput, &guard_obstack, c);
break; break;
case '/': case '/':
copy_comment (finput, 0, &guard_obstack); copy_comment (finput, &guard_obstack);
break; break;
case '$': case '$':
copy_dollar (finput, 0, &guard_obstack, rule, stack_offset); copy_dollar (finput, &guard_obstack, rule, stack_offset);
break; break;
case '@': case '@':
copy_at (finput, 0, &guard_obstack, stack_offset); copy_at (finput, &guard_obstack, stack_offset);
break; break;
case EOF: case EOF: