diff options
author | dos-reis <gdr@axiomatics.org> | 2008-05-11 19:14:29 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2008-05-11 19:14:29 +0000 |
commit | 20e1bed66399cce629d08a71ca0552ed24fef1d1 (patch) | |
tree | 000ab5b98e479d1c077fc4f6fd4a9f46c4a9451c /src/interp/iterator.boot | |
parent | 51422a0c6bc0128cd5635a01c402ef56ad4ed770 (diff) | |
download | open-axiom-20e1bed66399cce629d08a71ca0552ed24fef1d1.tar.gz |
Restrict loop variable scopes, take 2.
* interp/iterator.boot (compReduce1): Maintain proper scope for
loop variables.
(compRepeatOrCollect): Really maintain proper scope for loop variables.
* interp/compiler.boot (eltModemapFilter): Highlight faulty selector.
(seteltModemapFilter): Likewise.
* interp/c-util.boot (stackMessage): Don't build message if there
is no argument for substitution.
* algebra/aggcat.spad.pamphlet (#$UnaryRecursiveAggregate):
Declare free loop variable.
(cycleEntry$UnaryRecursiveAggregate): Likewise.
(cycleLength): Likewise.
(merge$OneDimensionalArrayAggregate): Likewise.
(delete$OneDimensionalArrayAggregate): Likewise.
(position$ListAggregate): Likewise.
* algebra/array1.spad.pamphlet (merge!$IndexedFlexibleArray): Likewise.
* algebra/combfunc.spad.pamphlet (K2fact$CombinatorialFunction):
Likewise.
* algebra/curve.spad.pamphlet
(nonSingularModel$FunctionFieldCategory): Likewise.
* algebra/dpolcat.spad.pamphlet
(differentiate$DifferentialPolynomialCategory): Likewise.
* algebra/efstruc.spad.pamphlet
(validExponential$ElementaryFunctionStructurePackage): Likewise.
(ker2explogs$InnerTrigonometricManipulations): Likewise.
(complexNormalize$TrigonometricManipulations): Likewise.
Diffstat (limited to 'src/interp/iterator.boot')
-rw-r--r-- | src/interp/iterator.boot | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/interp/iterator.boot b/src/interp/iterator.boot index d62f4939..19ead302 100644 --- a/src/interp/iterator.boot +++ b/src/interp/iterator.boot @@ -45,10 +45,11 @@ compReduce1(form is ["REDUCE",op,.,collectForm],m,e,$formalArgList) == if STRINGP op then op:= INTERN op ^MEMQ(collectOp,'(COLLECT COLLECTV COLLECTVEC)) => systemError ["illegal reduction form:",form] - $sideEffectsList: local - $until: local - $initList: local - $endTestList: local + $sideEffectsList: local := nil + $until: local := nil + $initList: local := nil + $endTestList: local := nil + oldEnv := e $e:= e itl:= [([.,$e]:= compIterator(x,$e) or return "failed").(0) for x in itl] itl="failed" => return nil @@ -73,7 +74,7 @@ compReduce1(form is ["REDUCE",op,.,collectForm],m,e,$formalArgList) == if $until then [untilCode,.,e]:= comp($until,$Boolean,e) finalCode:= substitute(["UNTIL",untilCode],'$until,finalCode) - [finalCode,m,e] + [finalCode,m,oldEnv] ++ returns the identity element of the `reduction' operation `x' ++ over a list -- a monoid homomorphism. @@ -93,6 +94,7 @@ compRepeatOrCollect(form,m,e) == ,e) where fn(form,$exitModeStack,$leaveLevelStack,$formalArgList,e) == $until: local + oldEnv := e [repeatOrCollect,:itl,body]:= form itl':= [([x',e]:= compIterator(x,e) or return "failed"; x') for x in itl] @@ -135,7 +137,7 @@ compRepeatOrCollect(form,m,e) == T := coerceExit([form',m'',e'],targetMode) or return nil -- iterator variables and other variables declared in -- in a loop are local to the loop. - [T.expr,T.mode,e] + [T.expr,T.mode,oldEnv] --constructByModemap([x,source,e],target) == -- u:= @@ -213,7 +215,7 @@ compIterator(it,e) == it is ["WHILE",p] => [p',m,e]:= comp(p,$Boolean,e) or return - stackMessage('"WHILE operand: %1 is not Boolean valued",[p]) + stackMessage('"WHILE operand: %1b is not Boolean valued",[p]) [["WHILE",p'],e] it is ["UNTIL",p] => ($until:= p; ['$until,e]) it is ["|",x] => |