1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-07 08:40:21 +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_limit = NULL; /* stack limit address */
/* Function arguments */
int an = 0;
SCM a2 = SCM_PACK (0);
SCM a3 = SCM_PACK (0);
/* Internal variables */
int nargs = 0; /* the number of arguments */
SCM dynwinds = SCM_EOL;
#if VM_USE_HOOK
SCM hook_args = SCM_LIST1 (vm);

View file

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

View file

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

View file

@ -45,7 +45,8 @@
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)
@ -59,32 +60,35 @@ SCM_DEFINE_VM_FUNCTION (list, "list", "list", 0, 1)
{
VM_SETUP_ARGSN ();
ac = SCM_EOL;
POP_LIST (an, ac);
POP_LIST (nargs, ac);
NEXT;
}
SCM_DEFINE_VM_FUNCTION (car, "car", "car", 1, 0)
{
SCM_VALIDATE_CONS (0, ac);
RETURN (SCM_CAR (ac));
VM_SETUP_ARGS1 ();
SCM_VALIDATE_CONS (0, a1);
RETURN (SCM_CAR (a1));
}
SCM_DEFINE_VM_FUNCTION (cdr, "cdr", "cdr", 1, 0)
{
SCM_VALIDATE_CONS (0, ac);
RETURN (SCM_CDR (ac));
VM_SETUP_ARGS1 ();
SCM_VALIDATE_CONS (0, a1);
RETURN (SCM_CDR (a1));
}
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)
{
VM_SETUP_ARGSN ();
ac = SCM_EOL;
POP_LIST (an, ac);
POP_LIST (nargs, ac);
RETURN (scm_append (ac));
}
@ -92,7 +96,7 @@ SCM_DEFINE_VM_FUNCTION (append_x, "append!", "append!", 0, 1)
{
VM_SETUP_ARGSN ();
ac = SCM_EOL;
POP_LIST (an, ac);
POP_LIST (nargs, 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 */
PUSH (SCM_VM_CAPTURE_CONT (vmp)); /* argument 1 */
an = 1; /* the number of arguments */
nargs = 1; /* the number of arguments */
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)
{
an = SCM_INUM (FETCH ()); /* the number of arguments */
nargs = SCM_INUM (FETCH ()); /* the number of arguments */
vm_call:
/*
@ -412,7 +412,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{
/* Create a new frame */
SCM *last_fp = fp;
SCM *last_sp = sp + an;
SCM *last_sp = sp + nargs;
VM_NEW_FRAME (fp, ac,
SCM_VM_MAKE_ADDRESS (last_fp),
SCM_VM_MAKE_ADDRESS (last_sp),
@ -431,7 +431,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{
/* Construct an argument list */
SCM list = SCM_EOL;
POP_LIST (an, list);
POP_LIST (nargs, list);
RETURN (scm_apply (ac, list, SCM_EOL));
}
/*
@ -441,7 +441,7 @@ SCM_DEFINE_INSTRUCTION (call, "%call", INST_INUM)
{
vm_call_cc:
/* Check the number of arguments */
if (an != 1)
if (nargs != 1)
scm_wrong_num_args (ac);
/* Reinstate the continuation */
@ -464,7 +464,7 @@ SCM_DEFINE_INSTRUCTION (call, "%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
@ -514,7 +514,7 @@ SCM_DEFINE_INSTRUCTION (tail_call, "%tail-call", INST_INUM)
{
/* Construct an argument list */
SCM list = SCM_EOL;
POP_LIST (an, list);
POP_LIST (nargs, list);
ac = scm_apply (ac, list, SCM_EOL);
goto vm_return;
}