From 337ffc1e586d48b5fe6a334a6fd61587961fe261 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 16 Oct 2019 00:05:08 -0700 Subject: tree: introduce copy-tnode. * lib.c (copy): Handle TNOD casee via copy_tnode. * tree.c (copy_tnode): New function. (tree_init): copy-tnode intrinsic registered. * tree.h (copy_tnode): Declared. * txr.1: copy function documented as handling tnode type via copy-tnode. That function is documented. --- tree.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tree.c') diff --git a/tree.c b/tree.c index 22cac379..43330c06 100644 --- a/tree.c +++ b/tree.c @@ -119,6 +119,13 @@ val key(val node) return node->tn.key; } +val copy_tnode(val node) +{ + val obj = (type_check(lit("copy-tnode"), node, TNOD), make_obj()); + obj->tn = node->tn; + return obj; +} + static ucnum tn_size(val node) { return 1 + if3(node->tn.right, tn_size(node->tn.right), 0) + @@ -677,6 +684,7 @@ void tree_init(void) reg_fun(intern(lit("left"), user_package), func_n1(left)); reg_fun(intern(lit("right"), user_package), func_n1(right)); reg_fun(intern(lit("key"), user_package), func_n1(key)); + reg_fun(intern(lit("copy-tnode"), user_package), func_n1(copy_tnode)); reg_fun(tree_s, func_n4o(tree, 0)); reg_fun(tree_construct_s, func_n2(tree_construct)); reg_fun(intern(lit("treep"), user_package), func_n1(treep)); -- cgit v1.2.3