Mercurial Hosting > luan
comparison core/src/luan/impl/ForStmt.java @ 576:4723d22062ce
remove LuanBit
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 13 Jul 2015 20:38:26 -0600 |
parents | 55f9f74f1e55 |
children | d7a85fbe15f1 |
comparison
equal
deleted
inserted
replaced
575:7c3ad6db8ac3 | 576:4723d22062ce |
---|---|
2 | 2 |
3 import luan.Luan; | 3 import luan.Luan; |
4 import luan.LuanException; | 4 import luan.LuanException; |
5 import luan.LuanFunction; | 5 import luan.LuanFunction; |
6 import luan.LuanElement; | 6 import luan.LuanElement; |
7 import luan.LuanBit; | |
8 | 7 |
9 | 8 |
10 final class ForStmt extends CodeImpl implements Stmt { | 9 final class ForStmt extends CodeImpl implements Stmt { |
11 private final int iVars; | 10 private final int iVars; |
12 private final int nVars; | 11 private final int nVars; |
20 this.iterExpr = iterExpr; | 19 this.iterExpr = iterExpr; |
21 this.block = block; | 20 this.block = block; |
22 } | 21 } |
23 | 22 |
24 @Override public void eval(LuanStateImpl luan) throws LuanException { | 23 @Override public void eval(LuanStateImpl luan) throws LuanException { |
25 LuanBit bit = luan.bit(iterExpr.el()); | 24 luan.push( iterExpr.el(), iterExpr.el().text() ); |
26 LuanFunction iter = bit.checkFunction( iterExpr.eval(luan) ); | |
27 String name = iterExpr.el().text(); | |
28 try { | 25 try { |
26 LuanFunction iter = luan.checkFunction( iterExpr.eval(luan) ); | |
27 String name = iterExpr.el().text(); | |
29 while(true) { | 28 while(true) { |
30 Object vals = bit.call(iter,name,LuanFunction.NOTHING); | 29 Object vals = iter.call(luan); |
31 if( vals==null ) | 30 if( vals==null ) |
32 break; | 31 break; |
33 if( vals instanceof Object[] ) { | 32 if( vals instanceof Object[] ) { |
34 Object[] a = (Object[])vals; | 33 Object[] a = (Object[])vals; |
35 if( a.length==0 || a[0]==null ) | 34 if( a.length==0 || a[0]==null ) |
46 block.eval(luan); | 45 block.eval(luan); |
47 } | 46 } |
48 } catch(BreakException e) { | 47 } catch(BreakException e) { |
49 } finally { | 48 } finally { |
50 luan.stackClear(iVars,iVars+nVars); | 49 luan.stackClear(iVars,iVars+nVars); |
50 luan.pop(); | |
51 } | 51 } |
52 } | 52 } |
53 | 53 |
54 } | 54 } |