Mercurial Hosting > luan
comparison src/luan/interp/NumericForStmt.java @ 32:c3eab5a3ce3c
implement closures
git-svn-id: https://luan-java.googlecode.com/svn/trunk@33 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 14 Dec 2012 05:40:35 +0000 |
parents | 5cf15507d77e |
children | e3624b7cd603 |
comparison
equal
deleted
inserted
replaced
31:5cf15507d77e | 32:c3eab5a3ce3c |
---|---|
22 | 22 |
23 @Override public void eval(LuaStateImpl lua) throws LuaException { | 23 @Override public void eval(LuaStateImpl lua) throws LuaException { |
24 double v = Lua.checkNumber( fromExpr.eval(lua) ).value(); | 24 double v = Lua.checkNumber( fromExpr.eval(lua) ).value(); |
25 double limit = Lua.checkNumber( toExpr.eval(lua) ).value(); | 25 double limit = Lua.checkNumber( toExpr.eval(lua) ).value(); |
26 double step = Lua.checkNumber( stepExpr.eval(lua) ).value(); | 26 double step = Lua.checkNumber( stepExpr.eval(lua) ).value(); |
27 Object[] stack = lua.stack(); | |
28 try { | 27 try { |
29 while( step > 0.0 && v <= limit || step < 0.0 && v >= limit ) { | 28 while( step > 0.0 && v <= limit || step < 0.0 && v >= limit ) { |
30 stack[iVar] = new LuaNumber(v); | 29 lua.stackSet( iVar, new LuaNumber(v) ); |
31 block.eval(lua); | 30 block.eval(lua); |
32 v += step; | 31 v += step; |
33 } | 32 } |
34 } catch(BreakException e) { | 33 } catch(BreakException e) { |
35 } finally { | 34 } finally { |
36 stack[iVar] = null; | 35 lua.stackClear(iVar,iVar+1); |
37 } | 36 } |
38 } | 37 } |
39 | 38 |
40 } | 39 } |