summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-01-13 07:55:56 -0800
committerKaz Kylheku <kaz@kylheku.com>2022-01-13 07:55:56 -0800
commit20c0166b6b8e4b4ec9c17e354c7b33004149d5ae (patch)
tree306a31540a9d0d79bc6c7f793f8c47c5ae1273bb /lib.c
parent387834636fe55bbda0ad7061f7a63077869dfd2a (diff)
downloadtxr-20c0166b6b8e4b4ec9c17e354c7b33004149d5ae.tar.gz
txr-20c0166b6b8e4b4ec9c17e354c7b33004149d5ae.tar.bz2
txr-20c0166b6b8e4b4ec9c17e354c7b33004149d5ae.zip
cptr-int: allow full unsigned range.
The cptr-int function requries an address to be expressed as a signed integer, which is incovenient. E.g. -2147483648 to 2147483647 in a 32 bit address space. Let's fix it to accept an extended range. * lib.c (cptr_int): Convert the argument value to a ucnum if it is positive according to plusp, otherwise to cnum. Then either one to the mem_t * pointer. Thus we can accept either signed or unsigned values. * txr.1: Document the extended range of cptr-int.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib.c b/lib.c
index fa03e7c0..91768c3a 100644
--- a/lib.c
+++ b/lib.c
@@ -9817,7 +9817,10 @@ val cptr_int(val n, val type_sym_in)
{
val self = lit("cptr-int");
val type_sym = default_null_arg(type_sym_in);
- return cptr_typed(coerce(mem_t *, c_num(n, self)), type_sym, 0);
+ return cptr_typed(if3(plusp(n),
+ coerce(mem_t *, c_unum(n, self)),
+ coerce(mem_t *, c_num(n, self))),
+ type_sym, 0);
}
val cptr_obj(val obj, val type_sym_in)