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