From 021491885ae107bb2bd6692c9b2caf4a2eafe069 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Wed, 17 Jun 2015 10:15:30 -0400 Subject: [PATCH] ecere/com/instance: Corrections to templatized classes fix - Tweaks for 0794ad9024bfa6eb45dbb912e8d26e85853885cb - Was causing link list mix ups and breaking builds --- compiler/bootstrap/ecere/bootstrap/instance.c | 4 ++++ ecere/src/com/instance.ec | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/bootstrap/ecere/bootstrap/instance.c b/compiler/bootstrap/ecere/bootstrap/instance.c index 79c2cf8..ddeae97 100644 --- a/compiler/bootstrap/ecere/bootstrap/instance.c +++ b/compiler/bootstrap/ecere/bootstrap/instance.c @@ -3677,6 +3677,7 @@ void __ecereNameSpace__ecere__com__eInstance_Evolve(struct __ecereNameSpace__ece if(_class && instancePtr && *instancePtr) { unsigned int wasApp = 0, wasGuiApp = 0; +struct __ecereNameSpace__ecere__com__Instance * oldInstance = *instancePtr; struct __ecereNameSpace__ecere__com__Instance * instance = (struct __ecereNameSpace__ecere__com__Instance *)__ecereNameSpace__ecere__com__eSystem_Renew(*instancePtr, sizeof(unsigned char) * (_class->structSize)); struct __ecereNameSpace__ecere__com__Class * fromClass = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)instance)->_class; @@ -3757,6 +3758,7 @@ for(templateLink = _class->templatized.first; templateLink; templateLink = templ { struct __ecereNameSpace__ecere__com__Class * template = templateLink->data; +if(template->module == oldInstance) template->module = _class->module; } } @@ -3765,12 +3767,14 @@ for(module = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)app for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->classes.first; _class; _class = _class->next) { struct __ecereNameSpace__ecere__sys__OldLink * templateLink; +struct __ecereNameSpace__ecere__com__Instance * oldModule = _class->module; _class->module = module; for(templateLink = _class->templatized.first; templateLink; templateLink = templateLink->next) { struct __ecereNameSpace__ecere__com__Class * template = templateLink->data; +if(template->module == oldModule) template->module = _class->module; } } diff --git a/ecere/src/com/instance.ec b/ecere/src/com/instance.ec index 7494ffa..5822739 100644 --- a/ecere/src/com/instance.ec +++ b/ecere/src/com/instance.ec @@ -4645,6 +4645,7 @@ public dllexport void eInstance_Evolve(Instance * instancePtr, Class _class) if(_class && instancePtr && *instancePtr) { bool wasApp = false, wasGuiApp = false; + Instance oldInstance = *instancePtr; Instance instance = (Instance)renew *instancePtr byte[_class.structSize]; Class fromClass = instance._class; *instancePtr = instance; @@ -4713,7 +4714,8 @@ public dllexport void eInstance_Evolve(Instance * instancePtr, Class _class) for(templateLink = _class.templatized.first; templateLink; templateLink = templateLink.next) { Class template = templateLink.data; - template.module = _class.module; + if(template.module == oldInstance) + template.module = _class.module; } } @@ -4722,11 +4724,13 @@ public dllexport void eInstance_Evolve(Instance * instancePtr, Class _class) for(_class = module.classes.first; _class; _class = _class.next) { OldLink templateLink; + Module oldModule = _class.module; _class.module = module; for(templateLink = _class.templatized.first; templateLink; templateLink = templateLink.next) { Class template = templateLink.data; - template.module = _class.module; + if(template.module == oldModule) + template.module = _class.module; } } } -- 1.8.3.1