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