X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ecere%2Fsrc%2Fcom%2Fcontainers%2FContainer.ec;fp=ecere%2Fsrc%2Fcom%2Fcontainers%2FContainer.ec;h=1d32824da65297d69ea8eb549b1bcd38505a9fe3;hb=1fe01ced1978ecd046accfc810ac6a2735942829;hp=5ffdd75a2aeda2a71ca5ef44ec4763272296086c;hpb=22f4910c35cbe3549e33b75a90399a7fec92de12;p=sdk diff --git a/ecere/src/com/containers/Container.ec b/ecere/src/com/containers/Container.ec index 5ffdd75..1d32824 100644 --- a/ecere/src/com/containers/Container.ec +++ b/ecere/src/com/containers/Container.ec @@ -167,7 +167,7 @@ public: { IteratorPointer i; Class Dclass = class(D); - if((Dclass.type == systemClass || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass)) + if(((Dclass.type == systemClass && !Dclass.byValueSystemClass) || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass)) { for(i = GetFirst(); i; i = GetNext(i)) { @@ -231,7 +231,7 @@ public: itemString[0] = '\0'; result = ((char *(*)(void *, void *, char *, void *, bool *))(void *)Dclass._vTbl[__ecereVMethodID_class_OnGetString])(Dclass, - (Dclass.type == systemClass || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, itemString, null, null); + ((Dclass.type == systemClass && !Dclass.byValueSystemClass) || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, itemString, null, null); if(!first) strcat(tempString, ", "); strcat(tempString, result); @@ -259,13 +259,15 @@ public: uint count = GetCount(); IteratorPointer i; Class Dclass = class(D); + bool isNormalClass = Dclass.type == normalClass; channel.Put(count); for(i = GetFirst(); i; i = GetNext(i)) { D data = GetData(i); - ((void (*)(void *, void *, void *))(void *)Dclass._vTbl[__ecereVMethodID_class_OnSerialize])(Dclass, - (Dclass.type == systemClass || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, channel); + Class Eclass = isNormalClass ? ((Instance)data)._class : Dclass; + ((void (*)(void *, void *, void *))(void *)Eclass._vTbl[__ecereVMethodID_class_OnSerialize])(Eclass, + ((Dclass.type == systemClass && !Dclass.byValueSystemClass) || Dclass.type == bitClass || Dclass.type == enumClass || Dclass.type == unitClass) ? &data : (void *)data, channel); } }