From 0794ad9024bfa6eb45dbb912e8d26e85853885cb Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Tue, 16 Jun 2015 02:54:09 -0400 Subject: [PATCH] ecere/com/instance: Fixed crashes on Ecere classes templatized in other modules --- compiler/libec/src/freeAst.ec | 2 ++ ecere/src/com/instance.ec | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/libec/src/freeAst.ec b/compiler/libec/src/freeAst.ec index 5545707..a9fc0cc 100644 --- a/compiler/libec/src/freeAst.ec +++ b/compiler/libec/src/freeAst.ec @@ -1243,6 +1243,8 @@ void FreeModuleData(Module module) Method method; ClassTemplateParameter param; + if(_class.templateClass) continue; + if(_class.dataType) { FreeType(_class.dataType); diff --git a/ecere/src/com/instance.ec b/ecere/src/com/instance.ec index b80b3fa..86124f1 100644 --- a/ecere/src/com/instance.ec +++ b/ecere/src/com/instance.ec @@ -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); -- 1.8.3.1