summaryrefslogtreecommitdiff
path: root/libguile/frames.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-08-15 14:13:08 +0200
committerAndy Wingo <wingo@pobox.com>2009-08-20 18:52:49 +0200
commit03e6c1659623d1aac4121730c1e453c626042c47 (patch)
tree4137603e61a866ff9ab725d21c0d11c7b3648103 /libguile/frames.c
parentd94be25f72d217a484b4f4c9b742c610fc9e501c (diff)
downloadguile-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.c6
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;
}