aboutsummaryrefslogtreecommitdiff
path: root/src/lookup.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-05-06 11:58:47 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-05-06 13:00:06 +0300
commit52c12573a505bf29a0301a1c9553e88c3270713e (patch)
tree642047e5b3de469199b68a76064f756990a3b249 /src/lookup.c
parent8465fa7066d3c922b738346335f801cf9ea2243f (diff)
downloadgrecs-52c12573a505bf29a0301a1c9553e88c3270713e.tar.gz
grecs-52c12573a505bf29a0301a1c9553e88c3270713e.tar.bz2
Rewrite list support to keep doubly-linked lists. Implement tree reduction.
* src/format.c (grecs_format_node) (grecs_format_node_path): Handle grecs_node_root. * src/grecs-gram.y (input production): Create root node. * src/grecs.h (grecs_list_entry)<prev>: New member. (grecs_node_root): New node type. (grecs_node_eq): New proto. (grecs_list_add,grecs_tree_reduce): New protos. * src/list.c: Rewrite as a doubly-linked list. * src/tree.c (grecs_node_bind): Bugfix. (grecs_node_unlink): New function. (_tree_recurse): Allow for removal of the current node. (grecs_node_eq): New function. (grecs_tree_reduce): New function. (grecs_tree_process): Descend into the first subnode at once. * src/lookup.c (node_finder): Handle grecs_node_root. * tests/reduce00.at: New testcase. * tests/reduce01.at: New testcase. * tests/reduce02.at: New testcase. * tests/testsuite.at (GRECS_TEST): New macro. Include reduce0[0-2].at. * tests/gcffmt.c: New option -reduce. * tests/gcfpeek.c: Likewise. * tests/gcfset.c: Likewise.
Diffstat (limited to 'src/lookup.c')
-rw-r--r--src/lookup.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/lookup.c b/src/lookup.c
index 7795274..b2621da 100644
--- a/src/lookup.c
+++ b/src/lookup.c
@@ -231,7 +231,7 @@ node_finder(enum grecs_tree_recurse_op op, struct grecs_node *node, void *data)
{
struct find_closure *fdptr = data;
- if (op == grecs_tree_recurse_post)
+ if (op == grecs_tree_recurse_post || node->type == grecs_node_root)
return grecs_tree_recurse_ok;
if (strcmp(fdptr->argv[fdptr->tag], node->ident) == 0

Return to:

Send suggestions and report system problems to the System administrator.