From a42aa794352540b2391deaf32f6d9309b4caa2fa Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Wed, 2 Nov 2016 12:18:49 -0400 Subject: [PATCH] ecere/com/Map: Fixed unserializing Maps with struct Key/Value --- ecere/src/com/containers/Map.ec | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ecere/src/com/containers/Map.ec b/ecere/src/com/containers/Map.ec index 9aecc93..74330e3 100644 --- a/ecere/src/com/containers/Map.ec +++ b/ecere/src/com/containers/Map.ec @@ -325,12 +325,16 @@ public class Map : CustomAVLTree, I = MT, D = for(c = 0; c < count; c++) { MapNode destNode; - MT key = (KT)0; - D data = (D)0; + uint64 key = (Kclass.type == structClass) ? (uint64)(uintptr)new byte[Kclass.structSize] : 0; + uint64 data = (Dclass.type == structClass) ? (uint64)(uintptr)new byte[Dclass.structSize] : 0; ((void (*)(void *, void *, void *))(void *)Kclass._vTbl[__ecereVMethodID_class_OnUnserialize])(Kclass, &key, channel); - ((void (*)(void *, void *, void *))(void *)Dclass._vTbl[__ecereVMethodID_class_OnUnserialize])(Dclass, &data, channel); - destNode = (MapNode)container.GetAtPosition(key, true, null); - container.SetData(destNode, data); + ((void (*)(void *, void *, void *))(void *)Dclass._vTbl[__ecereVMethodID_class_OnUnserialize])(Dclass, (Dclass.type == structClass) ? (void *)data : &data, channel); + destNode = (MapNode)container.GetAtPosition((MT)key, true, null); + container.SetData(destNode, (V)data); + if(Kclass.type == structClass) + delete (void *)key; + if(Dclass.type == structClass) + delete (void *)data; } this = container; } -- 1.8.3.1