1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-30 06:50:31 +02:00

clean up NEW_FRAME macro

* libguile/vm-engine.h (NEW_FRAME): Clean up this macro.
This commit is contained in:
Andy Wingo 2008-09-11 19:30:15 +02:00
parent 93d197be98
commit 2cdb8cdc0d

View file

@ -406,24 +406,29 @@ do { \
} }
/* See frames.h for the layout of stack frames */ /* See frames.h for the layout of stack frames */
/* When this is called, bp points to the new program data,
and the arguments are already on the stack */
#define NEW_FRAME() \ #define NEW_FRAME() \
{ \ { \
int i; \ int i; \
SCM ra = SCM_PACK (ip); \ SCM *dl, *data; \
SCM dl = SCM_PACK (fp); \ scm_byte_t *ra = ip; \
SCM *p = sp + 1; \
SCM *q = p + bp->nlocs; \
\ \
/* New pointers */ \ /* Save old registers */ \
ip = bp->base; \ ra = ip; \
fp = p - bp->nargs; \ dl = fp; \
sp = q + 3; \ \
/* New registers */ \
fp = sp - bp->nargs + 1; \
data = SCM_FRAME_DATA_ADDRESS (fp); \
sp = data + 3; \
CHECK_OVERFLOW (); \ CHECK_OVERFLOW (); \
stack_base = sp; \
ip = bp->base; \
\ \
/* Init local variables */ \ /* Init local variables */ \
for (; p < q; p++) \ for (i=bp->nlocs; i; i--) \
*p = SCM_UNDEFINED; \ data[-i] = SCM_UNDEFINED; \
\ \
/* Create external variables */ \ /* Create external variables */ \
external = bp->external; \ external = bp->external; \
@ -431,11 +436,10 @@ do { \
CONS (external, SCM_UNDEFINED, external); \ CONS (external, SCM_UNDEFINED, external); \
\ \
/* Set frame data */ \ /* Set frame data */ \
p[3] = ra; \ data[3] = (SCM)ra; \
p[2] = dl; \ data[2] = (SCM)dl; \
p[1] = SCM_BOOL_F; \ data[1] = SCM_BOOL_F; \
p[0] = external; \ data[0] = external; \
stack_base = p + 3; \
} }
#define FREE_FRAME() \ #define FREE_FRAME() \