diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-10-16 06:46:19 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-10-16 06:46:19 -0700 |
commit | afbca6b306ddd07e84c44f4d47bd04ddd3cada86 (patch) | |
tree | 59f7253c56746b4c5bbec6f8124dc0e3616efee3 /tree.c | |
parent | 337ffc1e586d48b5fe6a334a6fd61587961fe261 (diff) | |
download | txr-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.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -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)); |