mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 06:41:13 +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. */
|
/* 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
|
||||||
scm_m_delay (xorig, env)
|
scm_m_delay (xorig, env)
|
||||||
|
@ -904,10 +905,7 @@ scm_m_delay (xorig, env)
|
||||||
SCM env;
|
SCM env;
|
||||||
{
|
{
|
||||||
SCM_ASSYNT (scm_ilength (xorig) == 2, xorig, scm_s_expression, s_delay);
|
SCM_ASSYNT (scm_ilength (xorig) == 2, xorig, scm_s_expression, s_delay);
|
||||||
xorig = SCM_CDR (xorig);
|
return scm_cons2 (SCM_IM_DELAY, SCM_EOL, SCM_CDR (xorig));
|
||||||
return scm_makprom (scm_closure (scm_cons2 (SCM_EOL, SCM_CAR (xorig),
|
|
||||||
SCM_CDR (xorig)),
|
|
||||||
env));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1515,6 +1513,10 @@ unmemocopy (x, env)
|
||||||
case (SCM_ISYMNUM (SCM_IM_CONT)):
|
case (SCM_ISYMNUM (SCM_IM_CONT)):
|
||||||
ls = z = scm_cons (scm_sym_atcall_cc, SCM_UNSPECIFIED);
|
ls = z = scm_cons (scm_sym_atcall_cc, SCM_UNSPECIFIED);
|
||||||
goto loop;
|
goto loop;
|
||||||
|
case (SCM_ISYMNUM (SCM_IM_DELAY)):
|
||||||
|
ls = z = scm_cons (scm_sym_delay, SCM_UNSPECIFIED);
|
||||||
|
x = SCM_CDR (x);
|
||||||
|
goto loop;
|
||||||
default:
|
default:
|
||||||
/* appease the Sun compiler god: */ ;
|
/* appease the Sun compiler god: */ ;
|
||||||
}
|
}
|
||||||
|
@ -2302,7 +2304,7 @@ dispatch:
|
||||||
{
|
{
|
||||||
SCM val;
|
SCM val;
|
||||||
val = SCM_THROW_VALUE (t.arg1);
|
val = SCM_THROW_VALUE (t.arg1);
|
||||||
RETURN (val);
|
RETURN (val)
|
||||||
}
|
}
|
||||||
proc = SCM_CDR (x);
|
proc = SCM_CDR (x);
|
||||||
proc = evalcar (proc, env);
|
proc = evalcar (proc, env);
|
||||||
|
@ -2311,6 +2313,9 @@ dispatch:
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
goto evap1;
|
goto evap1;
|
||||||
|
|
||||||
|
case (SCM_ISYMNUM (SCM_IM_DELAY)):
|
||||||
|
RETURN (scm_makprom (scm_closure (SCM_CDR (x), env)))
|
||||||
|
|
||||||
case (SCM_ISYMNUM (SCM_IM_DISPATCH)):
|
case (SCM_ISYMNUM (SCM_IM_DISPATCH)):
|
||||||
proc = SCM_CADR (x); /* unevaluated operands */
|
proc = SCM_CADR (x); /* unevaluated operands */
|
||||||
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue