ecere/com/instance: Corrections to templatized classes fix
authorJerome St-Louis <jerome@ecere.com>
Wed, 17 Jun 2015 14:15:30 +0000 (10:15 -0400)
committerJerome St-Louis <jerome@ecere.com>
Wed, 17 Jun 2015 14:15:30 +0000 (10:15 -0400)
- Tweaks for 0794ad9024bfa6eb45dbb912e8d26e85853885cb
- Was causing link list mix ups and breaking builds

compiler/bootstrap/ecere/bootstrap/instance.c
ecere/src/com/instance.ec

index 79c2cf8..ddeae97 100644 (file)
@@ -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;
 }
 }
index 7494ffa..5822739 100644 (file)
@@ -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;
                }
             }
          }