comparison src/luan/interp/SetStmt.java @ 17:09d41f7490a8

add local variables git-svn-id: https://luan-java.googlecode.com/svn/trunk@18 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 30 Nov 2012 11:46:34 +0000
parents 3b22ffbdb83a
children a7c13c6017f7
comparison
equal deleted inserted replaced
16:2a30281ef47c 17:09d41f7490a8
1 package luan.interp; 1 package luan.interp;
2 2
3 import java.util.List;
4 import luan.Lua; 3 import luan.Lua;
5 import luan.LuaState; 4 import luan.LuaState;
6 import luan.LuaException; 5 import luan.LuaException;
7 import luan.LuaTable;
8 6
9 7
10 final class SetStmt implements Stmt { 8 final class SetStmt implements Stmt {
11 9 private final Settable[] vars;
12 static class Var {
13 final Expr table;
14 final Expr key;
15
16 Var(Expr table,Expr key) {
17 this.table = table;
18 this.key = key;
19 }
20 }
21
22 private final Var[] vars;
23 private final Expressions expressions; 10 private final Expressions expressions;
24 11
25 SetStmt(Var[] vars,Expressions expressions) { 12 SetStmt(Settable[] vars,Expressions expressions) {
26 this.vars = vars; 13 this.vars = vars;
27 this.expressions = expressions; 14 this.expressions = expressions;
28 } 15 }
29 16
30 @Override public void eval(LuaState lua) throws LuaException { 17 @Override public void eval(LuaState lua) throws LuaException {
31 final Object[] vals = expressions.eval(lua); 18 final Object[] vals = expressions.eval(lua);
32 for( int i=0; i<vars.length; i++ ) { 19 for( int i=0; i<vars.length; i++ ) {
33 Var var = vars[i]; 20 Settable var = vars[i];
34 Object t = var.table.eval(lua);
35 if( !(t instanceof LuaTable) )
36 throw new LuaException( "attempt to index a " + Lua.type(t) + " value" );
37 LuaTable tbl = (LuaTable)t;
38 Object key = var.key.eval(lua);
39 Object val = i < vals.length ? vals[i] : null; 21 Object val = i < vals.length ? vals[i] : null;
40 tbl.set(key,val); 22 var.set(lua,val);
41 } 23 }
42 } 24 }
43 25
44 } 26 }