From fcc70c853500240f1fa822bed89479b62fb05965 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Fri, 9 Jan 2015 14:48:09 -0500 Subject: [PATCH] Changed return type for tree_walk --- source/libparse/tree.c | 15 +++++---------- source/libparse/tree.h | 7 +++++-- source/sclpl/codegen.c | 1 + 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/source/libparse/tree.c b/source/libparse/tree.c index 77053fe..7a4373f 100644 --- a/source/libparse/tree.c +++ b/source/libparse/tree.c @@ -96,26 +96,21 @@ bool tree_is_formtype(tree_t* p_tree, const char* val) { return ret; } - -tree_t* tree_walk(tree_t* tree, tree_walker_t* walker) +void tree_walk(tree_t* tree, tree_walker_t* walker) { size_t idx; - tree_t* new_node; - new_node = walker->fn(walker->env, tree, PRE_NODE); + walker->fn(walker->env, tree, PRE_NODE); if (tree->tag == TREE) { walker->fn(walker->env, tree, PRE_CHILDREN); for (idx = 0; idx < vec_size(tree->ptr.vec); idx++) { - tree_t* child = vec_at(tree->ptr.vec, idx); + tree_t* child = (tree_t*)vec_at(tree->ptr.vec, idx); walker->fn(walker->env, tree, PRE_CHILD); - tree_t* new_child = tree_walk( child, walker ); + tree_walk( child, walker ); walker->fn(walker->env, tree, POST_CHILD); - if ((NULL != new_node) && (new_node->tag == TREE) && (NULL != new_child)) { - vec_push_back(new_node->ptr.vec, new_child); - } } walker->fn(walker->env, tree, POST_CHILDREN); } - return new_node; + walker->fn(walker->env, tree, POST_NODE); } tree_walker_t* tree_walker(void* env, tree_walk_fn_t fn) diff --git a/source/libparse/tree.h b/source/libparse/tree.h index aa61f05..9e7c003 100644 --- a/source/libparse/tree.h +++ b/source/libparse/tree.h @@ -10,7 +10,10 @@ #include "vec.h" #include "lexer.h" -typedef enum { ATOM, TREE } tree_tag_t; +typedef enum { + ATOM, + TREE +} tree_tag_t; typedef struct { tree_tag_t tag; @@ -42,7 +45,7 @@ tree_t* tree_get_child(tree_t* p_tree, size_t idx); void* tree_get_val(tree_t* p_tree); void* tree_get_child_val(tree_t* p_tree, size_t idx); bool tree_is_formtype(tree_t* p_tree, const char* val); -tree_t* tree_walk(tree_t* tree, tree_walker_t* walker); +void tree_walk(tree_t* tree, tree_walker_t* walker); tree_walker_t* tree_walker(void* env, tree_walk_fn_t fn); #endif /* TREE_H */ diff --git a/source/sclpl/codegen.c b/source/sclpl/codegen.c index 76e741f..37aa423 100644 --- a/source/sclpl/codegen.c +++ b/source/sclpl/codegen.c @@ -220,3 +220,4 @@ void codegen_csource(FILE* file, vec_t* program) { mem_release(funcs); emit_footer(file); } + -- 2.52.0