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

* src/vm_engine.c (VM_NAME): Renamed the variable an\' to nargs\'.

Removed the variables `a2\' and `a3\'.
* src/vm_engine.h (VM_SETUP_ARGS2, VM_SETUP_ARGS3): Setup local
variables.
(VM_SETUP_ARGS4): Removed.
* src/vm_system.c, src/vm_scheme.c, src/vm_number.c: Updated.
This commit is contained in:
Keisuke Nishida 2000-09-02 06:59:13 +00:00
parent 12f9da005e
commit 382693febf
5 changed files with 71 additions and 65 deletions

View file

@ -72,12 +72,8 @@ VM_NAME (SCM vm, SCM program)
SCM *stack_base = NULL; /* stack base address */ SCM *stack_base = NULL; /* stack base address */
SCM *stack_limit = NULL; /* stack limit address */ SCM *stack_limit = NULL; /* stack limit address */
/* Function arguments */
int an = 0;
SCM a2 = SCM_PACK (0);
SCM a3 = SCM_PACK (0);
/* Internal variables */ /* Internal variables */
int nargs = 0; /* the number of arguments */
SCM dynwinds = SCM_EOL; SCM dynwinds = SCM_EOL;
#if VM_USE_HOOK #if VM_USE_HOOK
SCM hook_args = SCM_LIST1 (vm); SCM hook_args = SCM_LIST1 (vm);

View file

@ -203,10 +203,10 @@
X = cell; \ X = cell; \
} }
#define VM_SETUP_ARGS2() an = 2; a2 = ac; POP (ac); #define VM_SETUP_ARGS1() SCM a1 = ac;
#define VM_SETUP_ARGS3() an = 3; a3 = ac; POP (a2); POP (ac); #define VM_SETUP_ARGS2() SCM a1, a2; a2 = ac; POP (a1);
#define VM_SETUP_ARGS4() an = 4; a4 = ac; POP (a3); POP (a2); POP (ac); #define VM_SETUP_ARGS3() SCM a1, a2, a3; a3 = ac; POP (a2); POP (a1);
#define VM_SETUP_ARGSN() an = SCM_INUM (FETCH ()); #define VM_SETUP_ARGSN() nargs = SCM_INUM (FETCH ());
/* /*
@ -242,26 +242,26 @@
* Frame allocation * Frame allocation
*/ */
/* an = the number of arguments */ /* nargs = the number of arguments */
#define VM_FRAME_INIT_ARGS(PROG,NREQS,RESTP) \ #define VM_FRAME_INIT_ARGS(PROG,NREQS,RESTP) \
{ \ { \
if (RESTP) \ if (RESTP) \
/* have a rest argument */ \ /* have a rest argument */ \
{ \ { \
SCM list; \ SCM list; \
if (an < NREQS) \ if (nargs < NREQS) \
scm_wrong_num_args (PROG); \ scm_wrong_num_args (PROG); \
\ \
/* Construct the rest argument list */ \ /* Construct the rest argument list */ \
an -= NREQS; /* the number of rest arguments */ \ nargs -= NREQS; /* the number of rest arguments */ \
list = SCM_EOL; /* list of the rest arguments */ \ list = SCM_EOL; /* list of the rest arguments */ \
POP_LIST (an, list); \ POP_LIST (nargs, list); \
PUSH (list); \ PUSH (list); \
} \ } \
else \ else \
/* not have a rest argument */ \ /* not have a rest argument */ \
{ \ { \
if (an != NREQS) \ if (nargs != NREQS) \
scm_wrong_num_args (PROG); \ scm_wrong_num_args (PROG); \
} \ } \
} }

View file

@ -45,50 +45,54 @@
SCM_DEFINE_VM_FUNCTION (zero_p, "zero?", "zero?", 1, 0) SCM_DEFINE_VM_FUNCTION (zero_p, "zero?", "zero?", 1, 0)
{ {
if (SCM_INUMP (ac)) VM_SETUP_ARGS1 ();
RETURN (SCM_BOOL (SCM_EQ_P (ac, SCM_INUM0))); if (SCM_INUMP (a1))
RETURN (scm_zero_p (ac)); RETURN (SCM_BOOL (SCM_EQ_P (a1, SCM_INUM0)));
RETURN (scm_zero_p (a1));
} }
SCM_DEFINE_VM_FUNCTION (inc, "1+", "inc", 1, 0) SCM_DEFINE_VM_FUNCTION (inc, "1+", "inc", 1, 0)
{ {
if (SCM_INUMP (ac)) VM_SETUP_ARGS1 ();
if (SCM_INUMP (a1))
{ {
int n = SCM_INUM (ac) + 1; int n = SCM_INUM (a1) + 1;
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
RETURN (SCM_MAKINUM (n)); RETURN (SCM_MAKINUM (n));
} }
RETURN (scm_sum (ac, SCM_MAKINUM (1))); RETURN (scm_sum (a1, SCM_MAKINUM (1)));
} }
SCM_DEFINE_VM_FUNCTION (dec, "1-", "dec", 1, 0) SCM_DEFINE_VM_FUNCTION (dec, "1-", "dec", 1, 0)
{ {
if (SCM_INUMP (ac)) VM_SETUP_ARGS1 ();
if (SCM_INUMP (a1))
{ {
int n = SCM_INUM (ac) - 1; int n = SCM_INUM (a1) - 1;
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
RETURN (SCM_MAKINUM (n)); RETURN (SCM_MAKINUM (n));
} }
RETURN (scm_difference (ac, SCM_MAKINUM (1))); RETURN (scm_difference (a1, SCM_MAKINUM (1)));
} }
SCM_DEFINE_VM_FUNCTION (add, "+", "add", 0, 1) SCM_DEFINE_VM_FUNCTION (add, "+", "add", 0, 1)
{ {
VM_SETUP_ARGSN (); VM_SETUP_ARGSN ();
ac = SCM_MAKINUM (0); ac = SCM_MAKINUM (0);
while (an-- > 0) while (nargs-- > 0)
{ {
POP (a2); SCM x;
if (SCM_INUMP (ac) && SCM_INUMP (a2)) POP (x);
if (SCM_INUMP (ac) && SCM_INUMP (x))
{ {
int n = SCM_INUM (ac) + SCM_INUM (a2); int n = SCM_INUM (ac) + SCM_INUM (x);
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
{ {
ac = SCM_MAKINUM (n); ac = SCM_MAKINUM (n);
continue; continue;
} }
} }
ac = scm_sum (ac, a2); ac = scm_sum (ac, x);
} }
NEXT; NEXT;
} }
@ -96,71 +100,73 @@ SCM_DEFINE_VM_FUNCTION (add, "+", "add", 0, 1)
SCM_DEFINE_VM_FUNCTION (add2, "+", "add2", 2, 0) SCM_DEFINE_VM_FUNCTION (add2, "+", "add2", 2, 0)
{ {
VM_SETUP_ARGS2 (); VM_SETUP_ARGS2 ();
if (SCM_INUMP (ac) && SCM_INUMP (a2)) if (SCM_INUMP (a1) && SCM_INUMP (a2))
{ {
int n = SCM_INUM (ac) + SCM_INUM (a2); int n = SCM_INUM (a1) + SCM_INUM (a2);
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
RETURN (SCM_MAKINUM (n)); RETURN (SCM_MAKINUM (n));
} }
RETURN (scm_sum (ac, a2)); RETURN (scm_sum (a1, a2));
} }
SCM_DEFINE_VM_FUNCTION (sub, "-", "sub", 1, 1) SCM_DEFINE_VM_FUNCTION (sub, "-", "sub", 1, 1)
{ {
SCM x;
VM_SETUP_ARGSN (); VM_SETUP_ARGSN ();
ac = SCM_MAKINUM (0); ac = SCM_MAKINUM (0);
while (an-- > 1) while (nargs-- > 1)
{ {
POP (a2); POP (x);
if (SCM_INUMP (ac) && SCM_INUMP (a2)) if (SCM_INUMP (ac) && SCM_INUMP (x))
{ {
int n = SCM_INUM (ac) + SCM_INUM (a2); int n = SCM_INUM (ac) + SCM_INUM (x);
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
{ {
ac = SCM_MAKINUM (n); ac = SCM_MAKINUM (n);
continue; continue;
} }
} }
ac = scm_difference (ac, a2); ac = scm_difference (ac, x);
} }
POP (a2); POP (x);
if (SCM_INUMP (ac) && SCM_INUMP (a2)) if (SCM_INUMP (ac) && SCM_INUMP (x))
{ {
int n = SCM_INUM (a2) - SCM_INUM (ac); int n = SCM_INUM (x) - SCM_INUM (ac);
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
RETURN (SCM_MAKINUM (n)); RETURN (SCM_MAKINUM (n));
} }
RETURN (scm_difference (a2, ac)); RETURN (scm_difference (x, ac));
} }
SCM_DEFINE_VM_FUNCTION (sub2, "-", "sub2", 2, 0) SCM_DEFINE_VM_FUNCTION (sub2, "-", "sub2", 2, 0)
{ {
VM_SETUP_ARGS2 (); VM_SETUP_ARGS2 ();
if (SCM_INUMP (ac) && SCM_INUMP (a2)) if (SCM_INUMP (a1) && SCM_INUMP (a2))
{ {
int n = SCM_INUM (ac) - SCM_INUM (a2); int n = SCM_INUM (a1) - SCM_INUM (a2);
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
RETURN (SCM_MAKINUM (n)); RETURN (SCM_MAKINUM (n));
} }
RETURN (scm_difference (ac, a2)); RETURN (scm_difference (a1, a2));
} }
SCM_DEFINE_VM_FUNCTION (minus, "-", "minus", 1, 0) SCM_DEFINE_VM_FUNCTION (minus, "-", "minus", 1, 0)
{ {
if (SCM_INUMP (ac)) VM_SETUP_ARGS1 ();
if (SCM_INUMP (a1))
{ {
int n = - SCM_INUM (ac); int n = - SCM_INUM (a1);
if (SCM_FIXABLE (n)) if (SCM_FIXABLE (n))
RETURN (SCM_MAKINUM (n)); RETURN (SCM_MAKINUM (n));
} }
RETURN (scm_difference (ac, SCM_UNDEFINED)); RETURN (scm_difference (a1, SCM_UNDEFINED));
} }
#define REL2(CREL,SREL) \ #define REL2(CREL,SREL) \
VM_SETUP_ARGS2 (); \ VM_SETUP_ARGS2 (); \
if (SCM_INUMP (ac) && SCM_INUMP (a2)) \ if (SCM_INUMP (a1) && SCM_INUMP (a2)) \
RETURN (SCM_BOOL (SCM_INUM (ac) CREL SCM_INUM (a2))); \ RETURN (SCM_BOOL (SCM_INUM (a1) CREL SCM_INUM (a2))); \
RETURN (SREL (ac, a2)) RETURN (SREL (a1, a2))
SCM_DEFINE_VM_FUNCTION (lt2, "<", "lt2", 2, 0) SCM_DEFINE_VM_FUNCTION (lt2, "<", "lt2", 2, 0)
{ {

View file

@ -45,7 +45,8 @@
SCM_DEFINE_VM_FUNCTION (null_p, "null?", "null?", 1, 0) SCM_DEFINE_VM_FUNCTION (null_p, "null?", "null?", 1, 0)
{ {
RETURN (SCM_BOOL (SCM_NULLP (ac))); VM_SETUP_ARGS1 ();
RETURN (SCM_BOOL (SCM_NULLP (a1)));
} }
SCM_DEFINE_VM_FUNCTION (cons, "cons", "cons", 2, 0) SCM_DEFINE_VM_FUNCTION (cons, "cons", "cons", 2, 0)
@ -59,32 +60,35 @@ SCM_DEFINE_VM_FUNCTION (list, "list", "list", 0, 1)
{ {
VM_SETUP_ARGSN (); VM_SETUP_ARGSN ();
ac = SCM_EOL; ac = SCM_EOL;
POP_LIST (an, ac); POP_LIST (nargs, ac);
NEXT; NEXT;
} }
SCM_DEFINE_VM_FUNCTION (car, "car", "car", 1, 0) SCM_DEFINE_VM_FUNCTION (car, "car", "car", 1, 0)
{ {
SCM_VALIDATE_CONS (0, ac); VM_SETUP_ARGS1 ();
RETURN (SCM_CAR (ac)); SCM_VALIDATE_CONS (0, a1);
RETURN (SCM_CAR (a1));
} }
SCM_DEFINE_VM_FUNCTION (cdr, "cdr", "cdr", 1, 0) SCM_DEFINE_VM_FUNCTION (cdr, "cdr", "cdr", 1, 0)
{ {
SCM_VALIDATE_CONS (0, ac); VM_SETUP_ARGS1 ();
RETURN (SCM_CDR (ac)); SCM_VALIDATE_CONS (0, a1);
RETURN (SCM_CDR (a1));
} }
SCM_DEFINE_VM_FUNCTION (not, "not", "not", 1, 0) SCM_DEFINE_VM_FUNCTION (not, "not", "not", 1, 0)
{ {
RETURN (SCM_BOOL (SCM_FALSEP (ac))); VM_SETUP_ARGS1 ();
RETURN (SCM_BOOL (SCM_FALSEP (a1)));
} }
SCM_DEFINE_VM_FUNCTION (append, "append", "append", 0, 1) SCM_DEFINE_VM_FUNCTION (append, "append", "append", 0, 1)
{ {
VM_SETUP_ARGSN (); VM_SETUP_ARGSN ();
ac = SCM_EOL; ac = SCM_EOL;
POP_LIST (an, ac); POP_LIST (nargs, ac);
RETURN (scm_append (ac)); RETURN (scm_append (ac));
} }
@ -92,7 +96,7 @@ SCM_DEFINE_VM_FUNCTION (append_x, "append!", "append!", 0, 1)
{ {
VM_SETUP_ARGSN (); VM_SETUP_ARGSN ();
ac = SCM_EOL; ac = SCM_EOL;
POP_LIST (an, ac); POP_LIST (nargs, ac);
RETURN (scm_append_x (ac)); RETURN (scm_append_x (ac));
} }
@ -106,6 +110,6 @@ SCM_DEFINE_VM_FUNCTION (call_cc, "call-with-current-continuation", "call/cc", 1,
{ {
SYNC (); /* must sync all registers */ SYNC (); /* must sync all registers */
PUSH (SCM_VM_CAPTURE_CONT (vmp)); /* argument 1 */ PUSH (SCM_VM_CAPTURE_CONT (vmp)); /* argument 1 */
an = 1; /* the number of arguments */ nargs = 1; /* the number of arguments */
goto vm_call; goto vm_call;
} }

View file

@ -402,7 +402,7 @@ SCM_DEFINE_INSTRUCTION (make_program, "%make-program", INST_CODE)
*/ */
SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM) SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{ {
an = SCM_INUM (FETCH ()); /* the number of arguments */ nargs = SCM_INUM (FETCH ()); /* the number of arguments */
vm_call: vm_call:
/* /*
@ -412,7 +412,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{ {
/* Create a new frame */ /* Create a new frame */
SCM *last_fp = fp; SCM *last_fp = fp;
SCM *last_sp = sp + an; SCM *last_sp = sp + nargs;
VM_NEW_FRAME (fp, ac, VM_NEW_FRAME (fp, ac,
SCM_VM_MAKE_ADDRESS (last_fp), SCM_VM_MAKE_ADDRESS (last_fp),
SCM_VM_MAKE_ADDRESS (last_sp), SCM_VM_MAKE_ADDRESS (last_sp),
@ -431,7 +431,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{ {
/* Construct an argument list */ /* Construct an argument list */
SCM list = SCM_EOL; SCM list = SCM_EOL;
POP_LIST (an, list); POP_LIST (nargs, list);
RETURN (scm_apply (ac, list, SCM_EOL)); RETURN (scm_apply (ac, list, SCM_EOL));
} }
/* /*
@ -441,7 +441,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{ {
vm_call_cc: vm_call_cc:
/* Check the number of arguments */ /* Check the number of arguments */
if (an != 1) if (nargs != 1)
scm_wrong_num_args (ac); scm_wrong_num_args (ac);
/* Reinstate the continuation */ /* Reinstate the continuation */
@ -464,7 +464,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
*/ */
SCM_DEFINE_INSTRUCTION (tail_call, "%tail-call", INST_INUM) SCM_DEFINE_INSTRUCTION (tail_call, "%tail-call", INST_INUM)
{ {
an = SCM_INUM (FETCH ()); /* the number of arguments */ nargs = SCM_INUM (FETCH ()); /* the number of arguments */
/* /*
* Subprogram call * Subprogram call
@ -514,7 +514,7 @@ SCM_DEFINE_INSTRUCTION (tail_call, "%tail-call", INST_INUM)
{ {
/* Construct an argument list */ /* Construct an argument list */
SCM list = SCM_EOL; SCM list = SCM_EOL;
POP_LIST (an, list); POP_LIST (nargs, list);
ac = scm_apply (ac, list, SCM_EOL); ac = scm_apply (ac, list, SCM_EOL);
goto vm_return; goto vm_return;
} }