mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
* eval.c (SCM_CEVAL), srcprop.h (SRCBRKP): Eliminated union 't'.
* eval.c (SCM_CEVAL): Exlined call to EVALCAR.
This commit is contained in:
parent
ffaf65cdd0
commit
dff9830622
3 changed files with 139 additions and 145 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2002-03-14 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
|
* eval.c (SCM_CEVAL), srcprop.h (SRCBRKP): Eliminated union 't'.
|
||||||
|
|
||||||
|
* eval.c (SCM_CEVAL): Exlined call to EVALCAR.
|
||||||
|
|
||||||
2002-03-13 Thien-Thi Nguyen <ttn@giblet.glug.org>
|
2002-03-13 Thien-Thi Nguyen <ttn@giblet.glug.org>
|
||||||
|
|
||||||
* guile-snarf.in: Update copyright.
|
* guile-snarf.in: Update copyright.
|
||||||
|
|
272
libguile/eval.c
272
libguile/eval.c
|
@ -1890,12 +1890,7 @@ scm_deval (SCM x, SCM env)
|
||||||
SCM
|
SCM
|
||||||
SCM_CEVAL (SCM x, SCM env)
|
SCM_CEVAL (SCM x, SCM env)
|
||||||
{
|
{
|
||||||
union
|
SCM proc, arg1, arg2, orig_sym;
|
||||||
{
|
|
||||||
SCM *lloc;
|
|
||||||
SCM arg1;
|
|
||||||
} t;
|
|
||||||
SCM proc, arg2, orig_sym;
|
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
scm_t_debug_frame debug;
|
scm_t_debug_frame debug;
|
||||||
scm_t_debug_info *debug_info_end;
|
scm_t_debug_info *debug_info_end;
|
||||||
|
@ -1961,14 +1956,14 @@ start:
|
||||||
SCM tail = SCM_BOOL(SCM_TAILRECP (debug));
|
SCM tail = SCM_BOOL(SCM_TAILRECP (debug));
|
||||||
SCM_SET_TAILREC (debug);
|
SCM_SET_TAILREC (debug);
|
||||||
if (SCM_CHEAPTRAPS_P)
|
if (SCM_CHEAPTRAPS_P)
|
||||||
t.arg1 = scm_make_debugobj (&debug);
|
arg1 = scm_make_debugobj (&debug);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int first;
|
int first;
|
||||||
SCM val = scm_make_continuation (&first);
|
SCM val = scm_make_continuation (&first);
|
||||||
|
|
||||||
if (first)
|
if (first)
|
||||||
t.arg1 = val;
|
arg1 = val;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = val;
|
x = val;
|
||||||
|
@ -1983,7 +1978,7 @@ start:
|
||||||
SCM_TRAPS_P = 0;
|
SCM_TRAPS_P = 0;
|
||||||
scm_call_4 (SCM_ENTER_FRAME_HDLR,
|
scm_call_4 (SCM_ENTER_FRAME_HDLR,
|
||||||
scm_sym_enter_frame,
|
scm_sym_enter_frame,
|
||||||
t.arg1,
|
arg1,
|
||||||
tail,
|
tail,
|
||||||
scm_unmemocopy (x, env));
|
scm_unmemocopy (x, env));
|
||||||
SCM_TRAPS_P = 1;
|
SCM_TRAPS_P = 1;
|
||||||
|
@ -2130,12 +2125,12 @@ dispatch:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
t.arg1 = EVALCAR (clause, env);
|
arg1 = EVALCAR (clause, env);
|
||||||
if (!SCM_FALSEP (t.arg1) && !SCM_NILP (t.arg1))
|
if (!SCM_FALSEP (arg1) && !SCM_NILP (arg1))
|
||||||
{
|
{
|
||||||
x = SCM_CDR (clause);
|
x = SCM_CDR (clause);
|
||||||
if (SCM_NULLP (x))
|
if (SCM_NULLP (x))
|
||||||
RETURN (t.arg1);
|
RETURN (arg1);
|
||||||
else if (!SCM_EQ_P (SCM_CAR (x), scm_sym_arrow))
|
else if (!SCM_EQ_P (SCM_CAR (x), scm_sym_arrow))
|
||||||
{
|
{
|
||||||
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
||||||
|
@ -2146,7 +2141,7 @@ dispatch:
|
||||||
proc = SCM_CDR (x);
|
proc = SCM_CDR (x);
|
||||||
proc = EVALCAR (proc, env);
|
proc = EVALCAR (proc, env);
|
||||||
SCM_ASRTGO (!SCM_IMP (proc), badfun);
|
SCM_ASRTGO (!SCM_IMP (proc), badfun);
|
||||||
PREP_APPLY (proc, scm_list_1 (t.arg1));
|
PREP_APPLY (proc, scm_list_1 (arg1));
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
if (SCM_CLOSUREP(proc) && scm_badformalsp (proc, 1))
|
if (SCM_CLOSUREP(proc) && scm_badformalsp (proc, 1))
|
||||||
goto umwrongnumargs;
|
goto umwrongnumargs;
|
||||||
|
@ -2362,36 +2357,36 @@ dispatch:
|
||||||
if (SCM_CLOSUREP (proc))
|
if (SCM_CLOSUREP (proc))
|
||||||
{
|
{
|
||||||
PREP_APPLY (proc, SCM_EOL);
|
PREP_APPLY (proc, SCM_EOL);
|
||||||
t.arg1 = SCM_CDDR (x);
|
arg1 = SCM_CDDR (x);
|
||||||
t.arg1 = EVALCAR (t.arg1, env);
|
arg1 = EVALCAR (arg1, env);
|
||||||
apply_closure:
|
apply_closure:
|
||||||
/* Go here to tail-call a closure. PROC is the closure
|
/* Go here to tail-call a closure. PROC is the closure
|
||||||
and T.ARG1 is the list of arguments. Do not forget to
|
and ARG1 is the list of arguments. Do not forget to
|
||||||
call PREP_APPLY. */
|
call PREP_APPLY. */
|
||||||
{
|
{
|
||||||
SCM formals = SCM_CLOSURE_FORMALS (proc);
|
SCM formals = SCM_CLOSURE_FORMALS (proc);
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.args = t.arg1;
|
debug.info->a.args = arg1;
|
||||||
#endif
|
#endif
|
||||||
#ifndef SCM_RECKLESS
|
#ifndef SCM_RECKLESS
|
||||||
if (scm_badargsp (formals, t.arg1))
|
if (scm_badargsp (formals, arg1))
|
||||||
goto wrongnumargs;
|
goto wrongnumargs;
|
||||||
#endif
|
#endif
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
/* Copy argument list */
|
/* Copy argument list */
|
||||||
if (SCM_NULL_OR_NIL_P (t.arg1))
|
if (SCM_NULL_OR_NIL_P (arg1))
|
||||||
env = EXTEND_ENV (formals, SCM_EOL, SCM_ENV (proc));
|
env = EXTEND_ENV (formals, SCM_EOL, SCM_ENV (proc));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SCM args = scm_list_1 (SCM_CAR (t.arg1));
|
SCM args = scm_list_1 (SCM_CAR (arg1));
|
||||||
SCM tail = args;
|
SCM tail = args;
|
||||||
t.arg1 = SCM_CDR (t.arg1);
|
arg1 = SCM_CDR (arg1);
|
||||||
while (!SCM_NULL_OR_NIL_P (t.arg1))
|
while (!SCM_NULL_OR_NIL_P (arg1))
|
||||||
{
|
{
|
||||||
SCM new_tail = scm_list_1 (SCM_CAR (t.arg1));
|
SCM new_tail = scm_list_1 (SCM_CAR (arg1));
|
||||||
SCM_SETCDR (tail, new_tail);
|
SCM_SETCDR (tail, new_tail);
|
||||||
tail = new_tail;
|
tail = new_tail;
|
||||||
t.arg1 = SCM_CDR (t.arg1);
|
arg1 = SCM_CDR (arg1);
|
||||||
}
|
}
|
||||||
env = EXTEND_ENV (formals, args, SCM_ENV (proc));
|
env = EXTEND_ENV (formals, args, SCM_ENV (proc));
|
||||||
}
|
}
|
||||||
|
@ -2413,14 +2408,14 @@ dispatch:
|
||||||
SCM val = scm_make_continuation (&first);
|
SCM val = scm_make_continuation (&first);
|
||||||
|
|
||||||
if (first)
|
if (first)
|
||||||
t.arg1 = val;
|
arg1 = val;
|
||||||
else
|
else
|
||||||
RETURN (val);
|
RETURN (val);
|
||||||
}
|
}
|
||||||
proc = SCM_CDR (x);
|
proc = SCM_CDR (x);
|
||||||
proc = scm_eval_car (proc, env);
|
proc = scm_eval_car (proc, env);
|
||||||
SCM_ASRTGO (SCM_NIMP (proc), badfun);
|
SCM_ASRTGO (SCM_NIMP (proc), badfun);
|
||||||
PREP_APPLY (proc, scm_list_1 (t.arg1));
|
PREP_APPLY (proc, scm_list_1 (arg1));
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
if (SCM_CLOSUREP(proc) && scm_badformalsp (proc, 1))
|
if (SCM_CLOSUREP(proc) && scm_badformalsp (proc, 1))
|
||||||
goto umwrongnumargs;
|
goto umwrongnumargs;
|
||||||
|
@ -2432,19 +2427,19 @@ dispatch:
|
||||||
case (SCM_ISYMNUM (SCM_IM_DISPATCH)):
|
case (SCM_ISYMNUM (SCM_IM_DISPATCH)):
|
||||||
{
|
{
|
||||||
/* If not done yet, evaluate the operand forms. The result is a
|
/* If not done yet, evaluate the operand forms. The result is a
|
||||||
* list of arguments stored in t.arg1, which is used to perform the
|
* list of arguments stored in arg1, which is used to perform the
|
||||||
* function dispatch. */
|
* function dispatch. */
|
||||||
SCM operand_forms = SCM_CADR (x);
|
SCM operand_forms = SCM_CADR (x);
|
||||||
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
||||||
if (SCM_ILOCP (operand_forms))
|
if (SCM_ILOCP (operand_forms))
|
||||||
t.arg1 = *scm_ilookup (operand_forms, env);
|
arg1 = *scm_ilookup (operand_forms, env);
|
||||||
else if (SCM_VARIABLEP (operand_forms))
|
else if (SCM_VARIABLEP (operand_forms))
|
||||||
t.arg1 = SCM_VARIABLE_REF (operand_forms);
|
arg1 = SCM_VARIABLE_REF (operand_forms);
|
||||||
else if (!SCM_CONSP (operand_forms))
|
else if (!SCM_CONSP (operand_forms))
|
||||||
t.arg1 = *scm_lookupcar (SCM_CDR (x), env, 1);
|
arg1 = *scm_lookupcar (SCM_CDR (x), env, 1);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SCM tail = t.arg1 = scm_list_1 (EVALCAR (operand_forms, env));
|
SCM tail = arg1 = scm_list_1 (EVALCAR (operand_forms, env));
|
||||||
operand_forms = SCM_CDR (operand_forms);
|
operand_forms = SCM_CDR (operand_forms);
|
||||||
while (!SCM_NULLP (operand_forms))
|
while (!SCM_NULLP (operand_forms))
|
||||||
{
|
{
|
||||||
|
@ -2459,7 +2454,7 @@ dispatch:
|
||||||
/* The type dispatch code is duplicated below
|
/* The type dispatch code is duplicated below
|
||||||
* (c.f. objects.c:scm_mcache_compute_cmethod) since that
|
* (c.f. objects.c:scm_mcache_compute_cmethod) since that
|
||||||
* cuts down execution time for type dispatch to 50%. */
|
* cuts down execution time for type dispatch to 50%. */
|
||||||
type_dispatch: /* inputs: x, t.arg1 */
|
type_dispatch: /* inputs: x, arg1 */
|
||||||
/* Type dispatch means to determine from the types of the function
|
/* Type dispatch means to determine from the types of the function
|
||||||
* arguments (i. e. the 'signature' of the call), which method from
|
* arguments (i. e. the 'signature' of the call), which method from
|
||||||
* a generic function is to be called. This process of selecting
|
* a generic function is to be called. This process of selecting
|
||||||
|
@ -2514,7 +2509,7 @@ dispatch:
|
||||||
* method in the method cache. */
|
* method in the method cache. */
|
||||||
unsigned long int hashset = SCM_INUM (tmp);
|
unsigned long int hashset = SCM_INUM (tmp);
|
||||||
unsigned long int counter = specializers + 1;
|
unsigned long int counter = specializers + 1;
|
||||||
SCM tmp_arg = t.arg1;
|
SCM tmp_arg = arg1;
|
||||||
hash_value = 0;
|
hash_value = 0;
|
||||||
while (!SCM_NULLP (tmp_arg) && counter != 0)
|
while (!SCM_NULLP (tmp_arg) && counter != 0)
|
||||||
{
|
{
|
||||||
|
@ -2553,7 +2548,7 @@ dispatch:
|
||||||
SCM z;
|
SCM z;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SCM args = t.arg1; /* list of arguments */
|
SCM args = arg1; /* list of arguments */
|
||||||
z = SCM_VELTS (method_cache)[hash_value];
|
z = SCM_VELTS (method_cache)[hash_value];
|
||||||
while (!SCM_NULLP (args))
|
while (!SCM_NULLP (args))
|
||||||
{
|
{
|
||||||
|
@ -2572,12 +2567,12 @@ dispatch:
|
||||||
} while (hash_value != cache_end_pos);
|
} while (hash_value != cache_end_pos);
|
||||||
|
|
||||||
/* No appropriate method was found in the cache. */
|
/* No appropriate method was found in the cache. */
|
||||||
z = scm_memoize_method (x, t.arg1);
|
z = scm_memoize_method (x, arg1);
|
||||||
|
|
||||||
apply_cmethod: /* inputs: z, t.arg1 */
|
apply_cmethod: /* inputs: z, arg1 */
|
||||||
{
|
{
|
||||||
SCM formals = SCM_CMETHOD_FORMALS (z);
|
SCM formals = SCM_CMETHOD_FORMALS (z);
|
||||||
env = EXTEND_ENV (formals, t.arg1, SCM_CMETHOD_ENV (z));
|
env = EXTEND_ENV (formals, arg1, SCM_CMETHOD_ENV (z));
|
||||||
x = SCM_CMETHOD_BODY (z);
|
x = SCM_CMETHOD_BODY (z);
|
||||||
goto nontoplevel_begin;
|
goto nontoplevel_begin;
|
||||||
}
|
}
|
||||||
|
@ -2675,17 +2670,17 @@ dispatch:
|
||||||
x = EVALCAR (proc, env);
|
x = EVALCAR (proc, env);
|
||||||
proc = SCM_CDR (proc);
|
proc = SCM_CDR (proc);
|
||||||
proc = EVALCAR (proc, env);
|
proc = EVALCAR (proc, env);
|
||||||
t.arg1 = SCM_APPLY (x, SCM_EOL, SCM_EOL);
|
arg1 = SCM_APPLY (x, SCM_EOL, SCM_EOL);
|
||||||
if (SCM_VALUESP (t.arg1))
|
if (SCM_VALUESP (arg1))
|
||||||
t.arg1 = scm_struct_ref (t.arg1, SCM_INUM0);
|
arg1 = scm_struct_ref (arg1, SCM_INUM0);
|
||||||
else
|
else
|
||||||
t.arg1 = scm_list_1 (t.arg1);
|
arg1 = scm_list_1 (arg1);
|
||||||
if (SCM_CLOSUREP (proc))
|
if (SCM_CLOSUREP (proc))
|
||||||
{
|
{
|
||||||
PREP_APPLY (proc, t.arg1);
|
PREP_APPLY (proc, arg1);
|
||||||
goto apply_closure;
|
goto apply_closure;
|
||||||
}
|
}
|
||||||
return SCM_APPLY (proc, t.arg1, SCM_EOL);
|
return SCM_APPLY (proc, arg1, SCM_EOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2770,7 +2765,7 @@ dispatch:
|
||||||
application frames can be deleted from the backtrace. */
|
application frames can be deleted from the backtrace. */
|
||||||
SCM_SET_MACROEXP (debug);
|
SCM_SET_MACROEXP (debug);
|
||||||
#endif
|
#endif
|
||||||
t.arg1 = SCM_APPLY (SCM_MACRO_CODE (proc), x,
|
arg1 = SCM_APPLY (SCM_MACRO_CODE (proc), x,
|
||||||
scm_cons (env, scm_listofnull));
|
scm_cons (env, scm_listofnull));
|
||||||
|
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
|
@ -2779,14 +2774,14 @@ dispatch:
|
||||||
switch (SCM_MACRO_TYPE (proc))
|
switch (SCM_MACRO_TYPE (proc))
|
||||||
{
|
{
|
||||||
case 2:
|
case 2:
|
||||||
if (scm_ilength (t.arg1) <= 0)
|
if (scm_ilength (arg1) <= 0)
|
||||||
t.arg1 = scm_list_2 (SCM_IM_BEGIN, t.arg1);
|
arg1 = scm_list_2 (SCM_IM_BEGIN, arg1);
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
if (!SCM_CLOSUREP (SCM_MACRO_CODE (proc)))
|
if (!SCM_CLOSUREP (SCM_MACRO_CODE (proc)))
|
||||||
{
|
{
|
||||||
SCM_DEFER_INTS;
|
SCM_DEFER_INTS;
|
||||||
SCM_SETCAR (x, SCM_CAR (t.arg1));
|
SCM_SETCAR (x, SCM_CAR (arg1));
|
||||||
SCM_SETCDR (x, SCM_CDR (t.arg1));
|
SCM_SETCDR (x, SCM_CDR (arg1));
|
||||||
SCM_ALLOW_INTS;
|
SCM_ALLOW_INTS;
|
||||||
goto dispatch;
|
goto dispatch;
|
||||||
}
|
}
|
||||||
|
@ -2796,15 +2791,15 @@ dispatch:
|
||||||
SCM_CDR (x));
|
SCM_CDR (x));
|
||||||
#endif
|
#endif
|
||||||
SCM_DEFER_INTS;
|
SCM_DEFER_INTS;
|
||||||
SCM_SETCAR (x, SCM_CAR (t.arg1));
|
SCM_SETCAR (x, SCM_CAR (arg1));
|
||||||
SCM_SETCDR (x, SCM_CDR (t.arg1));
|
SCM_SETCDR (x, SCM_CDR (arg1));
|
||||||
SCM_ALLOW_INTS;
|
SCM_ALLOW_INTS;
|
||||||
goto loopnoap;
|
goto loopnoap;
|
||||||
case 1:
|
case 1:
|
||||||
if (SCM_NIMP (x = t.arg1))
|
if (SCM_NIMP (x = arg1))
|
||||||
goto loopnoap;
|
goto loopnoap;
|
||||||
case 0:
|
case 0:
|
||||||
RETURN (t.arg1);
|
RETURN (arg1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2818,17 +2813,17 @@ dispatch:
|
||||||
if (SCM_CLOSUREP (proc))
|
if (SCM_CLOSUREP (proc))
|
||||||
{
|
{
|
||||||
arg2 = SCM_CLOSURE_FORMALS (proc);
|
arg2 = SCM_CLOSURE_FORMALS (proc);
|
||||||
t.arg1 = SCM_CDR (x);
|
arg1 = SCM_CDR (x);
|
||||||
while (!SCM_NULLP (arg2))
|
while (!SCM_NULLP (arg2))
|
||||||
{
|
{
|
||||||
if (!SCM_CONSP (arg2))
|
if (!SCM_CONSP (arg2))
|
||||||
goto evapply;
|
goto evapply;
|
||||||
if (SCM_IMP (t.arg1))
|
if (SCM_IMP (arg1))
|
||||||
goto umwrongnumargs;
|
goto umwrongnumargs;
|
||||||
arg2 = SCM_CDR (arg2);
|
arg2 = SCM_CDR (arg2);
|
||||||
t.arg1 = SCM_CDR (t.arg1);
|
arg1 = SCM_CDR (arg1);
|
||||||
}
|
}
|
||||||
if (!SCM_NULLP (t.arg1))
|
if (!SCM_NULLP (arg1))
|
||||||
goto umwrongnumargs;
|
goto umwrongnumargs;
|
||||||
}
|
}
|
||||||
else if (SCM_MACROP (proc))
|
else if (SCM_MACROP (proc))
|
||||||
|
@ -2859,11 +2854,11 @@ evapply:
|
||||||
goto badfun;
|
goto badfun;
|
||||||
RETURN (SCM_SMOB_APPLY_0 (proc));
|
RETURN (SCM_SMOB_APPLY_0 (proc));
|
||||||
case scm_tc7_cclo:
|
case scm_tc7_cclo:
|
||||||
t.arg1 = proc;
|
arg1 = proc;
|
||||||
proc = SCM_CCLO_SUBR (proc);
|
proc = SCM_CCLO_SUBR (proc);
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.proc = proc;
|
debug.info->a.proc = proc;
|
||||||
debug.info->a.args = scm_list_1 (t.arg1);
|
debug.info->a.args = scm_list_1 (arg1);
|
||||||
#endif
|
#endif
|
||||||
goto evap1;
|
goto evap1;
|
||||||
case scm_tc7_pws:
|
case scm_tc7_pws:
|
||||||
|
@ -2883,20 +2878,20 @@ evapply:
|
||||||
if (SCM_OBJ_CLASS_FLAGS (proc) & SCM_CLASSF_PURE_GENERIC)
|
if (SCM_OBJ_CLASS_FLAGS (proc) & SCM_CLASSF_PURE_GENERIC)
|
||||||
{
|
{
|
||||||
x = SCM_ENTITY_PROCEDURE (proc);
|
x = SCM_ENTITY_PROCEDURE (proc);
|
||||||
t.arg1 = SCM_EOL;
|
arg1 = SCM_EOL;
|
||||||
goto type_dispatch;
|
goto type_dispatch;
|
||||||
}
|
}
|
||||||
else if (!SCM_I_OPERATORP (proc))
|
else if (!SCM_I_OPERATORP (proc))
|
||||||
goto badfun;
|
goto badfun;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
t.arg1 = proc;
|
arg1 = proc;
|
||||||
proc = (SCM_I_ENTITYP (proc)
|
proc = (SCM_I_ENTITYP (proc)
|
||||||
? SCM_ENTITY_PROCEDURE (proc)
|
? SCM_ENTITY_PROCEDURE (proc)
|
||||||
: SCM_OPERATOR_PROCEDURE (proc));
|
: SCM_OPERATOR_PROCEDURE (proc));
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.proc = proc;
|
debug.info->a.proc = proc;
|
||||||
debug.info->a.args = scm_list_1 (t.arg1);
|
debug.info->a.args = scm_list_1 (arg1);
|
||||||
#endif
|
#endif
|
||||||
if (SCM_NIMP (proc))
|
if (SCM_NIMP (proc))
|
||||||
goto evap1;
|
goto evap1;
|
||||||
|
@ -2922,22 +2917,15 @@ evapply:
|
||||||
/* must handle macros by here */
|
/* must handle macros by here */
|
||||||
x = SCM_CDR (x);
|
x = SCM_CDR (x);
|
||||||
#ifdef SCM_CAUTIOUS
|
#ifdef SCM_CAUTIOUS
|
||||||
if (SCM_IMP (x))
|
if (SCM_CONSP (x))
|
||||||
goto wrongnumargs;
|
arg1 = EVALCAR (x, env);
|
||||||
else if (SCM_CONSP (x))
|
|
||||||
{
|
|
||||||
if (SCM_IMP (SCM_CAR (x)))
|
|
||||||
t.arg1 = SCM_EVALIM (SCM_CAR (x), env);
|
|
||||||
else
|
|
||||||
t.arg1 = EVALCELLCAR (x, env);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
goto wrongnumargs;
|
goto wrongnumargs;
|
||||||
#else
|
#else
|
||||||
t.arg1 = EVALCAR (x, env);
|
arg1 = EVALCAR (x, env);
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.args = scm_list_1 (t.arg1);
|
debug.info->a.args = scm_list_1 (arg1);
|
||||||
#endif
|
#endif
|
||||||
x = SCM_CDR (x);
|
x = SCM_CDR (x);
|
||||||
if (SCM_NULLP (x))
|
if (SCM_NULLP (x))
|
||||||
|
@ -2945,30 +2933,30 @@ evapply:
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
evap1:
|
evap1:
|
||||||
switch (SCM_TYP7 (proc))
|
switch (SCM_TYP7 (proc))
|
||||||
{ /* have one argument in t.arg1 */
|
{ /* have one argument in arg1 */
|
||||||
case scm_tc7_subr_2o:
|
case scm_tc7_subr_2o:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, SCM_UNDEFINED));
|
RETURN (SCM_SUBRF (proc) (arg1, SCM_UNDEFINED));
|
||||||
case scm_tc7_subr_1:
|
case scm_tc7_subr_1:
|
||||||
case scm_tc7_subr_1o:
|
case scm_tc7_subr_1o:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1));
|
RETURN (SCM_SUBRF (proc) (arg1));
|
||||||
case scm_tc7_cxr:
|
case scm_tc7_cxr:
|
||||||
if (SCM_SUBRF (proc))
|
if (SCM_SUBRF (proc))
|
||||||
{
|
{
|
||||||
if (SCM_INUMP (t.arg1))
|
if (SCM_INUMP (arg1))
|
||||||
{
|
{
|
||||||
RETURN (scm_make_real (SCM_DSUBRF (proc) ((double) SCM_INUM (t.arg1))));
|
RETURN (scm_make_real (SCM_DSUBRF (proc) ((double) SCM_INUM (arg1))));
|
||||||
}
|
}
|
||||||
else if (SCM_REALP (t.arg1))
|
else if (SCM_REALP (arg1))
|
||||||
{
|
{
|
||||||
RETURN (scm_make_real (SCM_DSUBRF (proc) (SCM_REAL_VALUE (t.arg1))));
|
RETURN (scm_make_real (SCM_DSUBRF (proc) (SCM_REAL_VALUE (arg1))));
|
||||||
}
|
}
|
||||||
#ifdef SCM_BIGDIG
|
#ifdef SCM_BIGDIG
|
||||||
else if (SCM_BIGP (t.arg1))
|
else if (SCM_BIGP (arg1))
|
||||||
{
|
{
|
||||||
RETURN (scm_make_real (SCM_DSUBRF (proc) (scm_i_big2dbl (t.arg1))));
|
RETURN (scm_make_real (SCM_DSUBRF (proc) (scm_i_big2dbl (arg1))));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SCM_WTA_DISPATCH_1 (*SCM_SUBR_GENERIC (proc), t.arg1,
|
SCM_WTA_DISPATCH_1 (*SCM_SUBR_GENERIC (proc), arg1,
|
||||||
SCM_ARG1, SCM_SYMBOL_CHARS (SCM_SNAME (proc)));
|
SCM_ARG1, SCM_SYMBOL_CHARS (SCM_SNAME (proc)));
|
||||||
}
|
}
|
||||||
proc = SCM_SNAME (proc);
|
proc = SCM_SNAME (proc);
|
||||||
|
@ -2976,32 +2964,32 @@ evapply:
|
||||||
char *chrs = SCM_SYMBOL_CHARS (proc) + SCM_SYMBOL_LENGTH (proc) - 1;
|
char *chrs = SCM_SYMBOL_CHARS (proc) + SCM_SYMBOL_LENGTH (proc) - 1;
|
||||||
while ('c' != *--chrs)
|
while ('c' != *--chrs)
|
||||||
{
|
{
|
||||||
SCM_ASSERT (SCM_CONSP (t.arg1),
|
SCM_ASSERT (SCM_CONSP (arg1),
|
||||||
t.arg1, SCM_ARG1, SCM_SYMBOL_CHARS (proc));
|
arg1, SCM_ARG1, SCM_SYMBOL_CHARS (proc));
|
||||||
t.arg1 = ('a' == *chrs) ? SCM_CAR (t.arg1) : SCM_CDR (t.arg1);
|
arg1 = ('a' == *chrs) ? SCM_CAR (arg1) : SCM_CDR (arg1);
|
||||||
}
|
}
|
||||||
RETURN (t.arg1);
|
RETURN (arg1);
|
||||||
}
|
}
|
||||||
case scm_tc7_rpsubr:
|
case scm_tc7_rpsubr:
|
||||||
RETURN (SCM_BOOL_T);
|
RETURN (SCM_BOOL_T);
|
||||||
case scm_tc7_asubr:
|
case scm_tc7_asubr:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, SCM_UNDEFINED));
|
RETURN (SCM_SUBRF (proc) (arg1, SCM_UNDEFINED));
|
||||||
case scm_tc7_lsubr:
|
case scm_tc7_lsubr:
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
RETURN (SCM_SUBRF (proc) (debug.info->a.args));
|
RETURN (SCM_SUBRF (proc) (debug.info->a.args));
|
||||||
#else
|
#else
|
||||||
RETURN (SCM_SUBRF (proc) (scm_list_1 (t.arg1)));
|
RETURN (SCM_SUBRF (proc) (scm_list_1 (arg1)));
|
||||||
#endif
|
#endif
|
||||||
case scm_tc7_smob:
|
case scm_tc7_smob:
|
||||||
if (!SCM_SMOB_APPLICABLE_P (proc))
|
if (!SCM_SMOB_APPLICABLE_P (proc))
|
||||||
goto badfun;
|
goto badfun;
|
||||||
RETURN (SCM_SMOB_APPLY_1 (proc, t.arg1));
|
RETURN (SCM_SMOB_APPLY_1 (proc, arg1));
|
||||||
case scm_tc7_cclo:
|
case scm_tc7_cclo:
|
||||||
arg2 = t.arg1;
|
arg2 = arg1;
|
||||||
t.arg1 = proc;
|
arg1 = proc;
|
||||||
proc = SCM_CCLO_SUBR (proc);
|
proc = SCM_CCLO_SUBR (proc);
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.args = scm_cons (t.arg1, debug.info->a.args);
|
debug.info->a.args = scm_cons (arg1, debug.info->a.args);
|
||||||
debug.info->a.proc = proc;
|
debug.info->a.proc = proc;
|
||||||
#endif
|
#endif
|
||||||
goto evap2;
|
goto evap2;
|
||||||
|
@ -3020,7 +3008,7 @@ evapply:
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc), debug.info->a.args, SCM_ENV (proc));
|
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc), debug.info->a.args, SCM_ENV (proc));
|
||||||
#else
|
#else
|
||||||
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc), scm_list_1 (t.arg1), SCM_ENV (proc));
|
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc), scm_list_1 (arg1), SCM_ENV (proc));
|
||||||
#endif
|
#endif
|
||||||
goto nontoplevel_begin;
|
goto nontoplevel_begin;
|
||||||
case scm_tcs_struct:
|
case scm_tcs_struct:
|
||||||
|
@ -3028,9 +3016,9 @@ evapply:
|
||||||
{
|
{
|
||||||
x = SCM_ENTITY_PROCEDURE (proc);
|
x = SCM_ENTITY_PROCEDURE (proc);
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
t.arg1 = debug.info->a.args;
|
arg1 = debug.info->a.args;
|
||||||
#else
|
#else
|
||||||
t.arg1 = scm_list_1 (t.arg1);
|
arg1 = scm_list_1 (arg1);
|
||||||
#endif
|
#endif
|
||||||
goto type_dispatch;
|
goto type_dispatch;
|
||||||
}
|
}
|
||||||
|
@ -3038,13 +3026,13 @@ evapply:
|
||||||
goto badfun;
|
goto badfun;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
arg2 = t.arg1;
|
arg2 = arg1;
|
||||||
t.arg1 = proc;
|
arg1 = proc;
|
||||||
proc = (SCM_I_ENTITYP (proc)
|
proc = (SCM_I_ENTITYP (proc)
|
||||||
? SCM_ENTITY_PROCEDURE (proc)
|
? SCM_ENTITY_PROCEDURE (proc)
|
||||||
: SCM_OPERATOR_PROCEDURE (proc));
|
: SCM_OPERATOR_PROCEDURE (proc));
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.args = scm_cons (t.arg1, debug.info->a.args);
|
debug.info->a.args = scm_cons (arg1, debug.info->a.args);
|
||||||
debug.info->a.proc = proc;
|
debug.info->a.proc = proc;
|
||||||
#endif
|
#endif
|
||||||
if (SCM_NIMP (proc))
|
if (SCM_NIMP (proc))
|
||||||
|
@ -3078,7 +3066,7 @@ evapply:
|
||||||
#endif
|
#endif
|
||||||
{ /* have two or more arguments */
|
{ /* have two or more arguments */
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.args = scm_list_2 (t.arg1, arg2);
|
debug.info->a.args = scm_list_2 (arg1, arg2);
|
||||||
#endif
|
#endif
|
||||||
x = SCM_CDR (x);
|
x = SCM_CDR (x);
|
||||||
if (SCM_NULLP (x)) {
|
if (SCM_NULLP (x)) {
|
||||||
|
@ -3088,22 +3076,22 @@ evapply:
|
||||||
{ /* have two arguments */
|
{ /* have two arguments */
|
||||||
case scm_tc7_subr_2:
|
case scm_tc7_subr_2:
|
||||||
case scm_tc7_subr_2o:
|
case scm_tc7_subr_2o:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2));
|
RETURN (SCM_SUBRF (proc) (arg1, arg2));
|
||||||
case scm_tc7_lsubr:
|
case scm_tc7_lsubr:
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
RETURN (SCM_SUBRF (proc) (debug.info->a.args));
|
RETURN (SCM_SUBRF (proc) (debug.info->a.args));
|
||||||
#else
|
#else
|
||||||
RETURN (SCM_SUBRF (proc) (scm_list_2 (t.arg1, arg2)));
|
RETURN (SCM_SUBRF (proc) (scm_list_2 (arg1, arg2)));
|
||||||
#endif
|
#endif
|
||||||
case scm_tc7_lsubr_2:
|
case scm_tc7_lsubr_2:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2, SCM_EOL));
|
RETURN (SCM_SUBRF (proc) (arg1, arg2, SCM_EOL));
|
||||||
case scm_tc7_rpsubr:
|
case scm_tc7_rpsubr:
|
||||||
case scm_tc7_asubr:
|
case scm_tc7_asubr:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2));
|
RETURN (SCM_SUBRF (proc) (arg1, arg2));
|
||||||
case scm_tc7_smob:
|
case scm_tc7_smob:
|
||||||
if (!SCM_SMOB_APPLICABLE_P (proc))
|
if (!SCM_SMOB_APPLICABLE_P (proc))
|
||||||
goto badfun;
|
goto badfun;
|
||||||
RETURN (SCM_SMOB_APPLY_2 (proc, t.arg1, arg2));
|
RETURN (SCM_SMOB_APPLY_2 (proc, arg1, arg2));
|
||||||
cclon:
|
cclon:
|
||||||
case scm_tc7_cclo:
|
case scm_tc7_cclo:
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
|
@ -3112,7 +3100,7 @@ evapply:
|
||||||
SCM_EOL));
|
SCM_EOL));
|
||||||
#else
|
#else
|
||||||
RETURN (SCM_APPLY (SCM_CCLO_SUBR (proc),
|
RETURN (SCM_APPLY (SCM_CCLO_SUBR (proc),
|
||||||
scm_cons2 (proc, t.arg1,
|
scm_cons2 (proc, arg1,
|
||||||
scm_cons (arg2,
|
scm_cons (arg2,
|
||||||
scm_eval_args (x,
|
scm_eval_args (x,
|
||||||
env,
|
env,
|
||||||
|
@ -3124,9 +3112,9 @@ evapply:
|
||||||
{
|
{
|
||||||
x = SCM_ENTITY_PROCEDURE (proc);
|
x = SCM_ENTITY_PROCEDURE (proc);
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
t.arg1 = debug.info->a.args;
|
arg1 = debug.info->a.args;
|
||||||
#else
|
#else
|
||||||
t.arg1 = scm_list_2 (t.arg1, arg2);
|
arg1 = scm_list_2 (arg1, arg2);
|
||||||
#endif
|
#endif
|
||||||
goto type_dispatch;
|
goto type_dispatch;
|
||||||
}
|
}
|
||||||
|
@ -3145,7 +3133,7 @@ evapply:
|
||||||
RETURN (SCM_APPLY (SCM_I_ENTITYP (proc)
|
RETURN (SCM_APPLY (SCM_I_ENTITYP (proc)
|
||||||
? SCM_ENTITY_PROCEDURE (proc)
|
? SCM_ENTITY_PROCEDURE (proc)
|
||||||
: SCM_OPERATOR_PROCEDURE (proc),
|
: SCM_OPERATOR_PROCEDURE (proc),
|
||||||
scm_cons2 (proc, t.arg1,
|
scm_cons2 (proc, arg1,
|
||||||
scm_cons (arg2,
|
scm_cons (arg2,
|
||||||
scm_eval_args (x,
|
scm_eval_args (x,
|
||||||
env,
|
env,
|
||||||
|
@ -3178,7 +3166,7 @@ evapply:
|
||||||
SCM_ENV (proc));
|
SCM_ENV (proc));
|
||||||
#else
|
#else
|
||||||
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc),
|
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc),
|
||||||
scm_list_2 (t.arg1, arg2), SCM_ENV (proc));
|
scm_list_2 (arg1, arg2), SCM_ENV (proc));
|
||||||
#endif
|
#endif
|
||||||
x = SCM_CLOSURE_BODY (proc);
|
x = SCM_CLOSURE_BODY (proc);
|
||||||
goto nontoplevel_begin;
|
goto nontoplevel_begin;
|
||||||
|
@ -3189,7 +3177,7 @@ evapply:
|
||||||
goto wrongnumargs;
|
goto wrongnumargs;
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
debug.info->a.args = scm_cons2 (t.arg1, arg2,
|
debug.info->a.args = scm_cons2 (arg1, arg2,
|
||||||
deval_args (x, env, proc, SCM_CDRLOC (SCM_CDR (debug.info->a.args))));
|
deval_args (x, env, proc, SCM_CDRLOC (SCM_CDR (debug.info->a.args))));
|
||||||
#endif
|
#endif
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
|
@ -3199,49 +3187,49 @@ evapply:
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
case scm_tc7_subr_3:
|
case scm_tc7_subr_3:
|
||||||
SCM_ASRTGO (SCM_NULLP (SCM_CDR (x)), wrongnumargs);
|
SCM_ASRTGO (SCM_NULLP (SCM_CDR (x)), wrongnumargs);
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2,
|
RETURN (SCM_SUBRF (proc) (arg1, arg2,
|
||||||
SCM_CADDR (debug.info->a.args)));
|
SCM_CADDR (debug.info->a.args)));
|
||||||
case scm_tc7_asubr:
|
case scm_tc7_asubr:
|
||||||
#ifdef BUILTIN_RPASUBR
|
#ifdef BUILTIN_RPASUBR
|
||||||
t.arg1 = SCM_SUBRF(proc)(t.arg1, arg2);
|
arg1 = SCM_SUBRF(proc)(arg1, arg2);
|
||||||
arg2 = SCM_CDDR (debug.info->a.args);
|
arg2 = SCM_CDDR (debug.info->a.args);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
t.arg1 = SCM_SUBRF(proc)(t.arg1, SCM_CAR (arg2));
|
arg1 = SCM_SUBRF(proc)(arg1, SCM_CAR (arg2));
|
||||||
arg2 = SCM_CDR (arg2);
|
arg2 = SCM_CDR (arg2);
|
||||||
}
|
}
|
||||||
while (SCM_NIMP (arg2));
|
while (SCM_NIMP (arg2));
|
||||||
RETURN (t.arg1);
|
RETURN (arg1);
|
||||||
#endif /* BUILTIN_RPASUBR */
|
#endif /* BUILTIN_RPASUBR */
|
||||||
case scm_tc7_rpsubr:
|
case scm_tc7_rpsubr:
|
||||||
#ifdef BUILTIN_RPASUBR
|
#ifdef BUILTIN_RPASUBR
|
||||||
if (SCM_FALSEP (SCM_SUBRF (proc) (t.arg1, arg2)))
|
if (SCM_FALSEP (SCM_SUBRF (proc) (arg1, arg2)))
|
||||||
RETURN (SCM_BOOL_F);
|
RETURN (SCM_BOOL_F);
|
||||||
t.arg1 = SCM_CDDR (debug.info->a.args);
|
arg1 = SCM_CDDR (debug.info->a.args);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (SCM_FALSEP (SCM_SUBRF (proc) (arg2, SCM_CAR (t.arg1))))
|
if (SCM_FALSEP (SCM_SUBRF (proc) (arg2, SCM_CAR (arg1))))
|
||||||
RETURN (SCM_BOOL_F);
|
RETURN (SCM_BOOL_F);
|
||||||
arg2 = SCM_CAR (t.arg1);
|
arg2 = SCM_CAR (arg1);
|
||||||
t.arg1 = SCM_CDR (t.arg1);
|
arg1 = SCM_CDR (arg1);
|
||||||
}
|
}
|
||||||
while (SCM_NIMP (t.arg1));
|
while (SCM_NIMP (arg1));
|
||||||
RETURN (SCM_BOOL_T);
|
RETURN (SCM_BOOL_T);
|
||||||
#else /* BUILTIN_RPASUBR */
|
#else /* BUILTIN_RPASUBR */
|
||||||
RETURN (SCM_APPLY (proc, t.arg1,
|
RETURN (SCM_APPLY (proc, arg1,
|
||||||
scm_acons (arg2,
|
scm_acons (arg2,
|
||||||
SCM_CDDR (debug.info->a.args),
|
SCM_CDDR (debug.info->a.args),
|
||||||
SCM_EOL)));
|
SCM_EOL)));
|
||||||
#endif /* BUILTIN_RPASUBR */
|
#endif /* BUILTIN_RPASUBR */
|
||||||
case scm_tc7_lsubr_2:
|
case scm_tc7_lsubr_2:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2,
|
RETURN (SCM_SUBRF (proc) (arg1, arg2,
|
||||||
SCM_CDDR (debug.info->a.args)));
|
SCM_CDDR (debug.info->a.args)));
|
||||||
case scm_tc7_lsubr:
|
case scm_tc7_lsubr:
|
||||||
RETURN (SCM_SUBRF (proc) (debug.info->a.args));
|
RETURN (SCM_SUBRF (proc) (debug.info->a.args));
|
||||||
case scm_tc7_smob:
|
case scm_tc7_smob:
|
||||||
if (!SCM_SMOB_APPLICABLE_P (proc))
|
if (!SCM_SMOB_APPLICABLE_P (proc))
|
||||||
goto badfun;
|
goto badfun;
|
||||||
RETURN (SCM_SMOB_APPLY_3 (proc, t.arg1, arg2,
|
RETURN (SCM_SMOB_APPLY_3 (proc, arg1, arg2,
|
||||||
SCM_CDDR (debug.info->a.args)));
|
SCM_CDDR (debug.info->a.args)));
|
||||||
case scm_tc7_cclo:
|
case scm_tc7_cclo:
|
||||||
goto cclon;
|
goto cclon;
|
||||||
|
@ -3262,48 +3250,48 @@ evapply:
|
||||||
#else /* DEVAL */
|
#else /* DEVAL */
|
||||||
case scm_tc7_subr_3:
|
case scm_tc7_subr_3:
|
||||||
SCM_ASRTGO (SCM_NULLP (SCM_CDR (x)), wrongnumargs);
|
SCM_ASRTGO (SCM_NULLP (SCM_CDR (x)), wrongnumargs);
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2, EVALCAR (x, env)));
|
RETURN (SCM_SUBRF (proc) (arg1, arg2, EVALCAR (x, env)));
|
||||||
case scm_tc7_asubr:
|
case scm_tc7_asubr:
|
||||||
#ifdef BUILTIN_RPASUBR
|
#ifdef BUILTIN_RPASUBR
|
||||||
t.arg1 = SCM_SUBRF (proc) (t.arg1, arg2);
|
arg1 = SCM_SUBRF (proc) (arg1, arg2);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
t.arg1 = SCM_SUBRF(proc)(t.arg1, EVALCAR(x, env));
|
arg1 = SCM_SUBRF(proc)(arg1, EVALCAR(x, env));
|
||||||
x = SCM_CDR(x);
|
x = SCM_CDR(x);
|
||||||
}
|
}
|
||||||
while (SCM_NIMP (x));
|
while (SCM_NIMP (x));
|
||||||
RETURN (t.arg1);
|
RETURN (arg1);
|
||||||
#endif /* BUILTIN_RPASUBR */
|
#endif /* BUILTIN_RPASUBR */
|
||||||
case scm_tc7_rpsubr:
|
case scm_tc7_rpsubr:
|
||||||
#ifdef BUILTIN_RPASUBR
|
#ifdef BUILTIN_RPASUBR
|
||||||
if (SCM_FALSEP (SCM_SUBRF (proc) (t.arg1, arg2)))
|
if (SCM_FALSEP (SCM_SUBRF (proc) (arg1, arg2)))
|
||||||
RETURN (SCM_BOOL_F);
|
RETURN (SCM_BOOL_F);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
t.arg1 = EVALCAR (x, env);
|
arg1 = EVALCAR (x, env);
|
||||||
if (SCM_FALSEP (SCM_SUBRF (proc) (arg2, t.arg1)))
|
if (SCM_FALSEP (SCM_SUBRF (proc) (arg2, arg1)))
|
||||||
RETURN (SCM_BOOL_F);
|
RETURN (SCM_BOOL_F);
|
||||||
arg2 = t.arg1;
|
arg2 = arg1;
|
||||||
x = SCM_CDR (x);
|
x = SCM_CDR (x);
|
||||||
}
|
}
|
||||||
while (SCM_NIMP (x));
|
while (SCM_NIMP (x));
|
||||||
RETURN (SCM_BOOL_T);
|
RETURN (SCM_BOOL_T);
|
||||||
#else /* BUILTIN_RPASUBR */
|
#else /* BUILTIN_RPASUBR */
|
||||||
RETURN (SCM_APPLY (proc, t.arg1,
|
RETURN (SCM_APPLY (proc, arg1,
|
||||||
scm_acons (arg2,
|
scm_acons (arg2,
|
||||||
scm_eval_args (x, env, proc),
|
scm_eval_args (x, env, proc),
|
||||||
SCM_EOL)));
|
SCM_EOL)));
|
||||||
#endif /* BUILTIN_RPASUBR */
|
#endif /* BUILTIN_RPASUBR */
|
||||||
case scm_tc7_lsubr_2:
|
case scm_tc7_lsubr_2:
|
||||||
RETURN (SCM_SUBRF (proc) (t.arg1, arg2, scm_eval_args (x, env, proc)));
|
RETURN (SCM_SUBRF (proc) (arg1, arg2, scm_eval_args (x, env, proc)));
|
||||||
case scm_tc7_lsubr:
|
case scm_tc7_lsubr:
|
||||||
RETURN (SCM_SUBRF (proc) (scm_cons2 (t.arg1,
|
RETURN (SCM_SUBRF (proc) (scm_cons2 (arg1,
|
||||||
arg2,
|
arg2,
|
||||||
scm_eval_args (x, env, proc))));
|
scm_eval_args (x, env, proc))));
|
||||||
case scm_tc7_smob:
|
case scm_tc7_smob:
|
||||||
if (!SCM_SMOB_APPLICABLE_P (proc))
|
if (!SCM_SMOB_APPLICABLE_P (proc))
|
||||||
goto badfun;
|
goto badfun;
|
||||||
RETURN (SCM_SMOB_APPLY_3 (proc, t.arg1, arg2,
|
RETURN (SCM_SMOB_APPLY_3 (proc, arg1, arg2,
|
||||||
scm_eval_args (x, env, proc)));
|
scm_eval_args (x, env, proc)));
|
||||||
case scm_tc7_cclo:
|
case scm_tc7_cclo:
|
||||||
goto cclon;
|
goto cclon;
|
||||||
|
@ -3325,7 +3313,7 @@ evapply:
|
||||||
SCM_SET_ARGSREADY (debug);
|
SCM_SET_ARGSREADY (debug);
|
||||||
#endif
|
#endif
|
||||||
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc),
|
env = EXTEND_ENV (SCM_CLOSURE_FORMALS (proc),
|
||||||
scm_cons2 (t.arg1,
|
scm_cons2 (arg1,
|
||||||
arg2,
|
arg2,
|
||||||
scm_eval_args (x, env, proc)),
|
scm_eval_args (x, env, proc)),
|
||||||
SCM_ENV (proc));
|
SCM_ENV (proc));
|
||||||
|
@ -3336,9 +3324,9 @@ evapply:
|
||||||
if (SCM_OBJ_CLASS_FLAGS (proc) & SCM_CLASSF_PURE_GENERIC)
|
if (SCM_OBJ_CLASS_FLAGS (proc) & SCM_CLASSF_PURE_GENERIC)
|
||||||
{
|
{
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
t.arg1 = debug.info->a.args;
|
arg1 = debug.info->a.args;
|
||||||
#else
|
#else
|
||||||
t.arg1 = scm_cons2 (t.arg1, arg2, scm_eval_args (x, env, proc));
|
arg1 = scm_cons2 (arg1, arg2, scm_eval_args (x, env, proc));
|
||||||
#endif
|
#endif
|
||||||
x = SCM_ENTITY_PROCEDURE (proc);
|
x = SCM_ENTITY_PROCEDURE (proc);
|
||||||
goto type_dispatch;
|
goto type_dispatch;
|
||||||
|
@ -3365,14 +3353,14 @@ exit:
|
||||||
{
|
{
|
||||||
SCM_CLEAR_TRACED_FRAME (debug);
|
SCM_CLEAR_TRACED_FRAME (debug);
|
||||||
if (SCM_CHEAPTRAPS_P)
|
if (SCM_CHEAPTRAPS_P)
|
||||||
t.arg1 = scm_make_debugobj (&debug);
|
arg1 = scm_make_debugobj (&debug);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int first;
|
int first;
|
||||||
SCM val = scm_make_continuation (&first);
|
SCM val = scm_make_continuation (&first);
|
||||||
|
|
||||||
if (first)
|
if (first)
|
||||||
t.arg1 = val;
|
arg1 = val;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
proc = val;
|
proc = val;
|
||||||
|
@ -3380,7 +3368,7 @@ exit:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SCM_TRAPS_P = 0;
|
SCM_TRAPS_P = 0;
|
||||||
scm_call_3 (SCM_EXIT_FRAME_HDLR, scm_sym_exit_frame, t.arg1, proc);
|
scm_call_3 (SCM_EXIT_FRAME_HDLR, scm_sym_exit_frame, arg1, proc);
|
||||||
SCM_TRAPS_P = 1;
|
SCM_TRAPS_P = 1;
|
||||||
}
|
}
|
||||||
ret:
|
ret:
|
||||||
|
|
|
@ -115,9 +115,9 @@ typedef struct scm_t_srcprops_chunk
|
||||||
#define SETSRCPROPLINE(p,l) SETSRCPROPPOS (p, l, SRCPROPCOL (p))
|
#define SETSRCPROPLINE(p,l) SETSRCPROPPOS (p, l, SRCPROPCOL (p))
|
||||||
#define SETSRCPROPCOL(p,c) SETSRCPROPPOS (p, SRCPROPLINE (p), c)
|
#define SETSRCPROPCOL(p,c) SETSRCPROPPOS (p, SRCPROPLINE (p), c)
|
||||||
|
|
||||||
#define SRCBRKP(x) (!SCM_IMP (t.arg1 = scm_whash_lookup (scm_source_whash, (x)))\
|
#define SRCBRKP(x) (!SCM_IMP (arg1 = scm_whash_lookup (scm_source_whash, (x)))\
|
||||||
&& SRCPROPSP (t.arg1)\
|
&& SRCPROPSP (arg1)\
|
||||||
&& SRCPROPBRK (t.arg1))
|
&& SRCPROPBRK (arg1))
|
||||||
|
|
||||||
#define PROCTRACEP(x) (!SCM_FALSEP (scm_procedure_property (x, scm_sym_trace)))
|
#define PROCTRACEP(x) (!SCM_FALSEP (scm_procedure_property (x, scm_sym_trace)))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue