texinfo-commits
[Top][All Lists]
Advanced

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

[6049] parsetexi use INDEX_ENTRY_REF structure


From: Gavin D. Smith
Subject: [6049] parsetexi use INDEX_ENTRY_REF structure
Date: Sun, 18 Jan 2015 18:13:53 +0000

Revision: 6049
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=6049
Author:   gavin
Date:     2015-01-18 18:13:51 +0000 (Sun, 18 Jan 2015)
Log Message:
-----------
parsetexi use INDEX_ENTRY_REF structure

Modified Paths:
--------------
    trunk/parsetexi/ChangeLog
    trunk/parsetexi/debug.c
    trunk/parsetexi/dump_perl.c
    trunk/parsetexi/extra.c
    trunk/parsetexi/indices.c
    trunk/parsetexi/makeinfo-debug.txt
    trunk/parsetexi/parser.c
    trunk/parsetexi/parser.h
    trunk/parsetexi/tree_types.h

Modified: trunk/parsetexi/ChangeLog
===================================================================
--- trunk/parsetexi/ChangeLog   2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/ChangeLog   2015-01-18 18:13:51 UTC (rev 6049)
@@ -1,3 +1,19 @@
+2015-01-18  Gavin Smith  <address@hidden>
+
+       * tree_types.h (INDEX_ENTRY_REF): New type.
+       * indices.c (enter_index_entry): Create an INDEX_ENTRY_REF 
+       object and store it instead of a pointer to an INDEX_ENTRY, 
+       because the latter could be become invalid when the containing 
+       array was reallocated.
+       * extra.c (add_extra_key_index_entry): Take an INDEX_ENTRY_REF 
+       argument.
+       * indices.c (enter_index_entry): Call to 
+       add_extra_key_index_entry updated.
+       * dump_perl.c (dump_extra) <index entry>: Get stored value as an
+       INDEX_ENTRY_REF.
+
+       * parser.c (parse_texi): Always return the root of the tree.
+
 2015-01-14  Gavin Smith  <address@hidden>
 
        First support of outputting an index.

Modified: trunk/parsetexi/debug.c
===================================================================
--- trunk/parsetexi/debug.c     2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/debug.c     2015-01-18 18:13:51 UTC (rev 6049)
@@ -16,7 +16,7 @@
 #include <stdio.h>
 
 /* Whether to dump debugging output on stderr. */
-int debug_output = 1;
+int debug_output = 0;
 
 void
 debug (char *s, ...)

Modified: trunk/parsetexi/dump_perl.c
===================================================================
--- trunk/parsetexi/dump_perl.c 2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/dump_perl.c 2015-01-18 18:13:51 UTC (rev 6049)
@@ -173,7 +173,8 @@
                  main parse tree, but in the indices_information.  It would
                  be much nicer if we could get rid of the need for this key. */
 
-              INDEX_ENTRY *value = (INDEX_ENTRY *) e->extra[i].value;
+              INDEX_ENTRY_REF *ire = (INDEX_ENTRY_REF *) e->extra[i].value;
+              INDEX_ENTRY *value = &ire->index->index_entries[ire->entry];
 
               dump_route_to_element (e, &tree_to_indices_dump);
               text_printf (&tree_to_indices_dump, "{'extra'}{'%s'} = ",

Modified: trunk/parsetexi/extra.c
===================================================================
--- trunk/parsetexi/extra.c     2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/extra.c     2015-01-18 18:13:51 UTC (rev 6049)
@@ -61,7 +61,7 @@
 }
 
 void
-add_extra_key_index_entry (ELEMENT *e, char *key, INDEX_ENTRY *value)
+add_extra_key_index_entry (ELEMENT *e, char *key, INDEX_ENTRY_REF *value)
 {
   add_extra_key (e, key, (ELEMENT *) value);
   e->extra[e->extra_number - 1].type = extra_index_entry;

Modified: trunk/parsetexi/indices.c
===================================================================
--- trunk/parsetexi/indices.c   2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/indices.c   2015-01-18 18:13:51 UTC (rev 6049)
@@ -98,6 +98,7 @@
 {
   INDEX *idx;
   INDEX_ENTRY *entry;
+  INDEX_ENTRY_REF *ier;
 
   idx = index_of_command (index_type_command);
   if (idx->index_number == idx->index_space)
@@ -123,6 +124,10 @@
 
   entry->number = idx->index_number;
 
-  add_extra_key_index_entry (current, "index_entry", entry);
+  ier = malloc (sizeof (INDEX_ENTRY_REF));
+  ier->index = idx;
+  ier->entry = idx->index_number - 1;
 
+  add_extra_key_index_entry (current, "index_entry", ier);
+
 }

Modified: trunk/parsetexi/makeinfo-debug.txt
===================================================================
--- trunk/parsetexi/makeinfo-debug.txt  2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/makeinfo-debug.txt  2015-01-18 18:13:51 UTC (rev 6049)
@@ -52,3 +52,21 @@
 user    0m1.805s
 sys     0m1.396s
 
+18th Jan 2015
+
+(with debugging output turned off)
+bash $time ./parsetexi texinfo.texi >/dev/null
+
+real    0m0.447s
+user    0m0.375s
+sys     0m0.051s
+
+
+(with "dump_tree_to_perl" commented out in main())
+bash $time ./parsetexi texinfo.texi           
+
+real    0m0.175s
+user    0m0.108s
+sys     0m0.053s
+
+

Modified: trunk/parsetexi/parser.c
===================================================================
--- trunk/parsetexi/parser.c    2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/parser.c    2015-01-18 18:13:51 UTC (rev 6049)
@@ -937,6 +937,12 @@
     {
       ELEMENT *dummy;
       current = close_commands (current, CM_NONE, &dummy, CM_NONE);
+
+      /* Make sure we are at the very top - we could have stopped at the "top" 
+         element, with "document_root" still to go.  (This happens if the file 
+         didn't end with "@bye".) */
+      while (current->parent)
+        current = current->parent;
     }
 
   /* Check for "unclosed stacks". */

Modified: trunk/parsetexi/parser.h
===================================================================
--- trunk/parsetexi/parser.h    2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/parser.h    2015-01-18 18:13:51 UTC (rev 6049)
@@ -65,7 +65,7 @@
 void add_extra_key_element (ELEMENT *e, char *key, ELEMENT *value);
 void add_extra_key_contents (ELEMENT *e, char *key, ELEMENT *value);
 void add_extra_key_text (ELEMENT *e, char *key, ELEMENT *value);
-void add_extra_key_index_entry (ELEMENT *e, char *key, INDEX_ENTRY *value);
+void add_extra_key_index_entry (ELEMENT *e, char *key, INDEX_ENTRY_REF *value);
 void add_extra_key_misc_args (ELEMENT *e, char *key, ELEMENT *value);
 KEY_PAIR *lookup_extra_key (ELEMENT *e, char *key);
 

Modified: trunk/parsetexi/tree_types.h
===================================================================
--- trunk/parsetexi/tree_types.h        2015-01-16 00:07:47 UTC (rev 6048)
+++ trunk/parsetexi/tree_types.h        2015-01-18 18:13:51 UTC (rev 6049)
@@ -118,4 +118,12 @@
     size_t index_space;
 } INDEX;
 
+/* Used when dumping to a text stream only.  A reference to an
+   index entry, in the "index_entry" extra key of an element.
+   index->index_entries[entry] is the referred-to index entry. */
+typedef struct {
+    INDEX *index;
+    int entry;
+} INDEX_ENTRY_REF;
 
+




reply via email to

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