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:
parent
1ab45872f0
commit
a570e93a25
1 changed files with 11 additions and 6 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue