ecere/containers: Now clearing container elements on deserialization
[sdk] / compiler / bootstrap / ecere / bootstrap / Container.c
index 5343006..899b901 100644 (file)
@@ -882,12 +882,18 @@ struct __ecereNameSpace__ecere__com__Instance * container = __ecereNameSpace__ec
 unsigned int count, c;
 struct __ecereNameSpace__ecere__com__Class * Dclass = class->templateArgs[2].__anon1.__anon1.dataTypeClass;
 uint64 data;
+unsigned int clear = 1;
 
 __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get(channel, __ecereClass_uint, (void *)&count);
 if(Dclass->type == 1)
-data = (uint64)(uintptr_t)(__ecereNameSpace__ecere__com__eSystem_New(sizeof(unsigned char) * (Dclass->structSize)));
+{
+data = (uint64)(uintptr_t)(__ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (Dclass->structSize)));
+clear = 0;
+}
 for(c = 0; c < count; c++)
 {
+if(clear)
+data = (uint64)0;
 ((void (*)(void *, void *, void *))(void *)Dclass->_vTbl[__ecereVMethodID_class_OnUnserialize])(Dclass, (Dclass->type == 1) ? (void *)(uintptr_t)data : ((char *)&data + __ENDIAN_PAD(class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)), channel);
 ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = container;