[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;
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [6049] parsetexi use INDEX_ENTRY_REF structure,
Gavin D. Smith <=