]> git.saurik.com Git - bison.git/commitdiff
* src/system.h (LIST_FREE, shortcpy): New.
authorAkim Demaille <akim@epita.fr>
Mon, 19 Nov 2001 10:31:49 +0000 (10:31 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 19 Nov 2001 10:31:49 +0000 (10:31 +0000)
* src/LR0.c: Use them.
* src/output.c (free_itemsets, free_reductions, free_shifts):
Remove, replaced by LIST_FREE.

ChangeLog
src/LR0.c
src/lalr.c
src/output.c
src/system.h

index d833a18c242027e5b73acca26530da3906230117..f67485eb1dd99abd6c61d328d000fa12cba55888 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2001-11-19  Akim Demaille  <akim@epita.fr>
+
+       * src/system.h (LIST_FREE, shortcpy): New.
+       * src/LR0.c: Use them.
+       * src/output.c (free_itemsets, free_reductions, free_shifts):
+       Remove, replaced by LIST_FREE.
+
+       
 2001-11-19  Akim Demaille  <akim@epita.fr>
 
        * src/state.h (CORE_ALLOC, SHIFTS_ALLOC, ERRS_ALLOC)
index e3db49aa4562f30cd1dd756bb9805641ebd67bb5..db42fe30a8c913961f45b7005de73abee8f87af1 100644 (file)
--- a/src/LR0.c
+++ b/src/LR0.c
@@ -196,9 +196,6 @@ new_state (int symbol)
 {
   int n;
   core *p;
-  short *isp1;
-  short *isp2;
-  short *iend;
 
 #if TRACE
   fprintf (stderr, "Entering new_state, symbol = %d, state = %d\n",
@@ -208,18 +205,14 @@ new_state (int symbol)
   if (nstates >= MAXSHORT)
     fatal (_("too many states (max %d)"), MAXSHORT);
 
-  isp1 = kernel_base[symbol];
-  iend = kernel_end[symbol];
-  n = iend - isp1;
+  n = kernel_end[symbol] - kernel_base[symbol];
 
   p = CORE_ALLOC (n);
   p->accessing_symbol = symbol;
   p->number = nstates;
   p->nitems = n;
 
-  isp2 = p->items;
-  while (isp1 < iend)
-    *isp2++ = *isp1++;
+  shortcpy (p->items, kernel_base[symbol], n);
 
   last_state->next = p;
   last_state = p;
@@ -360,21 +353,13 @@ static void
 save_shifts (void)
 {
   shifts *p;
-  short *sp1;
-  short *sp2;
-  short *send;
 
   p = SHIFTS_ALLOC (nshifts);
 
   p->number = this_state->number;
   p->nshifts = nshifts;
 
-  sp1 = shiftset;
-  sp2 = p->shifts;
-  send = shiftset + nshifts;
-
-  while (sp1 < send)
-    *sp2++ = *sp1++;
+  shortcpy (p->shifts, shiftset, nshifts);
 
   if (last_shift)
     {
@@ -603,8 +588,6 @@ static void
 save_reductions (void)
 {
   short *isp;
-  short *rp1;
-  short *rp2;
   int item;
   int count;
   reductions *p;
@@ -630,12 +613,7 @@ save_reductions (void)
       p->number = this_state->number;
       p->nreds = count;
 
-      rp1 = redset;
-      rp2 = p->rules;
-      rend = rp1 + count;
-
-      for (/* nothing */; rp1 < rend; ++rp1, ++rp2)
-       *rp2 = *rp1;
+      shortcpy (p->rules, redset, count);
 
       if (last_reduction)
        {
index 46e1a6d5d7e3c085fa772388be717aa37d8c010e..42cd05ef938f287ae97866fccd98c1c7a02eb29d 100644 (file)
@@ -653,14 +653,7 @@ compute_lookaheads (void)
 
   /* Free LOOKBACK. */
   for (i = 0; i < state_table[nstates].lookaheads; i++)
-    {
-      shorts *sptmp;
-      for (sp = lookback[i]; sp; sp = sptmp)
-       {
-         sptmp = sp->next;
-         XFREE (sp);
-       }
-    }
+    LIST_FREE (shorts, lookback[i]);
 
   XFREE (lookback);
   XFREE (F);
index 87ab880e1365e8d26032a6d1fa49248b34e68bfe..4317215473ca2a45f92cdacfdecce8ae32af94e8 100644 (file)
@@ -567,33 +567,6 @@ token_actions (void)
 }
 
 
-static void
-free_shifts (void)
-{
-  shifts *sp, *sptmp;  /* JF derefrenced freed ptr */
-
-  for (sp = first_shift; sp; sp = sptmp)
-    {
-      sptmp = sp->next;
-      XFREE (sp);
-    }
-}
-
-
-static void
-free_reductions (void)
-{
-  reductions *rp, *rptmp;      /* JF fixed freed ptr */
-
-  for (rp = first_reduction; rp; rp = rptmp)
-    {
-      rptmp = rp->next;
-      XFREE (rp);
-    }
-}
-
-
-
 static void
 save_column (int symbol, int default_state)
 {
@@ -946,8 +919,8 @@ output_actions (void)
   width = XCALLOC (short, nvectors);
 
   token_actions ();
-  free_shifts ();
-  free_reductions ();
+  LIST_FREE (shifts, first_shift);
+  LIST_FREE (reductions, first_reduction);
   XFREE (LA);
   XFREE (LAruleno);
 
@@ -1045,17 +1018,6 @@ output_master_parser (void)
 }
 
 
-static void
-free_itemsets (void)
-{
-  core *cp, *cptmp;
-  for (cp = first_state; cp; cp = cptmp)
-    {
-      cptmp = cp->next;
-      XFREE (cp);
-    }
-}
-
 /* FIXME. */
 
 #define MUSCLE_INSERT_INT(Key, Value)                          \
@@ -1115,7 +1077,7 @@ output (void)
 {
   obstack_init (&output_obstack);
 
-  free_itemsets ();
+  LIST_FREE (core, first_state);
 
   output_token_translations ();
   output_gram ();
index bfd244637a0b8fe1efb9508df6f9ea07eaf4a16e..b8a73edbdc27effa05559fc53000a395976277f6 100644 (file)
@@ -279,6 +279,21 @@ do {                                                               \
 #endif
 
 
+/* As memcpy, but for shorts.  */
+#define shortcpy(Dest, Src, Num) \
+  memcpy (Dest, Src, Num * sizeof (short))
+
+/* Free a linked list. */
+#define LIST_FREE(Type, List)                  \
+do {                                           \
+  Type *_node, *_next;                         \
+  for (_node = List; _node; _node = _next)     \
+    {                                          \
+      _next = _node->next;                     \
+      XFREE (_node);                           \
+    }                                          \
+} while (0)
+
 /*---------------------------------.
 | Debugging the memory allocator.  |
 `---------------------------------*/