aboutsummaryrefslogtreecommitdiff
path: root/src/interp/i-spec2.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2010-06-10 15:15:28 +0000
committerdos-reis <gdr@axiomatics.org>2010-06-10 15:15:28 +0000
commit35102fea22aa54cdc3dff3e9faea8b1c58b93aa2 (patch)
treee83de1b3592d7c04f46bb3936a0546f4e4828a1d /src/interp/i-spec2.boot
parentb28cdd9c3c0bbeba4f624cbfc649dc4e47b699a8 (diff)
downloadopen-axiom-35102fea22aa54cdc3dff3e9faea8b1c58b93aa2.tar.gz
* interp/compiler.boot (freeVarUsage): Handle %when too.
(compLogicalNot): Generate %not form. (satisfies): Use %bind. (compMatch): Likewise. (compReduce1): Generate %loop directly instead of %reduce. * interp/g-opt.boot (changeThrowToExit): Don't check for %reduce. * interp/g-util.boot (expandRepeat): Remove. (expandReduce): Likewise.
Diffstat (limited to 'src/interp/i-spec2.boot')
-rw-r--r--src/interp/i-spec2.boot6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/interp/i-spec2.boot b/src/interp/i-spec2.boot
index a77b92e1..c67ccb7e 100644
--- a/src/interp/i-spec2.boot
+++ b/src/interp/i-spec2.boot
@@ -953,7 +953,7 @@ evalREPEAT(op,[:itrl,body],repeatMode) ==
bodyCode := getArgValue(body,bodyMode)
if $iterateCount > 0 then
bodyCode := ["CATCH",$repeatBodyLabel,bodyCode]
- code := ["%repeat",:[evalLoopIter itr for itr in itrl], bodyCode]
+ code := ['%loop,:[evalLoopIter itr for itr in itrl],bodyCode,voidValue()]
code := timedOptimization code
if $breakCount > 0 then code := ['CATCH,$repeatLabel,code]
val :=
@@ -975,9 +975,9 @@ interpREPEAT(op,itrl,body,repeatMode) ==
$indexTypes: local := NIL
code :=
-- we must insert a CATCH for the iterate clause
- ["%repeat",:[interpIter itr for itr in itrl],
+ ['%loop,:[interpIter itr for itr in itrl],
["CATCH",$repeatBodyLabel,interpLoop(body,$indexVars,
- $indexTypes,nil)]]
+ $indexTypes,nil)],voidValue()]
SPADCATCH(eval $repeatLabel,timedEVALFUN code)
val:= objNewWrap(voidValue(),repeatMode)
putValue(op,val)