mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 09:10:22 +02:00
* eval.c (SCM_CEVAL): fixed a couple of mysterious (probably
optimization related) bugs on powerpc by altering some "while (!SCM_NULLP (t.arg1 = SCM_CDR (t.arg1)))" style constructs so that the assignment doesn't happen inside the guard.
This commit is contained in:
parent
bd4ed372ce
commit
9300912e0c
1 changed files with 14 additions and 8 deletions
|
@ -1941,13 +1941,17 @@ dispatch:
|
|||
case SCM_BIT8(SCM_IM_AND):
|
||||
x = SCM_CDR (x);
|
||||
t.arg1 = x;
|
||||
while (SCM_NNULLP (t.arg1 = SCM_CDR (t.arg1)))
|
||||
if (SCM_FALSEP (EVALCAR (x, env)))
|
||||
{
|
||||
RETURN (SCM_BOOL_F);
|
||||
}
|
||||
else
|
||||
x = t.arg1;
|
||||
t.arg1 = SCM_CDR (t.arg1);
|
||||
while (SCM_NNULLP (t.arg1))
|
||||
{
|
||||
if (SCM_FALSEP (EVALCAR (x, env)))
|
||||
{
|
||||
RETURN (SCM_BOOL_F);
|
||||
}
|
||||
else
|
||||
x = t.arg1;
|
||||
t.arg1 = SCM_CDR (t.arg1);
|
||||
}
|
||||
PREP_APPLY (SCM_UNDEFINED, SCM_EOL);
|
||||
goto carloop;
|
||||
|
||||
|
@ -1983,7 +1987,8 @@ dispatch:
|
|||
x = SCM_CDR (x);
|
||||
nontoplevel_begin:
|
||||
t.arg1 = x;
|
||||
while (!SCM_NULLP (t.arg1 = SCM_CDR (t.arg1)))
|
||||
t.arg1 = SCM_CDR (t.arg1);
|
||||
while (!SCM_NULLP (t.arg1))
|
||||
{
|
||||
if (SCM_IMP (SCM_CAR (x)))
|
||||
{
|
||||
|
@ -1998,6 +2003,7 @@ dispatch:
|
|||
else
|
||||
SCM_CEVAL (SCM_CAR (x), env);
|
||||
x = t.arg1;
|
||||
t.arg1 = SCM_CDR (t.arg1);
|
||||
}
|
||||
|
||||
carloop: /* scm_eval car of last form in list */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue