diff options
-rw-r--r-- | share/txr/stdlib/compiler.tl | 6 | ||||
-rw-r--r-- | vm.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl index d7f11229..24d64fc1 100644 --- a/share/txr/stdlib/compiler.tl +++ b/share/txr/stdlib/compiler.tl @@ -49,8 +49,8 @@ (unless me.lev (set me.lev (if me.up (succ me.up.lev) 1))) (unless (or me.co (null me.up)) - (set me.co me.up.co) - me.co.(new-env me))) + (set me.co me.up.co)) + me.co.(new-env me)) (:method lookup-var (me sym) (condlet @@ -503,6 +503,6 @@ (let ((co (new compiler)) (as (new assembler))) (let* ((oreg co.(alloc-treg)) - (frag co.(compile oreg (new env) (expand* exp)))) + (frag co.(compile oreg (new env co co) (expand* exp)))) as.(asm ^(,*frag.code (end ,frag.oreg))) (vm-make-desc co.nlev co.nreg as.buf co.(get-datavec) co.(get-funvec))))) @@ -219,6 +219,8 @@ static val vm_make_closure(struct vm *vm, int frsz) vc->vd = vm->vd; vc->dspl = dspl; + assert (vc->nlvl <= vm->nlvl); + closure = cobj(coerce(mem_t *, vc), vm_closure_s, &vm_closure_ops); for (i = 2; i < vc->nlvl; i++) { |