diff options
author | Andy Wingo <wingo@pobox.com> | 2009-08-15 14:13:08 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-08-20 18:52:49 +0200 |
commit | 03e6c1659623d1aac4121730c1e453c626042c47 (patch) | |
tree | 4137603e61a866ff9ab725d21c0d11c7b3648103 /libguile/frames.c | |
parent | d94be25f72d217a484b4f4c9b742c610fc9e501c (diff) | |
download | guile-03e6c1659623d1aac4121730c1e453c626042c47.tar.gz |
reorder frame layout
* libguile/frames.h: Reorder the frame layout so the return address
comes below the arguments.working
(SCM_FRAME_SET_RETURN_ADDRESS, SCM_FRAME_SET_MV_RETURN_ADDRESS): New
macros.
* libguile/frames.c (scm_vm_frame_arguments): Use the macros to access
the arguments.
* libguile/vm-engine.c (vm_engine): Fix for new calling convention.
* libguile/vm-engine.h (INIT_FRAME): New macro. Does part of what
NEW_FRAME used to do.
* libguile/vm-i-system.c (call, mv-call): Shuffle args up to make room
for the stack, and adapt to new calling convention.
(goto/args): Shuffling down is easier now.
(return, return/args): Adapt to new frame layout.
* libguile/vm.c (vm_mark_stack): Adapt to new frame layout, and the
possibility of there being crap on the stack.
(really_make_boot_program): Remove extraneous comment.
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 e89184d79..86480e352 100644 --- a/libguile/frames.c +++ b/libguile/frames.c @@ -111,12 +111,12 @@ SCM_DEFINE (scm_vm_frame_arguments, "vm-frame-arguments", 1, 0, 0, if (!bp->nargs) return SCM_EOL; else if (bp->nrest) - ret = fp[bp->nargs - 1]; + ret = SCM_FRAME_VARIABLE (fp, bp->nargs - 1); else - ret = scm_cons (fp[bp->nargs - 1], SCM_EOL); + ret = scm_cons (SCM_FRAME_VARIABLE (fp, bp->nargs - 1), SCM_EOL); for (i = bp->nargs - 2; i >= 0; i--) - ret = scm_cons (fp[i], ret); + ret = scm_cons (SCM_FRAME_VARIABLE (fp, i), ret); return ret; } |