private int enumFromInt(IntPtr luaState)
{
Type t = typeOf(luaState,1);
if (t == null || ! t.IsEnum) {
return pushError(luaState,"not an enum");
}
object res = null;
LuaTypes lt = LuaDLL.lua_type(luaState,2);
if (lt == LuaTypes.LUA_TNUMBER) {
int ival = (int)LuaDLL.lua_tonumber(luaState,2);
res = Enum.ToObject(t,ival);
} else
if (lt == LuaTypes.LUA_TSTRING) {
string sflags = LuaDLL.lua_tostring(luaState,2);
string err = null;
try {
res = Enum.Parse(t,sflags);
} catch (ArgumentException e) {
err = e.Message;
}
if (err != null) {
return pushError(luaState,err);
}
} else {
return pushError(luaState,"second argument must be a integer or a string");
}
pushObject(luaState,res,"luaNet_metatable");
return 1;
}