Mercurial Hosting > luan
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; |