@@ -292,61 +292,37 @@ LuaError *LuaState::pushVariant(lua_State *state, Variant var) {
292292 }
293293 case Variant::Type::VECTOR2 : {
294294 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
295- #ifndef LAPI_GDEXTENSION
296- *userdata = var;
297- #else
298- memmove (userdata, (void *)&var, sizeof (Variant));
299- #endif
295+ memnew_placement (userdata, Variant (var));
300296 luaL_setmetatable (state, " mt_Vector2" );
301297 break ;
302298 }
303299 case Variant::Type::VECTOR3 : {
304300 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
305- #ifndef LAPI_GDEXTENSION
306- *userdata = var;
307- #else
308- memmove (userdata, (void *)&var, sizeof (Variant));
309- #endif
301+ memnew_placement (userdata, Variant (var));
310302 luaL_setmetatable (state, " mt_Vector3" );
311303 break ;
312304 }
313305 case Variant::Type::COLOR : {
314306 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
315- #ifndef LAPI_GDEXTENSION
316- *userdata = var;
317- #else
318- memmove (userdata, (void *)&var, sizeof (Variant));
319- #endif
307+ memnew_placement (userdata, Variant (var));
320308 luaL_setmetatable (state, " mt_Color" );
321309 break ;
322310 }
323311 case Variant::Type::RECT2 : {
324312 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
325- #ifndef LAPI_GDEXTENSION
326- *userdata = var;
327- #else
328- memmove (userdata, (void *)&var, sizeof (Variant));
329- #endif
313+ memnew_placement (userdata, Variant (var));
330314 luaL_setmetatable (state, " mt_Rect2" );
331315 break ;
332316 }
333317 case Variant::Type::PLANE : {
334318 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
335- #ifndef LAPI_GDEXTENSION
336- *userdata = var;
337- #else
338- memmove (userdata, (void *)&var, sizeof (Variant));
339- #endif
319+ memnew_placement (userdata, Variant (var));
340320 luaL_setmetatable (state, " mt_Plane" );
341321 break ;
342322 }
343323 case Variant::Type::SIGNAL : {
344324 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
345- #ifndef LAPI_GDEXTENSION
346- *userdata = var;
347- #else
348- memmove (userdata, (void *)&var, sizeof (Variant));
349- #endif
325+ memnew_placement (userdata, Variant (var));
350326 luaL_setmetatable (state, " mt_Signal" );
351327 break ;
352328 }
@@ -393,11 +369,6 @@ LuaError *LuaState::pushVariant(lua_State *state, Variant var) {
393369 break ;
394370 }
395371
396- // If the type being pushed is a RefCounted, increase its refcount.
397- if (Ref<RefCounted> ref = Object::cast_to<RefCounted>(var.operator Object *()); ref.is_valid ()) {
398- ref->reference ();
399- }
400-
401372 // If the type being pushed is a LuaCallableExtra. use mt_CallableExtra instead
402373#ifndef LAPI_GDEXTENSION
403374 if (Ref<LuaCallableExtra> func = Object::cast_to<LuaCallableExtra>(var.operator Object *()); func.is_valid ()) {
@@ -406,13 +377,13 @@ LuaError *LuaState::pushVariant(lua_State *state, Variant var) {
406377 if (Ref<LuaCallableExtra> func = dynamic_cast <LuaCallableExtra *>(var.operator Object *()); func.is_valid ()) {
407378#endif
408379 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
409- memmove (userdata, ( void *)& var, sizeof (Variant ));
380+ memnew_placement (userdata, Variant ( var));
410381 luaL_setmetatable (state, " mt_CallableExtra" );
411382 break ;
412383 }
413384
414385 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
415- memmove (userdata, ( void *)& var, sizeof (Variant ));
386+ memnew_placement (userdata, Variant ( var));
416387 luaL_setmetatable (state, " mt_Object" );
417388 break ;
418389 }
@@ -425,7 +396,7 @@ LuaError *LuaState::pushVariant(lua_State *state, Variant var) {
425396 }
426397
427398 if (callable.is_custom ()) {
428- // If the type being pushed is a lua function ref, push the ref instead.
399+ // If the type being pushed is a lua function ref, push the ref instead.
429400#ifndef LAPI_GDEXTENSION
430401 LuaAPI *callObj = Object::cast_to<LuaAPI>(callable.get_object ());
431402#else
@@ -439,6 +410,7 @@ LuaError *LuaState::pushVariant(lua_State *state, Variant var) {
439410 }
440411 }
441412
413+ // A work around to preserve ref count of CallableCustoms
442414 Ref<LuaCallableExtra> callableCustom;
443415 callableCustom.instantiate ();
444416 callableCustom->setInfo (callable, 0 , false , false );
@@ -447,7 +419,7 @@ LuaError *LuaState::pushVariant(lua_State *state, Variant var) {
447419 }
448420
449421 Variant *userdata = (Variant *)lua_newuserdata (state, sizeof (Variant));
450- memmove (userdata, ( void *)& var, sizeof (Variant ));
422+ memnew_placement (userdata, Variant ( var));
451423 luaL_setmetatable (state, " mt_Callable" );
452424 break ;
453425 }
0 commit comments