summaryrefslogtreecommitdiffstats
path: root/tree.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-10-16 06:46:19 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-10-16 06:46:19 -0700
commitafbca6b306ddd07e84c44f4d47bd04ddd3cada86 (patch)
tree59f7253c56746b4c5bbec6f8124dc0e3616efee3 /tree.c
parent337ffc1e586d48b5fe6a334a6fd61587961fe261 (diff)
downloadtxr-afbca6b306ddd07e84c44f4d47bd04ddd3cada86.tar.gz
txr-afbca6b306ddd07e84c44f4d47bd04ddd3cada86.tar.bz2
txr-afbca6b306ddd07e84c44f4d47bd04ddd3cada86.zip
tree: node set functions and syntactic places.
* lisplib.c (defset_set_entries): Autoload entries for left, right and key. * share/txr/stdlib/defset.tl (left, right, key): New simple-form defsets. * tree.c (set_left, set_right, set_key): New functions. (tree_init): Register intrinsics set-left, set-right and set-key. * tree.h (set_left, set_right, set_key): Declared. * txr.1: key, left and right classified as accessors. Documented set-key, set-left and set-right.
Diffstat (limited to 'tree.c')
-rw-r--r--tree.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/tree.c b/tree.c
index 43330c06..70e43158 100644
--- a/tree.c
+++ b/tree.c
@@ -119,6 +119,27 @@ val key(val node)
return node->tn.key;
}
+val set_left(val node, val nleft)
+{
+ type_check(lit("set-left"), node, TNOD);
+ node->tn.left = nleft;
+ return node;
+}
+
+val set_right(val node, val nright)
+{
+ type_check(lit("set-right"), node, TNOD);
+ node->tn.right = nright;
+ return node;
+}
+
+val set_key(val node, val nkey)
+{
+ type_check(lit("set-key"), node, TNOD);
+ node->tn.key = nkey;
+ return node;
+}
+
val copy_tnode(val node)
{
val obj = (type_check(lit("copy-tnode"), node, TNOD), make_obj());
@@ -684,6 +705,9 @@ 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("set-left"), user_package), func_n2(set_left));
+ reg_fun(intern(lit("set-right"), user_package), func_n2(set_right));
+ reg_fun(intern(lit("set-key"), user_package), func_n2(set_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));