private LuaDotNetObjectProxy(lua_State L, object o, Dictionary<object,LuaDotNetObjectProxy> proxied,
Dictionary<IntPtr,LuaDotNetObjectProxy> proxiedByUserdata)
{
this.proxied = proxied;
this.proxiedByUserdata = proxiedByUserdata;
this.proxy_for = o;
proxy_type = o.GetType();
userdata = InvokeLua.lua_newuserdata(L, (UIntPtr)1);
proxied[proxy_for] = this;
proxiedByUserdata[userdata] = this;
InvokeLua.lua_pushlightuserdata(L, userdata);
InvokeLua.lua_pushvalue(L, -2);
InvokeLua.lua_rawset(L, InvokeLua.LUA_REGISTRYINDEX);
InvokeLua.lua_newtable(L);
InvokeLua.lua_pushcfunction(L, __Index);
InvokeLua.lua_setfield(L, -2, "__index");
InvokeLua.lua_pushcfunction(L, __ToString);
InvokeLua.lua_setfield(L, -2, "__tostring");
InvokeLua.lua_setmetatable(L, -2);
}