summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-14 06:13:42 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-14 06:13:42 -0700
commit00324bcd1ec8d987cf9c8a1637cc68f1ddc0ea04 (patch)
treec558c63d7acf47320e6ccc700afa9dcb87593354
parent25e75c04fd7efe85b40297101657ee856eac81c3 (diff)
downloadtxr-00324bcd1ec8d987cf9c8a1637cc68f1ddc0ea04.tar.gz
txr-00324bcd1ec8d987cf9c8a1637cc68f1ddc0ea04.tar.bz2
txr-00324bcd1ec8d987cf9c8a1637cc68f1ddc0ea04.zip
vm: bugfix: handle empty data vector.
* vm.c (vm_make_desc): We can't call vecref_l on an empty vector, because it has no index zero. Let's use a null location in this case.
-rw-r--r--vm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 09bdfb2c..4edf4a85 100644
--- a/vm.c
+++ b/vm.c
@@ -119,7 +119,8 @@ val vm_make_desc(val nlevels, val nregs, val bytecode, val datavec)
{
mem_t *code = buf_get(bytecode, self);
- loc data_loc = vecref_l(datavec, zero);
+ val dvl = length_vec(datavec);
+ loc data_loc = if3(dvl != zero, vecref_l(datavec, zero), nulloc);
struct vm_desc *vd = coerce(struct vm_desc *, chk_malloc(sizeof *vd));
val desc;