aboutsummaryrefslogtreecommitdiff
path: root/src/tree.c
diff options
context:
space:
mode:
authorc2023-11-27 09:06:35 -0500
committerc2023-11-27 09:06:35 -0500
commit82e759959cda6cee81486a1f3f5fef0713587223 (patch)
tree5d1b151bde4241acb12797776d83be30b727f723 /src/tree.c
parent4719af8e829493d4fee2782ce8870b0cc902638f (diff)
Definitions with no arguments can now be parsed. Definitions with arguments can also be parser, but they cannot store values.
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/tree.c b/src/tree.c
index cea6fcd..48c3acf 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -69,7 +69,7 @@ void tree_destroy(tree_t* tree) {
tree_destroy(tree->data.tag.nxt);
break;
case TREE_TYPE_DARG:
- tree_destroy(tree->data.darg.val);
+ tree_destroy(tree->data.darg.tag);
tree_destroy(tree->data.darg.nxt);
break;
case TREE_TYPE_CARG:
@@ -77,8 +77,8 @@ void tree_destroy(tree_t* tree) {
tree_destroy(tree->data.carg.nxt);
break;
case TREE_TYPE_DEF:
- free(tree->data.def.tag);
- free(tree->data.def.arg);
+ tree_destroy(tree->data.def.tag);
+ tree_destroy(tree->data.def.arg);
tree_destroy(tree->data.def.val);
break;
case TREE_TYPE_CALL:
@@ -144,11 +144,31 @@ void tree_print(tree_t* tree, int nest) {
NEST("nxt:");
tree_print(tree->data.carg.nxt, nest + 1);
break;
+ case TREE_TYPE_DEF:
+ NEST("[def]");
+ NEST("tag:");
+ tree_print(tree->data.def.tag, nest + 1);
+ NEST("arg:");
+ tree_print(tree->data.def.arg, nest + 1);
+ NEST("val:");
+ tree_print(tree->data.def.val, nest + 1);
+ break;
case TREE_TYPE_TAG:
+ NEST("[tag]");
+ NEST("val:");
+ log_raw("%s %s\n", spaces, tree->data.call.target);
+ NEST("nxt:");
+ tree_print(tree->data.tag.nxt, nest + 1);
+ break;
case TREE_TYPE_DARG:
- case TREE_TYPE_DEF:
- NEST("???");
+ NEST("[darg]");
+ NEST("tag:");
+ tree_print(tree->data.darg.tag, nest + 1);
+ NEST("nxt:");
+ tree_print(tree->data.darg.nxt, nest + 1);
break;
+ default:
+ log_err("%d", __LINE__);
}
tree_print_exit: free(spaces); return;