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 }