mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 02:03:03 +00:00
* 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:
@@ -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
|
||||||
|
|||||||
148
src/reader.c
148
src/reader.c
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user