summaryrefslogtreecommitdiffstats
path: root/vm.c
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
commitf45d6da3ae0c60d4774f2ef5f7c1ea3d18ac3141 (patch)
treec558c63d7acf47320e6ccc700afa9dcb87593354 /vm.c
parentb244a78a159c87313ae644bbb70a732033a52ed4 (diff)
downloadtxr-f45d6da3ae0c60d4774f2ef5f7c1ea3d18ac3141.tar.gz
txr-f45d6da3ae0c60d4774f2ef5f7c1ea3d18ac3141.tar.bz2
txr-f45d6da3ae0c60d4774f2ef5f7c1ea3d18ac3141.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.
Diffstat (limited to 'vm.c')
-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;