compiler/ecs: Deleting module instances in reverse order as creation within each...
authorJerome St-Louis <jerome@ecere.com>
Wed, 6 Aug 2014 23:03:32 +0000 (19:03 -0400)
committerJerome St-Louis <jerome@ecere.com>
Wed, 6 Aug 2014 23:03:32 +0000 (19:03 -0400)
- To follow up with recent instance deletion following reverse module orders
 (2b769cb3bf7bd4ffee5b0ed6c9b057b12aa6c915), now also reversing order within one module.
- compiler/ecp: null crash fix

compiler/bootstrap/ecp/bootstrap/ecp.c
compiler/bootstrap/ecs/bootstrap/ecs.c
compiler/bootstrap/libec/bootstrap/ec.main.c
compiler/ecp/ecp.ec
compiler/ecs/ecs.ec

index 7012b1c..2b5ad47 100644 (file)
@@ -2090,8 +2090,11 @@ PrintType(dataType, dataTypeString, 0, 1);
 {
 struct __ecereNameSpace__ecere__com__BitMember * member = __ecereNameSpace__ecere__com__eClass_AddBitMember(regClass, declId->string, dataTypeString, 0, 0, def->memberAccess);
 
+if(member)
+{
 member->size = bitSize;
 member->pos = bitPos;
+}
 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)member;
 }
 if(dataMember)
index c9a38dd..4aeee15 100644 (file)
@@ -2429,7 +2429,7 @@ unsigned int destroyI18n = 0;
 
 if(modules.count)
 {
-for(defModule = modules.first; defModule; defModule = defModule->next)
+for(defModule = modules.last; defModule; defModule = defModule->prev)
 if(defModule->globalInstance)
 {
 char moduleName[1024];
index d7321ee..f872ca6 100644 (file)
@@ -500,9 +500,9 @@ unsigned int __ecereDll_Unload_ec(struct __ecereNameSpace__ecere__com__Instance
 {
 if(__currentModule == module)
 {
-__ecereDestroyModuleInstances_ast();
-__ecereDestroyModuleInstances_loadSymbols();
 __ecereDestroyModuleInstances_pass1();
+__ecereDestroyModuleInstances_loadSymbols();
+__ecereDestroyModuleInstances_ast();
 __ecereNameSpace__ecere__UnloadTranslatedStrings("ec");
 }
 __ecereUnregisterModule_ast(module);
index 3bc0a3a..51e22fe 100644 (file)
@@ -206,8 +206,11 @@ static void AddDefinitions(ClassDefine classDefine, DataMemberDefine parentMembe
                            //if(!eClass_FindDataMember(regClass, declId.string))
                            {
                               BitMember member = eClass_AddBitMember(regClass, declId.string, dataTypeString, 0, 0, def.memberAccess);
-                              member.size = bitSize;
-                              member.pos = bitPos;
+                              if(member)
+                              {
+                                 member.size = bitSize;
+                                 member.pos = bitPos;
+                              }
                               dataMember = (DataMember)member;
                            }
                            if(dataMember)
index b5fbfc7..7ccba43 100644 (file)
@@ -716,7 +716,7 @@ static void WriteMain(const char * fileName)
          bool destroyI18n = false;
          if(::modules.count)
          {
-            for(defModule = ::modules.first; defModule; defModule = defModule.next)
+            for(defModule = ::modules.last; defModule; defModule = defModule.prev)
                if(defModule.globalInstance)
                {
                   char moduleName[1024];