aboutsummaryrefslogtreecommitdiff
path: root/src/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/src/tree.c b/src/tree.c
index f06f8b0..7c31956 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -8,6 +8,10 @@ tree_t* tree_init(int type) {
tree->type = type;
switch (tree->type) {
+ case TREE_TYPE_BLOCK:
+ tree->data.block.val = NULL;
+ tree->data.block.nxt = NULL;
+ break;
case TREE_TYPE_LINT:
tree->data.lint.val = 0;
break;
@@ -44,21 +48,41 @@ void tree_destroy(tree_t* tree) {
free(tree);
}
-tree_targ_t* tree_targ_init(tree_t* tree) {
- tree_targ_t* targ;
+void tree_print(tree_t* tree, int nest) {
+ char* spaces;
+ int i;
- targ = emalloc(sizeof(tree_targ_t));
- targ->tree = tree;
- targ->nxt = NULL;
+ for (spaces = ecalloc(nest + 1, sizeof(char)), i = 0; i < nest; spaces[i++] = ' ');
+ spaces[i] = '\0';
- return targ;
-}
+#define NEST(TEXT) log_raw("%s" TEXT "\n", spaces);
-void tree_targ_destroy(tree_targ_t* targ) {
- if (targ->nxt) {
- tree_targ_destroy(targ->nxt);
- targ->nxt = NULL;
+ if (!tree) {
+ NEST("NULL");
+ return;
}
- free(targ);
-}
+ switch (tree->type) {
+ case TREE_TYPE_BLOCK:
+ NEST("[block]");
+ NEST(" - val:");
+ tree_print(tree->data.block.val, nest + 3);
+ NEST(" - nxt:");
+ tree_print(tree->data.block.nxt, nest + 3);
+ break;
+ case TREE_TYPE_LINT:
+ log_raw("%s[lint]: %d\n", spaces, tree->data.lint.val);
+ break;
+ case TREE_TYPE_LSTR:
+ log_raw("%s[lstr]: %s\n", spaces, tree->data.lstr.val);
+ break;
+ case TREE_TYPE_TAG:
+ case TREE_TYPE_DARG:
+ case TREE_TYPE_CARG:
+ case TREE_TYPE_DEF:
+ case TREE_TYPE_CAL:
+ NEST("??");
+ break;
+ }
+
+}