From 82e759959cda6cee81486a1f3f5fef0713587223 Mon Sep 17 00:00:00 2001 From: c Date: Mon, 27 Nov 2023 09:06:35 -0500 Subject: Definitions with no arguments can now be parsed. Definitions with arguments can also be parser, but they cannot store values. --- src/tree.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'src/tree.c') 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; -- cgit v1.2.3