public static void PushVar(IntPtr ptr, object o) { if (o == null) { LuaNativeMethods.lua_pushnil(ptr); return; } Type t = o.GetType(); LuaState.PushVarDelegate push; LuaState ls = LuaState.Get(ptr); if (ls.TryGetTypePusher(t, out push)) { push(ptr, o); } else if (t.IsEnum) { PushEnum(ptr, Convert.ToInt32(o)); } else if (t.IsArray) { PushObject(ptr, (Array)o); } else { PushObject(ptr, o); } }