From 2c0000d5169cacf950d06637ada1a371cf382896 Mon Sep 17 00:00:00 2001 From: Benoit Germain <bnt.germain@gmail.com> Date: Tue, 8 Feb 2022 10:39:48 +0100 Subject: __lanesclone is now called only once with 3 parameters dest, source, size -> BREAKS CUSTOM DEEP USERDATA API --- deep_test/deep_test.c | 13 ++++--------- deep_test/deep_test.vcxproj.user | 2 +- deep_test/deeptest.lua | 24 ++++++++++++++++-------- 3 files changed, 21 insertions(+), 18 deletions(-) (limited to 'deep_test') diff --git a/deep_test/deep_test.c b/deep_test/deep_test.c index a725902..cb89741 100644 --- a/deep_test/deep_test.c +++ b/deep_test/deep_test.c @@ -1,5 +1,6 @@ #include <malloc.h> #include <memory.h> +#include <assert.h> #include "lua.h" #include "lualib.h" @@ -196,18 +197,12 @@ static int clonable_lanesclone( lua_State* L) { switch( lua_gettop( L)) { - case 1: - { - // in case we need it to compute the amount of memory we need - struct s_MyClonableUserdata* self = lua_touserdata( L, 1); - lua_pushinteger( L, sizeof( struct s_MyClonableUserdata)); - } - return 1; - - case 2: + case 3: { struct s_MyClonableUserdata* self = lua_touserdata( L, 1); struct s_MyClonableUserdata* from = lua_touserdata( L, 2); + size_t len = lua_tointeger( L, 3); + assert( len == sizeof(struct s_MyClonableUserdata)); *self = *from; } return 0; diff --git a/deep_test/deep_test.vcxproj.user b/deep_test/deep_test.vcxproj.user index c5d6237..6ffc0ba 100644 --- a/deep_test/deep_test.vcxproj.user +++ b/deep_test/deep_test.vcxproj.user @@ -13,7 +13,7 @@ <LocalDebuggerWorkingDirectory>D:\Boulot\anubis\Lua\bindings\Lanes\lanes\deep_test\</LocalDebuggerWorkingDirectory> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug 5.4|x64'"> - <LocalDebuggerCommand>D:\Boulot\anubis\Lua\framework\lua53.exe</LocalDebuggerCommand> + <LocalDebuggerCommand>D:\Boulot\anubis\Lua\framework\lua54.exe</LocalDebuggerCommand> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <LocalDebuggerCommandArguments>-i deeptest.lua</LocalDebuggerCommandArguments> <LocalDebuggerWorkingDirectory>D:\Boulot\anubis\Lua\bindings\Lanes\lanes\deep_test\</LocalDebuggerWorkingDirectory> diff --git a/deep_test/deeptest.lua b/deep_test/deeptest.lua index 3c89c3d..cbd08de 100644 --- a/deep_test/deeptest.lua +++ b/deep_test/deeptest.lua @@ -6,7 +6,8 @@ local dt = lanes.require "deep_test" local test_deep = true local test_clonable = true -local test_uvtype = "function" +local test_uvtype = "string" +local nupvals = _VERSION == "Lua 5.4" and 2 or 1 local makeUserValue = function( obj_) if test_uvtype == "string" then @@ -21,14 +22,17 @@ local makeUserValue = function( obj_) end local printDeep = function( prefix_, obj_, t_) - local uservalue = obj_:getuv( 1) - print( prefix_) - print ( obj_, uservalue, type( uservalue) == "function" and uservalue() or "") + print( prefix_, obj_) + for uvi = 1, nupvals do + local uservalue = obj_:getuv( 1) + print ( "uv #" .. uvi, uservalue, type( uservalue) == "function" and uservalue() or "") + end if t_ then for k, v in pairs( t_) do print( k, v) end end + print() end local performTest = function( obj_) @@ -38,12 +42,14 @@ local performTest = function( obj_) -- lua 5.3 supports an arbitrary type uservalue obj_:setuv( 1, makeUserValue( obj_)) -- lua 5.4 supports multiple uservalues of arbitrary types - -- obj_:setuv( 2, "ENDUV") + if nupvals > 1 then + obj_:setuv( 2, "ENDUV") + end local t = { ["key"] = obj_, - -- [obj_] = "val" + [obj_] = "val" -- this one won't transfer because we don't support full uservalue as keys } -- read back the contents of the object @@ -76,11 +82,13 @@ local performTest = function( obj_) end if test_deep then + print "================================================================" print "DEEP" - performTest( dt.new_deep()) + performTest( dt.new_deep(nupvals)) end if test_clonable then + print "================================================================" print "CLONABLE" - performTest( dt.new_clonable()) + performTest( dt.new_clonable(nupvals)) end -- cgit v1.2.3-55-g6feb