1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00

* eval.c, eval.h (scm_sym_delay): New global symbol.

* eval.c (unmemocopy, SCM_CEVAL): Handle SCM_IM_DELAY.
(scm_m_delay): Turned into a memoizing macro.
This commit is contained in:
Mikael Djurfeldt 1999-10-11 17:39:24 +00:00
parent 1ab45872f0
commit a570e93a25

View file

@ -896,7 +896,8 @@ iqq (form, env, depth)
/* Here are acros which return values rather than code. */
SCM_SYNTAX(s_delay, "delay", scm_makacro, scm_m_delay);
SCM_SYNTAX (s_delay, "delay", scm_makmmacro, scm_m_delay);
SCM_GLOBAL_SYMBOL (scm_sym_delay, s_delay);
SCM
scm_m_delay (xorig, env)
@ -904,10 +905,7 @@ scm_m_delay (xorig, env)
SCM env;
{
SCM_ASSYNT (scm_ilength (xorig) == 2, xorig, scm_s_expression, s_delay);
xorig = SCM_CDR (xorig);
return scm_makprom (scm_closure (scm_cons2 (SCM_EOL, SCM_CAR (xorig),
SCM_CDR (xorig)),
env));
return scm_cons2 (SCM_IM_DELAY, SCM_EOL, SCM_CDR (xorig));
}
@ -1515,6 +1513,10 @@ unmemocopy (x, env)
case (SCM_ISYMNUM (SCM_IM_CONT)):
ls = z = scm_cons (scm_sym_atcall_cc, SCM_UNSPECIFIED);
goto loop;
case (SCM_ISYMNUM (SCM_IM_DELAY)):
ls = z = scm_cons (scm_sym_delay, SCM_UNSPECIFIED);
x = SCM_CDR (x);
goto loop;
default:
/* appease the Sun compiler god: */ ;
}
@ -2302,7 +2304,7 @@ dispatch:
{
SCM val;
val = SCM_THROW_VALUE (t.arg1);
RETURN (val);
RETURN (val)
}
proc = SCM_CDR (x);
proc = evalcar (proc, env);
@ -2311,6 +2313,9 @@ dispatch:
ENTER_APPLY;
goto evap1;
case (SCM_ISYMNUM (SCM_IM_DELAY)):
RETURN (scm_makprom (scm_closure (SCM_CDR (x), env)))
case (SCM_ISYMNUM (SCM_IM_DISPATCH)):
proc = SCM_CADR (x); /* unevaluated operands */
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);