comparison src/luan/interp/NumericForStmt.java @ 40:e3624b7cd603

implement stack trace git-svn-id: https://luan-java.googlecode.com/svn/trunk@41 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 21 Dec 2012 10:45:54 +0000
parents c3eab5a3ce3c
children 57054fa43189
comparison
equal deleted inserted replaced
39:e5bcb1eeafc1 40:e3624b7cd603
1 package luan.interp; 1 package luan.interp;
2 2
3 import luan.Lua; 3 import luan.Lua;
4 import luan.LuaNumber; 4 import luan.LuaNumber;
5 import luan.LuaException; 5 import luan.LuaException;
6 import luan.LuaSource;
6 7
7 8
8 final class NumericForStmt implements Stmt { 9 final class NumericForStmt extends CodeImpl implements Stmt {
9 private final int iVar; 10 private final int iVar;
10 private final Expr fromExpr; 11 private final Expr fromExpr;
11 private final Expr toExpr; 12 private final Expr toExpr;
12 private final Expr stepExpr; 13 private final Expr stepExpr;
13 private final Stmt block; 14 private final Stmt block;
14 15
15 NumericForStmt(int iVar,Expr fromExpr,Expr toExpr,Expr stepExpr,Stmt block) { 16 NumericForStmt(LuaSource.Element se,int iVar,Expr fromExpr,Expr toExpr,Expr stepExpr,Stmt block) {
17 super(se);
16 this.iVar = iVar; 18 this.iVar = iVar;
17 this.fromExpr = fromExpr; 19 this.fromExpr = fromExpr;
18 this.toExpr = toExpr; 20 this.toExpr = toExpr;
19 this.stepExpr = stepExpr; 21 this.stepExpr = stepExpr;
20 this.block = block; 22 this.block = block;
21 } 23 }
22 24
23 @Override public void eval(LuaStateImpl lua) throws LuaException { 25 @Override public void eval(LuaStateImpl lua) throws LuaException {
24 double v = Lua.checkNumber( fromExpr.eval(lua) ).value(); 26 double v = lua.checkNumber( se, fromExpr.eval(lua) ).value();
25 double limit = Lua.checkNumber( toExpr.eval(lua) ).value(); 27 double limit = lua.checkNumber( se, toExpr.eval(lua) ).value();
26 double step = Lua.checkNumber( stepExpr.eval(lua) ).value(); 28 double step = lua.checkNumber( se, stepExpr.eval(lua) ).value();
27 try { 29 try {
28 while( step > 0.0 && v <= limit || step < 0.0 && v >= limit ) { 30 while( step > 0.0 && v <= limit || step < 0.0 && v >= limit ) {
29 lua.stackSet( iVar, new LuaNumber(v) ); 31 lua.stackSet( iVar, new LuaNumber(v) );
30 block.eval(lua); 32 block.eval(lua);
31 v += step; 33 v += step;