diff options
author | Andy Wingo <wingo@pobox.com> | 2011-03-15 23:33:32 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-03-15 23:45:58 +0100 |
commit | 9b709b0fe1ec5a71903e07d21006441d15e0c1ed (patch) | |
tree | 21ba9462ce57a01a57e5c7ab9a2d167a5fd299ef /libguile/frames.c | |
parent | 958173e489c69b2f9e3c83752713a89e3ea3e79d (diff) | |
download | guile-9b709b0fe1ec5a71903e07d21006441d15e0c1ed.tar.gz |
fix frame dynamic linkage in the face of partial continuation application
* libguile/vm-i-system.c (new-frame): Though it was appealing to set the
dynamic link here on the incomplete frame, we no longer do that, for
the reasons mentioned in the code.
(call, mv-call): Adapt to set the frame's dynamic link.
* libguile/vm-engine.c (vm_engine): Don't set dynamic link here, even
for boot program.
* libguile/frames.c (scm_frame_num_locals, scm_frame_local_ref)
(scm_frame_local_set_x): Fix up not-yet-active frame detection.
Diffstat (limited to 'libguile/frames.c')
-rw-r--r-- | libguile/frames.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libguile/frames.c b/libguile/frames.c index bc1bb82a8..62ba23fff 100644 --- a/libguile/frames.c +++ b/libguile/frames.c @@ -124,7 +124,7 @@ SCM_DEFINE (scm_frame_num_locals, "frame-num-locals", 1, 0, 0, p = SCM_FRAME_STACK_ADDRESS (SCM_VM_FRAME_FP (frame)); while (p <= sp) { - if (p + 1 < sp && p[1] == (SCM)0) + if (p[0] == (SCM)0) /* skip over not-yet-active frame */ p += 3; else @@ -154,7 +154,7 @@ SCM_DEFINE (scm_frame_local_ref, "frame-local-ref", 2, 0, 0, p = SCM_FRAME_STACK_ADDRESS (SCM_VM_FRAME_FP (frame)); while (p <= sp) { - if (p + 1 < sp && p[1] == (SCM)0) + if (p[0] == (SCM)0) /* skip over not-yet-active frame */ p += 3; else if (n == i) @@ -186,7 +186,7 @@ SCM_DEFINE (scm_frame_local_set_x, "frame-local-set!", 3, 0, 0, p = SCM_FRAME_STACK_ADDRESS (SCM_VM_FRAME_FP (frame)); while (p <= sp) { - if (p + 1 < sp && p[1] == (SCM)0) + if (p[0] == (SCM)0) /* skip over not-yet-active frame */ p += 3; else if (n == i) |