diff src/luan/interp/SetStmt.java @ 4:24fd6381caca

add to interp git-svn-id: https://luan-java.googlecode.com/svn/trunk@5 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 18 Nov 2012 04:18:15 +0000
parents
children b7d7069fee58
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/luan/interp/SetStmt.java	Sun Nov 18 04:18:15 2012 +0000
@@ -0,0 +1,45 @@
+package luan.interp;
+
+import java.util.List;
+import luan.Lua;
+import luan.LuaState;
+import luan.LuaException;
+import luan.LuaTable;
+
+
+final class SetStmt extends Stmt {
+
+	static class Var {
+		final Expr table;
+		final Expr key;
+
+		Var(Expr table,Expr key) {
+			this.table = table;
+			this.key = key;
+		}
+	}
+
+	private final Var[] vars;
+	private final Values values;
+
+	SetStmt(Var[] vars,Values values) {
+		this.vars = vars;
+		this.values = values;
+	}
+
+	@Override void eval(LuaState lua) throws LuaException {
+		List vals = values.eval(lua);
+		int n = vals.size();
+		for( int i=0; i<vars.length; i++ ) {
+			Var var = vars[i];
+			Object t = var.table.eval(lua);
+			if( !(t instanceof LuaTable) )
+				throw new LuaException( "attempt to index a " + Lua.type(t) + " value" );
+			LuaTable tbl = (LuaTable)t;
+			Object key = var.key.eval(lua);
+			Object val = i < n ? vals.get(i) : null;
+			tbl.set(key,val);
+		}
+	}
+
+}