basic:for is mutable, test with formut.bas

This commit is contained in:
minjaesong
2020-12-03 12:50:30 +09:00
parent b70e1db5bb
commit 1af45748de
2 changed files with 18 additions and 2 deletions

View File

@@ -323,8 +323,11 @@ let ForGen = function(s,e,t) {
// 0 + 1 <= 0 -> false
}
// mutableVar: the actual number stored into the FOR-Variable, because BASIC's FOR-Var is mutable af
// returns undefined if there is no next()
this.getNext = function() {
this.getNext = function(mutated) {
//if (mutated === undefined) throw "InternalError: parametre is missing";
if (mutated !== undefined) this.current = mutated;
this.current += this.step;
return this.hasNext() ? this.current : undefined;
}
@@ -731,7 +734,7 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length
var forVar = bStatus.vars["for var "+forVarname].bvLiteral;
if (forVar instanceof ForGen)
bStatus.vars[forVarname].bvLiteral = forVar.getNext();
bStatus.vars[forVarname].bvLiteral = forVar.getNext(bStatus.vars[forVarname].bvLiteral);
else
bStatus.vars[forVarname].bvLiteral = forVar.shift();

13
assets/formut.bas Normal file
View File

@@ -0,0 +1,13 @@
1 k=0
2 goto 100
20 k=1
30 a=10
40 return
100 for a=5 to 1 step -1
110 print a
120 if a==3 and k==0 then gosub 20
130 next
140 print "=="
150 print a
1000 rem expected output according to gw-basic:
1001 rem 5 4 3 9 8 7 6 5 4 3 2 1 == 0