public static void PushValue(lua_State L, object o, Dictionary<object, LuaDotNetObjectProxy> proxied, Dictionary<IntPtr, LuaDotNetObjectProxy> proxiedByUserdata)
{
if (o == null)
{
InvokeLua.lua_pushnil(L);
return;
}
if (o is char)
{
InvokeLua.lua_pushstring(L, new String((char)o, 1));
return;
}
if (o is string)
{
InvokeLua.lua_pushstring(L, (string)o);
return;
}
if (o is Byte || o is SByte || o is Int16 || o is UInt16 || o is Int32 || o is UInt32
|| o is Int64 || o is UInt64 || o is Single || o is Double || o is Decimal)
{
InvokeLua.lua_pushnumber(L, (double)o);
return;
}
if (o is bool)
{
InvokeLua.lua_pushboolean(L, (bool)o);
return;
}
if (o is byte[])
{
InvokeLua.lua_pushstring(L, (byte[])o);
return;
}
LuaDotNetObjectProxy proxy;
if (proxied.TryGetValue(o, out proxy))
{
InvokeLua.lua_pushlightuserdata(L, proxy.userdata);
InvokeLua.lua_rawget(L, InvokeLua.LUA_REGISTRYINDEX);
}
else
{
new LuaDotNetObjectProxy(L, o, proxied, proxiedByUserdata);
}
}