texinfo-commits
[Top][All Lists]
Advanced

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

[8109] parsetexi work on freeing


From: gavinsmith0123
Subject: [8109] parsetexi work on freeing
Date: Sat, 18 Aug 2018 15:59:32 -0400 (EDT)

Revision: 8109
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=8109
Author:   gavin
Date:     2018-08-18 15:59:31 -0400 (Sat, 18 Aug 2018)
Log Message:
-----------
parsetexi work on freeing

Modified Paths:
--------------
    trunk/tp/Texinfo/XS/parsetexi/def.c
    trunk/tp/Texinfo/XS/parsetexi/tree.c

Modified: trunk/tp/Texinfo/XS/parsetexi/def.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/def.c 2018-08-18 17:02:46 UTC (rev 8108)
+++ trunk/tp/Texinfo/XS/parsetexi/def.c 2018-08-18 19:59:31 UTC (rev 8109)
@@ -64,6 +64,19 @@
 }
 
 
+static ELEMENT *
+shallow_copy_element (ELEMENT *e)
+{
+  ELEMENT *e2 = 0;
+  if (e)
+    {
+      e2 = malloc (sizeof (ELEMENT));
+      memcpy (e2, e, sizeof (ELEMENT));
+      e2->parent_type = route_not_in_tree;
+    }
+  return (e2);
+}
+
 static void
 shallow_destroy_element (ELEMENT *e)
 {
@@ -231,13 +244,13 @@
   d->elements[d->nelements] = 0;
 }
 
-/* Parse the arguments on a def* command line. */
+/* Parse the arguments on a def* command line.
+   The return value is suitable for "def_args" extra value. */
 // 2378
 DEF_ARGS_EXTRA *
 parse_def (enum command_id command, ELEMENT_LIST contents)
 {
-  /* The return value - suitable for "def_args" extra value. */
-  DEF_ARGS_EXTRA *def_args;
+  DEF_ARGS_EXTRA *def_args; /* Return value */
   int i, args_start = 0;
 
   ELEMENT *arg_line; /* Copy of argument line. */
@@ -254,8 +267,13 @@
   for (i = contents.list[0]->type != ET_empty_spaces_after_command ? 0 : 1;
        i < contents.number; i++)
     {
-      if (contents.list[i]->text.space > 0)
+      if (0)
         {
+          add_to_contents_as_array (arg_line,
+                                    shallow_copy_element (contents.list[i]));
+        }
+      else if (contents.list[i]->text.space > 0)
+        {
           /* Copy text to avoid changing the original. */
           ELEMENT *copy = new_element (ET_NONE);
           copy->parent_type = route_not_in_tree;

Modified: trunk/tp/Texinfo/XS/parsetexi/tree.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 17:02:46 UTC (rev 
8108)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 19:59:31 UTC (rev 
8109)
@@ -127,8 +127,32 @@
             free (eft);
             break;
           }
+        case extra_misc_args:
+            /* Same problem as above. */
+          //destroy_element_and_children (e->extra[i].value);
+          break;
+        case extra_def_args:
+          {
+            int j;
+            DEF_ARGS_EXTRA *dae = (DEF_ARGS_EXTRA *) e->extra[i].value;
+
+            /* Same problem as above. */
+            for (j = 0; 0 && j < dae->nelements; j++)
+              {
+                ELEMENT *e = dae->elements[j];
+                if (e->text.end > 0)
+                  {
+                    //destroy_element_and_children (dae->elements[j]);
+                    destroy_element (dae->elements[j]);
+                  }
+                free (dae->labels[j]);
+              }
+            free (dae->labels);
+            free (dae->elements);
+            free (dae);
+          }
+
         default:
-          /* TODO: need to check if the element is in the main tree or not. */
           break;
         }
     }




reply via email to

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