bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02-leaks.patch


From: Akim Demaille
Subject: 02-leaks.patch
Date: Wed, 03 Jul 2002 08:48:58 +0200

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/output.c (prepare_actions): Free `tally' and `width'.
        (prepare_actions): Allocate and free `order'.
        * src/symtab.c (symbols_free): Free `symbols'.
        * src/scan-gram.l (scanner_free): Clear Flex's scanners memory.
        * src/output.c (m4_invoke): Move to...
        * src/scan-skel.l: here.
        (<<EOF>>): Close yyout, and free its name.
        
        
Index: src/scan-gram.l
--- src/scan-gram.l Sun, 30 Jun 2002 16:26:42 +0200 akim
+++ src/scan-gram.l Tue, 02 Jul 2002 23:41:47 +0200 akim
@@ -42,7 +42,6 @@
 #define YY_LINES        LOCATION_LINES (*yylloc, yyleng); lineno += yyleng;
 #define YY_STEP         LOCATION_STEP (*yylloc)
 
-
 /* STRING_OBSTACK -- Used to store all the characters that we need to
    keep (to construct ID, STRINGS etc.).  Use the following macros to
    use it.
@@ -730,4 +729,6 @@
 scanner_free (void)
 {
   obstack_free (&string_obstack, 0);
+  /* Reclaim Flex's buffers.  */
+  yy_delete_buffer (YY_CURRENT_BUFFER);
 }
Index: src/output.c
--- src/output.c Tue, 02 Jul 2002 23:07:25 +0200 akim
+++ src/output.c Tue, 02 Jul 2002 23:31:25 +0200 akim
@@ -104,12 +104,8 @@
 #include "conflicts.h"
 #include "muscle_tab.h"
 
-/* From lib/readpipe.h.  */
-FILE *readpipe PARAMS ((const char *, ...));
-
 /* From src/scan-skel.l. */
-int skel_lex PARAMS ((void));
-extern FILE *skel_in;
+void m4_invoke PARAMS ((const char *definitions));
 
 static int nvectors;
 static int nentries;
@@ -893,7 +889,6 @@
 {
   int i;
 
-  order = XCALLOC (short, nvectors);
   nentries = 0;
 
   for (i = 0; i < nvectors; i++)
@@ -1055,10 +1050,10 @@
       XFREE (conflict_tos[i]);
     }
 
-  XFREE (froms);
-  XFREE (tos);
-  XFREE (conflict_tos);
-  XFREE (pos);
+  free (froms);
+  free (tos);
+  free (conflict_tos);
+  free (pos);
 }
 
 /* the following functions output yytable, yycheck, yyconflp, yyconfl,
@@ -1123,7 +1118,7 @@
 `-----------------------------------------------------------------*/
 
 static void
-output_actions (void)
+prepare_actions (void)
 {
   /* That's a poor way to make sure the sizes are properly corelated,
      in particular the signedness is not taking into account, but it's
@@ -1148,8 +1143,13 @@
   XFREE (from_state);
   XFREE (to_state);
 
+  order = XCALLOC (short, nvectors);
   sort_actions ();
   pack_table ();
+  free (order);
+
+  free (tally);
+  free (width);
 
   output_base ();
   output_table ();
@@ -1159,46 +1159,6 @@
 }
 
 
-/*----------------------.
-| Run our backend, M4.  |
-`----------------------*/
-
-static void
-m4_invoke (const char *definitions)
-{
-  /* Invoke m4 on the definition of the muscles, and the skeleton. */
-  const char *bison_pkgdatadir = getenv ("BISON_PKGDATADIR");
-  const char *m4 = getenv ("M4");
-  int pkg_data_len;
-  char *full_skeleton;
-
-  if (!m4)
-    m4 = M4;
-  if (!bison_pkgdatadir)
-    bison_pkgdatadir = PKGDATADIR;
-  pkg_data_len = strlen (bison_pkgdatadir);
-  full_skeleton = XMALLOC (char, pkg_data_len + strlen (skeleton) + 2);
-  if (bison_pkgdatadir[pkg_data_len-1] == '/')
-    sprintf (full_skeleton, "%s%s", bison_pkgdatadir, skeleton);
-  else
-    sprintf (full_skeleton, "%s/%s", bison_pkgdatadir, skeleton);
-  if (trace_flag)
-    fprintf (stderr,
-            "running: %s -I %s m4sugar/m4sugar.m4 %s %s\n",
-            m4, bison_pkgdatadir, definitions, full_skeleton);
-  skel_in = readpipe (m4,
-                     "-I", bison_pkgdatadir,
-                     "m4sugar/m4sugar.m4",
-                     definitions,
-                     full_skeleton,
-                     NULL);
-  XFREE (full_skeleton);
-  if (!skel_in)
-    error (EXIT_FAILURE, errno, "cannot run m4");
-  skel_lex ();
-}
-
-
 /*---------------------------.
 | Call the skeleton parser.  |
 `---------------------------*/
@@ -1311,7 +1271,7 @@
   prepare_tokens ();
   prepare_rules ();
   prepare_states ();
-  output_actions ();
+  prepare_actions ();
 
   prepare ();
 
Index: src/scan-skel.l
--- src/scan-skel.l Thu, 06 Jun 2002 20:45:16 +0200 akim
+++ src/scan-skel.l Tue, 02 Jul 2002 23:19:47 +0200 akim
@@ -23,6 +23,8 @@
 
 %{
 #include "system.h"
+#include "error.h"
+#include "getargs.h"
 #include "files.h"
 int skel_lex PARAMS ((void));
 static int yylineno = 1;
@@ -38,8 +40,8 @@
      yylineno = 1;
    }
 
-"@<:@" fputc ('[', yyout);
-"@:>@" fputc (']', yyout);
+"@<:@"           fputc ('[', yyout);
+"@:>@"           fputc (']', yyout);
 
 "__oline__"      fprintf (yyout, "%d", yylineno+1);
 "__ofile__"      fprintf (yyout, "%s", yyoutname);
@@ -47,4 +49,52 @@
 \n+              yylineno += yyleng; ECHO;
 .                ECHO;
 
+<<EOF>>          xfclose (yyout); free (yyoutname); return EOF;
 %%
+
+/* From lib/readpipe.c.  */
+FILE *readpipe PARAMS ((const char *, ...));
+
+/*----------------------.
+| Run our backend, M4.  |
+`----------------------*/
+
+void m4_invoke PARAMS ((const char *definitions));
+
+void
+m4_invoke (const char *definitions)
+{
+  /* Invoke m4 on the definition of the muscles, and the skeleton. */
+  const char *bison_pkgdatadir = getenv ("BISON_PKGDATADIR");
+  const char *m4 = getenv ("M4");
+  int pkg_data_len;
+  char *full_skeleton;
+
+  if (!m4)
+    m4 = M4;
+  if (!bison_pkgdatadir)
+    bison_pkgdatadir = PKGDATADIR;
+  pkg_data_len = strlen (bison_pkgdatadir);
+  full_skeleton = XMALLOC (char, pkg_data_len + strlen (skeleton) + 2);
+  if (bison_pkgdatadir[pkg_data_len-1] == '/')
+    sprintf (full_skeleton, "%s%s", bison_pkgdatadir, skeleton);
+  else
+    sprintf (full_skeleton, "%s/%s", bison_pkgdatadir, skeleton);
+  if (trace_flag)
+    fprintf (stderr,
+            "running: %s -I %s m4sugar/m4sugar.m4 %s %s\n",
+            m4, bison_pkgdatadir, definitions, full_skeleton);
+  skel_in = readpipe (m4,
+                     "-I", bison_pkgdatadir,
+                     "m4sugar/m4sugar.m4",
+                     definitions,
+                     full_skeleton,
+                     NULL);
+  XFREE (full_skeleton);
+  if (!skel_in)
+    error (EXIT_FAILURE, errno, "cannot run m4");
+  skel_lex ();
+
+  /* Reclaim Flex's buffers.  */
+  yy_delete_buffer (YY_CURRENT_BUFFER);
+}
Index: src/symtab.c
--- src/symtab.c Sun, 30 Jun 2002 16:26:42 +0200 akim
+++ src/symtab.c Tue, 02 Jul 2002 23:22:20 +0200 akim
@@ -464,6 +464,7 @@
 symbols_free (void)
 {
   hash_free (symbol_table);
+  free (symbols);
 }
 
 



reply via email to

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