1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 03:30:27 +02:00

*** empty log message ***

This commit is contained in:
Keisuke Nishida 2001-04-07 09:39:38 +00:00
parent 4bfb26f58f
commit 3616e9e963
17 changed files with 248 additions and 205 deletions

View file

@ -179,15 +179,15 @@
*/
#define CHECK_OVERFLOW() \
if (sp < stack_base) \
if (sp > stack_limit) \
goto vm_error_stack_overflow
#define CHECK_UNDERFLOW() \
if (sp >= stack_limit) \
if (sp < stack_base) \
goto vm_error_stack_underflow
#define PUSH(x) do { CHECK_OVERFLOW (); *--sp = x; } while (0)
#define DROP() do { CHECK_UNDERFLOW (); sp++; } while (0)
#define PUSH(x) do { sp++; CHECK_OVERFLOW (); *sp = x; } while (0)
#define DROP() do { CHECK_UNDERFLOW (); sp--; } while (0)
#define POP(x) do { x = *sp; DROP (); } while (0)
#define CONS(x,y,z) \
@ -204,10 +204,10 @@
do { \
int i; \
SCM l = SCM_EOL; \
for (i = 0; i < n; i++) \
sp -= n; \
for (i = n; i; i--) \
CONS (l, sp[i], l); \
sp += n - 1; \
*sp = l; \
PUSH (l); \
} while (0)
@ -245,8 +245,8 @@ do { \
*/
#define ARGS1(a1) SCM a1 = sp[0];
#define ARGS2(a1,a2) SCM a1 = sp[1], a2 = sp[0]; sp++;
#define ARGS3(a1,a2,a3) SCM a1 = sp[2], a2 = sp[1], a3 = sp[0]; sp += 2;
#define ARGS2(a1,a2) SCM a1 = sp[-1], a2 = sp[0]; sp--;
#define ARGS3(a1,a2,a3) SCM a1 = sp[-2], a2 = sp[-1], a3 = sp[0]; sp -= 2;
#define ARGSN(an) int an = FETCH ();
#define RETURN(x) do { *sp = x; NEXT; } while (0)
@ -256,26 +256,6 @@ do { \
* Frame allocation
*/
#define NEW_FRAME() \
{ \
SCM ra = SCM_VM_MAKE_FRAME_ADDRESS (ip); \
SCM dl = SCM_VM_MAKE_BYTE_ADDRESS (fp); \
ip = bp->base; \
fp = sp - bp->nlocs; \
sp = SCM_VM_FRAME_LOWER_ADDRESS (fp); \
CHECK_OVERFLOW (); \
SCM_VM_FRAME_PROGRAM (fp) = program; \
SCM_VM_FRAME_DYNAMIC_LINK (fp) = dl; \
SCM_VM_FRAME_RETURN_ADDRESS (fp) = ra; \
}
#define FREE_FRAME() \
{ \
sp = fp + bp->nargs + bp->nlocs; \
ip = SCM_VM_BYTE_ADDRESS (SCM_VM_FRAME_RETURN_ADDRESS (fp)); \
fp = SCM_VM_FRAME_ADDRESS (SCM_VM_FRAME_DYNAMIC_LINK (fp)); \
}
#define INIT_ARGS() \
{ \
if (bp->nrest) \
@ -292,6 +272,27 @@ do { \
} \
}
/* See vm.h for the layout of stack frames */
#define NEW_FRAME() \
{ \
sp[1] = SCM_VM_MAKE_BYTE_ADDRESS (ip); \
sp[2] = SCM_VM_MAKE_STACK_ADDRESS (fp); \
ip = bp->base; \
fp = sp - bp->nargs + 1; \
sp = sp + 2; \
CHECK_OVERFLOW (); \
}
#define FREE_FRAME() \
{ \
SCM *new_sp = fp - 2; \
sp = fp + bp->nargs + bp->nlocs; \
ip = SCM_VM_BYTE_ADDRESS (sp[0]); \
fp = SCM_VM_STACK_ADDRESS (sp[1]); \
sp = new_sp; \
}
/*
Local Variables:
c-file-style: "gnu"