public static LuaValue Read(IntPtr L, int n)
{
var type = Lua.lua_type(L, n);
switch (type) {
case Lua.LUA_TNUMBER:
return new LuaNumber(Lua.lua_tonumber(L, n));
case Lua.LUA_TSTRING:
return new LuaString(Lua.lua_tostring(L, n));
case Lua.LUA_TBOOLEAN:
return new LuaBoolean(Lua.lua_toboolean(L, n));
case Lua.LUA_TFUNCTION:
return new LuaFunction(Lua.lua_tocfunction(L, n));
case Lua.LUA_TTABLE:
return new LuaTable(L, n);
case Lua.LUA_TNIL:
return new LuaNil();
case Lua.LUA_TNONE:
return new LuaNoValue();
case Lua.LUA_TLIGHTUSERDATA:
return new LuaLightUserData();
case Lua.LUA_TTHREAD:
return new LuaThread();
case Lua.LUA_TUSERDATA:
return new LuaUserData();
default:
throw new Exception("type of lua value not recognized");
}
}