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, 28 insertions, 22 deletions
diff --git a/src/tree.c b/src/tree.c
index 235d0e6..dc0a9ad 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -1,35 +1,41 @@
#include "include/tree.h"
+#include "include/util.h"
+
tree_t* tree_init(int type) {
tree_t* tree;
- tree = calloc(1, sizeof(struct TREE_STRUC));
+ tree = emalloc(sizeof(struct TREE));
+
tree->type = type;
- switch (type) {
- case TREE_COMP:
- tree->data.comp.value = NULL;
- tree->data.comp.size = 0;
+ switch (tree->type) {
+ case TREE_TYPE_LINT:
+ tree->data.lint.val = 0;
+ break;
+ case TREE_TYPE_LSTR:
+ tree->data.lstr.len = 0;
+ break;
+ case TREE_TYPE_TAG:
+ tree->data.tag.val = NULL;
+ tree->data.tag.nxt = NULL;
+ break;
+ case TREE_TYPE_DARG:
+ tree->data.darg.tag = NULL;
+ tree->data.darg.nxt = NULL;
break;
- case TREE_DEF:
- tree->data.def.type = NULL;
- tree->data.def.tags = NULL;
- tree->data.def.tags_size = 0;
- tree->data.def.name = NULL;
- tree->data.def.args = NULL;
- tree->data.def.tags_size = 0;
- tree->data.def.value = NULL;
+ case TREE_TYPE_CARG:
+ tree->data.carg.val = NULL;
+ tree->data.carg.nxt = NULL;
break;
- case TREE_CALL:
- tree->data.call.target = NULL;
- tree->data.call.args = NULL;
- tree->data.call.args_size = 0;
+ case TREE_TYPE_DEF:
+ tree->data.def.tag = NULL;
+ tree->data.def.arg = NULL;
+ tree->data.def.val = NULL;
break;
- case TREE_TYPE_STR:
- tree->data.type_str.value = NULL;
- break;
- case TREE_TYPE_INT:
- tree->data.type_int.value = 0;
+ case TREE_TYPE_CAL:
+ tree->data.cal.target = NULL;
+ tree->data.cal.arg = NULL;
break;
}