summaryrefslogtreecommitdiffstats
path: root/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/vm.c b/vm.c
index f53962f3..8e7433f0 100644
--- a/vm.c
+++ b/vm.c
@@ -359,7 +359,7 @@ INLINE val vm_getz(struct vm_env *dspl, unsigned ref)
{
unsigned lev = vm_lev(ref);
val *addr = &dspl[lev].mem[vm_idx(ref)];
- return (lev == 0) ? z(*addr) : *addr;
+ return *addr;
}
INLINE val vm_sm_get(struct vm_env *dspl, unsigned ref)
@@ -1124,7 +1124,7 @@ val vm_execute_toplevel(val desc)
val self = lit("vm-execute-toplevel");
struct vm_desc *vd = vm_desc_struct(self, desc);
struct vm vm;
- val *frame = coerce(val *, alloca(sizeof *frame * vd->frsz));
+ val *frame = coerce(val *, zalloca(sizeof *frame * vd->frsz));
struct vm_env *dspl = coerce(struct vm_env *, frame + vd->nreg);
vm_reset(&vm, vd, dspl, 1, 0);
@@ -1152,7 +1152,7 @@ val vm_execute_closure(val fun, struct args *args)
struct vm_desc *vd = vm_desc_struct(self, desc);
struct vm_closure *vc = coerce(struct vm_closure *, closure->co.handle);
struct vm vm;
- val *frame = coerce(val *, alloca(sizeof *frame * vd->frsz));
+ val *frame = coerce(val *, zalloca(sizeof *frame * vd->frsz));
struct vm_env *dspl = coerce(struct vm_env *, frame + vd->nreg);
val vargs = if3(variadic, args_get_rest(args, fixparam), nil);
cnum ix = 0;
@@ -1214,7 +1214,7 @@ val vm_execute_closure(val fun, struct args *args)
struct vm_desc *vd = vm_desc_struct(self, desc); \
struct vm_closure *vc = coerce(struct vm_closure *, closure->co.handle); \
struct vm vm; \
- val *frame = coerce(val *, alloca(sizeof *frame * vd->frsz)); \
+ val *frame = coerce(val *, zalloca(sizeof *frame * vd->frsz)); \
struct vm_env *dspl = coerce(struct vm_env *, frame + vd->nreg); \
vm_reset(&vm, vd, dspl, vc->nlvl - 1, vc->ip); \
vm.dspl = coerce(struct vm_env *, frame + vd->nreg); \