ecere/com/instance: Fixed crashes on Ecere classes templatized in other modules
authorJerome St-Louis <jerome@ecere.com>
Tue, 16 Jun 2015 06:54:09 +0000 (02:54 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 15 Oct 2015 00:19:47 +0000 (20:19 -0400)
compiler/libec/src/freeAst.ec
ecere/src/com/instance.ec

index 5545707..a9fc0cc 100644 (file)
@@ -1243,6 +1243,8 @@ void FreeModuleData(Module module)
       Method method;
       ClassTemplateParameter param;
 
+      if(_class.templateClass) continue;
+
       if(_class.dataType)
       {
          FreeType(_class.dataType);
index b80b3fa..86124f1 100644 (file)
@@ -2991,7 +2991,10 @@ static void FreeTemplate(Class template)
       template.derivatives.Delete(deriv);
    }
 
-   _free(template);
+   if(template.module)
+      template.module.classes.Delete(template);
+   else
+      _free(template);
 }
 
 static void FreeTemplates(Class _class)
@@ -3406,6 +3409,12 @@ public dllexport Class eSystem_FindClass(Module module, const char * name)
                templatedClass.numParams = 0;
                templatedClass.derivatives = { };
                templatedClass.templatized = { };
+               templatedClass.module = module;
+               templatedClass.count = 0; // TOCHECK: Keeping track of individual templatized classes?
+               templatedClass.prev = null;
+               templatedClass.next = null;
+
+               module.classes.Add(templatedClass);
 
                ComputeClassParameters(templatedClass, templateParams, module);