]> git.mdlowis.com Git - proto/sclpl.git/commitdiff
Changed return type for tree_walk
authorMichael D. Lowis <mike@mdlowis.com>
Fri, 9 Jan 2015 19:48:09 +0000 (14:48 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Fri, 9 Jan 2015 19:48:09 +0000 (14:48 -0500)
source/libparse/tree.c
source/libparse/tree.h
source/sclpl/codegen.c

index 77053fe9dbb589614f8006722313afa064be0b3a..7a4373f8e77d7443b0d05d6e669a2e5c64c6d29f 100644 (file)
@@ -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)
index aa61f05dd515fe4adbfb517d287552d953cfdb1d..9e7c0039e965b34c60b31b5f2b64a94dc3cc6b39 100644 (file)
 #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 */
index 76e741f1e90eb198288185d874921195491f6d72..37aa423a1365157b829ce5e3345b0f5b85214288 100644 (file)
@@ -220,3 +220,4 @@ void codegen_csource(FILE* file, vec_t* program) {
     mem_release(funcs);
     emit_footer(file);
 }
+