package ethanjones.cubes.core.lua; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; public class ReadOnlyLuaTable extends LuaTable { public ReadOnlyLuaTable(LuaValue table) { presize(table.length(), 0); for (Varargs n = table.next(LuaValue.NIL); !n.arg1().isnil(); n = table .next(n.arg1())) { LuaValue key = n.arg1(); LuaValue value = n.arg(2); super.rawset(key, value.istable() ? new ReadOnlyLuaTable(value) : value); } } public LuaValue setmetatable(LuaValue metatable) { return error("table is read-only"); } public void set(int key, LuaValue value) { error("table is read-only"); } public void rawset(int key, LuaValue value) { error("table is read-only"); } public void rawset(LuaValue key, LuaValue value) { error("table is read-only"); } public LuaValue remove(int pos) { return error("table is read-only"); } }