[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: encapsulating code properties
From: |
Joel E. Denny |
Subject: |
Re: encapsulating code properties |
Date: |
Wed, 3 Jan 2007 01:06:11 -0500 (EST) |
On Wed, 3 Jan 2007, Joel E. Denny wrote:
> On Tue, 2 Jan 2007, Paul Eggert wrote:
>
> > > 2007-01-02 Joel E. Denny <address@hidden>
> > >
> > > + Use the new code_props interface in parse-gram.y.
> >
> > That looks good too; please install. And thanks.
>
> Done. Thanks.
Here's the next one, uncommitted. One more after this, I believe.
Index: ChangeLog
===================================================================
RCS file: /sources/bison/bison/ChangeLog,v
retrieving revision 1.1645
diff -p -u -r1.1645 ChangeLog
--- ChangeLog 3 Jan 2007 05:14:56 -0000 1.1645
+++ ChangeLog 3 Jan 2007 06:03:44 -0000
@@ -1,3 +1,16 @@
+2007-01-03 Joel E. Denny <address@hidden>
+
+ Use the new code_props interface for rule actions.
+ * src/symlist.h (symbol_list): Replace action, action_location, and
+ used members with a code_props action_props member.
+ * src/reader.c (symbol_should_be_used, grammar_rule_check,
+ grammar_midrule_action, grammar_current_rule_merge_set,
+ grammar_current_rule_symbol_append, packgram): Update.
+ * src/scan-code.h (translate_rule_action): Remove, no longer used.
+ * src/scan-code.l (handle_action_dollar): Update.
+ (translate_rule_action): Remove, no longer used.
+ * src/symlist.c (symbol_list_sym_new, symbol_list_syms_print): Update.
+
2007-01-02 Joel E. Denny <address@hidden>
Use the new code_props interface in parse-gram.y.
Index: src/reader.c
===================================================================
RCS file: /sources/bison/bison/src/reader.c,v
retrieving revision 1.279
diff -p -u -r1.279 reader.c
--- src/reader.c 17 Nov 2006 20:07:07 -0000 1.279
+++ src/reader.c 3 Jan 2007 06:03:44 -0000
@@ -1,7 +1,7 @@
/* Input parser for Bison
Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002, 2003,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -256,10 +256,11 @@ symbol_should_be_used (symbol_list const
if (symbol_destructor_get (s->content.sym))
return true;
if (warnings_flag & warnings_midrule_values)
- return ((s->midrule && s->midrule->used)
+ return ((s->midrule && s->midrule->action_props.is_value_used)
|| (s->midrule_parent_rule
&& symbol_list_n_get (s->midrule_parent_rule,
- s->midrule_parent_rhs_index)->used));
+ s->midrule_parent_rhs_index)
+ ->action_props.is_value_used));
return false;
}
@@ -278,7 +279,7 @@ grammar_rule_check (const symbol_list *r
Don't worry about the default action if $$ is untyped, since $$'s
value can't be used. */
- if (!r->action && r->content.sym->type_name)
+ if (!r->action_props.code && r->content.sym->type_name)
{
symbol *first_rhs = r->next->content.sym;
/* If $$ is being set in default way, report if any type mismatch. */
@@ -303,10 +304,10 @@ grammar_rule_check (const symbol_list *r
symbol_list const *l = r;
int n = 0;
for (; l && l->content.sym; l = l->next, ++n)
- if (! (l->used
+ if (! (l->action_props.is_value_used
|| !symbol_should_be_used (l)
/* The default action, $$ = $1, `uses' both. */
- || (!r->action && (n == 0 || n == 1))))
+ || (!r->action_props.code && (n == 0 || n == 1))))
{
if (n)
warn_at (r->location, _("unused value: $%d"), n);
@@ -346,7 +347,7 @@ grammar_midrule_action (void)
/* Make a DUMMY nonterminal, whose location is that of the midrule
action. Create the MIDRULE. */
- location dummy_location = current_rule->action_location;
+ location dummy_location = current_rule->action_props.location;
symbol *dummy = dummy_symbol_get (dummy_location);
symbol_list *midrule = symbol_list_sym_new (dummy, dummy_location);
@@ -356,12 +357,11 @@ grammar_midrule_action (void)
++nritems;
/* Attach its location and actions to that of the DUMMY. */
midrule->location = dummy_location;
- midrule->action = current_rule->action;
- midrule->action_location = dummy_location;
- current_rule->action = NULL;
- /* The action has not been translated yet, so $$ use hasn't been
- detected yet. */
- midrule->used = false;
+ code_props_rule_action_init (&midrule->action_props,
+ current_rule->action_props.code,
+ current_rule->action_props.location,
+ midrule);
+ code_props_none_init (¤t_rule->action_props);
if (previous_rule_end)
previous_rule_end->next = midrule;
@@ -427,7 +427,7 @@ grammar_current_rule_merge_set (uniqstr
void
grammar_current_rule_symbol_append (symbol *sym, location loc)
{
- if (current_rule->action)
+ if (current_rule->action_props.code)
grammar_midrule_action ();
grammar_symbol_append (sym, loc);
}
@@ -437,12 +437,12 @@ grammar_current_rule_symbol_append (symb
void
grammar_current_rule_action_append (const char *action, location loc)
{
- if (current_rule->action)
+ if (current_rule->action_props.code)
grammar_midrule_action ();
/* After all symbol declarations have been parsed, packgram invokes
- translate_rule_action. */
- current_rule->action = action;
- current_rule->action_location = loc;
+ code_props_translate_code. */
+ code_props_rule_action_init (¤t_rule->action_props, action, loc,
+ current_rule);
}
@@ -473,8 +473,7 @@ packgram (void)
`$' from any midrule symbol name. */
while (p)
{
- if (p->action)
- p->action = translate_rule_action (p);
+ code_props_translate_code (&p->action_props);
if (p)
p = p->next;
}
@@ -496,16 +495,17 @@ packgram (void)
rules[ruleno].precsym = NULL;
rules[ruleno].location = p->location;
rules[ruleno].useful = true;
- rules[ruleno].action = p->action;
- rules[ruleno].action_location = p->action_location;
+ rules[ruleno].action = p->action_props.code;
+ rules[ruleno].action_location = p->action_props.location;
/* If the midrule's $$ is set or its $n is used, remove the `$' from the
symbol name so that it's a user-defined symbol so that the default
%destructor and %printer apply. */
if (p->midrule_parent_rule
- && (p->used
+ && (p->action_props.is_value_used
|| symbol_list_n_get (p->midrule_parent_rule,
- p->midrule_parent_rhs_index)->used))
+ p->midrule_parent_rhs_index)
+ ->action_props.is_value_used))
p->content.sym->tag += 1;
/* Don't check the generated rule 0. It has no action, so some rhs
Index: src/scan-code.h
===================================================================
RCS file: /sources/bison/bison/src/scan-code.h,v
retrieving revision 1.8
diff -p -u -r1.8 scan-code.h
--- src/scan-code.h 3 Jan 2007 05:14:57 -0000 1.8
+++ src/scan-code.h 3 Jan 2007 06:03:44 -0000
@@ -163,13 +163,9 @@ void code_scanner_last_string_free (void
* - None.
* \post
* - All dynamic memory allocated during invocations of
- * \c code_props_translate_code or \c translate_rule_action (if any) has
- * been freed. All \c code_props instances may now be invalid.
+ * \c code_props_translate_code (if any) has been freed. All \c code_props
+ * instances may now be invalid.
*/
void code_scanner_free (void);
-/* The action of the rule R contains $$, $1 etc. referring to the values
- of the rule R. */
-char const *translate_rule_action (struct symbol_list *r);
-
#endif /* !SCAN_CODE_H_ */
Index: src/scan-code.l
===================================================================
RCS file: /sources/bison/bison/src/scan-code.l,v
retrieving revision 1.19
diff -p -u -r1.19 scan-code.l
--- src/scan-code.l 3 Jan 2007 05:14:57 -0000 1.19
+++ src/scan-code.l 3 Jan 2007 06:03:44 -0000
@@ -304,7 +304,7 @@ handle_action_dollar (symbol_list *rule,
obstack_fgrow1 (&obstack_for_string,
"]b4_lhs_value([%s])[", type_name);
- rule->used = true;
+ rule->action_props.is_value_used = true;
}
else
{
@@ -333,7 +333,8 @@ handle_action_dollar (symbol_list *rule,
"]b4_rhs_value(%d, %d, [%s])[",
effective_rule_length, n, type_name);
if (n > 0)
- symbol_list_n_get (effective_rule, n)->used = true;
+ symbol_list_n_get (effective_rule, n)->action_props.is_value_used =
+ true;
}
else
complain_at (dollar_loc, _("integer out of range: %s"), quote (text));
@@ -479,12 +480,3 @@ code_scanner_free (void)
/* Reclaim Flex's buffers. */
yylex_destroy ();
}
-
-char const *
-translate_rule_action (symbol_list *rule)
-{
- code_props cp;
- code_props_rule_action_init (&cp, rule->action, rule->action_location, rule);
- code_props_translate_code (&cp);
- return cp.code;
-}
Index: src/symlist.c
===================================================================
RCS file: /sources/bison/bison/src/symlist.c,v
retrieving revision 1.28
diff -p -u -r1.28 symlist.c
--- src/symlist.c 3 Jan 2007 05:14:57 -0000 1.28
+++ src/symlist.c 3 Jan 2007 06:03:44 -0000
@@ -43,8 +43,7 @@ symbol_list_sym_new (symbol *sym, locati
res->midrule_parent_rule = NULL;
res->midrule_parent_rhs_index = 0;
- res->action = NULL;
- res->used = false;
+ code_props_none_init (&res->action_props);
res->ruleprec = NULL;
res->dprec = 0;
@@ -118,7 +117,7 @@ symbol_list_syms_print (const symbol_lis
for (/* Nothing. */; l && l->content.sym; l = l->next)
{
symbol_print (l->content.sym, f);
- fprintf (stderr, l->used ? " used" : " unused");
+ fprintf (stderr, l->action_props.is_value_used ? " used" : " unused");
if (l && l->content.sym)
fprintf (f, ", ");
}
Index: src/symlist.h
===================================================================
RCS file: /sources/bison/bison/src/symlist.h,v
retrieving revision 1.25
diff -p -u -r1.25 symlist.h
--- src/symlist.h 3 Jan 2007 05:14:57 -0000 1.25
+++ src/symlist.h 3 Jan 2007 06:03:44 -0000
@@ -61,12 +61,9 @@ typedef struct symbol_list
struct symbol_list *midrule_parent_rule;
int midrule_parent_rhs_index;
- /* The action is attached to the LHS of a rule. */
- const char *action;
- location action_location;
-
- /* Whether this symbol's value is used in the current action. */
- bool used;
+ /* The action is attached to the LHS of a rule, but action properties for
+ * each RHS are also stored here. */
+ code_props action_props;
/* Precedence/associativity. */
symbol *ruleprec;
- Re: encapsulating code properties, Joel E. Denny, 2007/01/02
- Re: encapsulating code properties, Paul Eggert, 2007/01/02
- Re: encapsulating code properties, Joel E. Denny, 2007/01/02
- Re: encapsulating code properties, Joel E. Denny, 2007/01/02
- Re: encapsulating code properties, Paul Eggert, 2007/01/03
- Re: encapsulating code properties, Joel E. Denny, 2007/01/03
- Re: encapsulating code properties,
Joel E. Denny <=
- Re: encapsulating code properties, Joel E. Denny, 2007/01/03
- Re: encapsulating code properties, Joel E. Denny, 2007/01/03