mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-30 23:10:21 +02:00
clean up NEW_FRAME macro
* libguile/vm-engine.h (NEW_FRAME): Clean up this macro.
This commit is contained in:
parent
93d197be98
commit
2cdb8cdc0d
1 changed files with 20 additions and 16 deletions
|
@ -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() \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue