diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-05-09 06:57:46 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-05-09 06:57:46 -0700 |
commit | f3cd8ecb633e0c76338017bd9e4f1ea9ffdfcbb5 (patch) | |
tree | 9dc7fd91b7078aad4022d567125ffce88f72dc92 | |
parent | 179218caf4521209cbbe4d6b1267ed0aa3d70245 (diff) | |
download | txr-f3cd8ecb633e0c76338017bd9e4f1ea9ffdfcbb5.tar.gz txr-f3cd8ecb633e0c76338017bd9e4f1ea9ffdfcbb5.tar.bz2 txr-f3cd8ecb633e0c76338017bd9e4f1ea9ffdfcbb5.zip |
cptr: new functions.
* eval.c (eval_init): Register cptr-int, ctpr-obj, cptr-zap
and cptr-free functions and cptr-null variable.
* lib.c (cptr_int, cptr_obj, cptr_zap, cptr_free): New
functions.
* lib.c (cptr_int, cptr_obj, cptr_zap, cptr_free): Declared.
-rw-r--r-- | eval.c | 6 | ||||
-rw-r--r-- | lib.c | 25 | ||||
-rw-r--r-- | lib.h | 4 |
3 files changed, 35 insertions, 0 deletions
@@ -6157,6 +6157,12 @@ void eval_init(void) reg_fun(intern(lit("rlcp"), user_package), func_n2(rlcp)); reg_fun(intern(lit("rlcp-tree"), user_package), func_n2(rlcp_tree)); + reg_fun(intern(lit("cptr-int"), user_package), func_n1(cptr_int)); + reg_fun(intern(lit("cptr-obj"), user_package), func_n1(cptr_obj)); + reg_fun(intern(lit("cptr-zap"), user_package), func_n1(cptr_zap)); + reg_fun(intern(lit("cptr-free"), user_package), func_n1(cptr_free)); + reg_varl(intern(lit("cptr-null"), user_package), cptr(0)); + eval_error_s = intern(lit("eval-error"), user_package); uw_register_subtype(eval_error_s, error_s); @@ -7402,6 +7402,31 @@ val cptr(mem_t *ptr) return cobj(ptr, cptr_s, &cptr_ops); } +val cptr_int(val n) +{ + return if3(missingp(n), cptr(0), cptr(coerce(mem_t *, c_num(n)))); +} + +val cptr_obj(val obj) +{ + return cptr(coerce(mem_t *, obj)); +} + +val cptr_zap(val cptr) +{ + (void) cobj_handle(cptr, cptr_s); + cptr->co.handle = 0; + return cptr; +} + +val cptr_free(val cptr) +{ + (void) cobj_handle(cptr, cptr_s); + free(cptr->co.handle); + cptr->co.handle = 0; + return cptr; +} + mem_t *cptr_get(val cptr) { return cobj_handle(cptr, cptr_s); @@ -938,6 +938,10 @@ val cobjp(val obj); mem_t *cobj_handle(val cobj, val cls_sym); struct cobj_ops *cobj_ops(val cobj, val cls_sym); val cptr(mem_t *ptr); +val cptr_int(val n); +val cptr_obj(val obj); +val cptr_zap(val cptr); +val cptr_free(val cptr); mem_t *cptr_get(val cptr); mem_t **cptr_addr_of(val cptr); val assoc(val key, val list); |