bison-patches
[Top][All Lists]
Advanced

[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 (&current_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 (&current_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;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]