public static object Get(lua_StatePtr L, int N, Type T) { N = GetActualStackIndex(L, N); if (LuaToNetMarshals.ContainsKey(T)) { return(LuaToNetMarshals[T](L, N)); } else { foreach (var KV in LuaToNetMarshals) { if (KV.Key.IsAssignableFrom(T)) { try { return(KV.Value(L, N)); } catch (NotImplementedException) { continue; } } } } throw new Exception("Unsupported Lua marshal type " + T); }
public static int Push(lua_StatePtr L, object Ret) { Type T = typeof(object); if (Ret != null) { T = Ret.GetType(); } if (T.IsArray) { Array Array = (Array)Ret; int i = 1; Lua.lua_createtable(L, Array.Length, 0); foreach (var Obj in Array) { Push(L, Obj); Lua.lua_rawseti(L, -2, i++); } return(1); } else if (NetToLuaMarshals.ContainsKey(T)) { return(NetToLuaMarshals[T](L, Ret)); } else { foreach (var KV in NetToLuaMarshals) { if (KV.Key.IsAssignableFrom(T)) { try { return(KV.Value(L, Ret)); } catch (NotImplementedException) { continue; } } } } throw new Exception("Unsupported Lua marshal type " + T); }