i18n: Fixed location of msgctxt in .pot files
[sdk] / compiler / bootstrap / ecs / bootstrap / ecs.c
index 19bc12b..588f1a6 100644 (file)
@@ -289,6 +289,7 @@ struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
+struct Expression * propCategory;
 };
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
@@ -1718,6 +1719,7 @@ else
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, " = 0");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ";\n\n");
 }
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      incref this;\n");
 for(param = method->dataType->params.first; param; param = param->next)
 {
 char type[1024] = "";
@@ -1772,6 +1774,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereBuff
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      }\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereBuffer.Free();\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      delete this;\n");
 if(method->dataType->returnType->kind != 0)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      return __ecereResult;\n");
@@ -1806,6 +1809,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 
 static void BindDCOMServer()
 {
+unsigned int mutexDeclared = 0x0;
 struct __ecereNameSpace__ecere__com__Class * _class;
 
 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)privateModule + 12)))->classes.first; _class; _class = _class->next)
@@ -1833,6 +1837,8 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "class DCOM%s : ecere
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "{\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   virtual void CallMethod(uint __ecereMethodID, SerialBuffer __ecereBuffer)\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   {\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      %s inst = (%s)instance;\n", _class->fullName, _class->fullName);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      incref inst;\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      switch(__ecereMethodID)\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      {\n");
 for(method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&_class->methods); method; method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)method)))
@@ -1967,6 +1973,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         }\n");
 }
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      }\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      delete inst;\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   }\n");
 for(vid = _class->base->vTblSize; vid < _class->vTblSize; vid++)
 {
@@ -1978,6 +1985,13 @@ if(method->type == 1 && method->_class == _class && method->vid == vid)
 break;
 if(method)
 {
+if(!mutexDeclared)
+{
+DeclareClass(FindClass("ecere::sys::Mutex"), "__ecereClass___ecereNameSpace__ecere__sys__Mutex");
+DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::sys::Mutex"), "Wait", privateModule), "__ecereMethod___ecereNameSpace__ecere__sys__Mutex_Wait");
+DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::sys::Mutex"), "Release", privateModule), "__ecereMethod___ecereNameSpace__ecere__sys__Mutex_Release");
+mutexDeclared = 0x1;
+}
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 if(!method->dataType)
 method->dataType = ProcessTypeString(method->dataTypeString, 0x0);
@@ -2022,6 +2036,8 @@ else
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, " = 0");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ";\n\n");
 }
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      incref __ecereObject;\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereMethod___ecereNameSpace__ecere__sys__Mutex_Wait(__ecereObject.mutex);\n");
 for(param = method->dataType->params.first; param; param = param->next)
 {
 char type[1024] = "";
@@ -2043,13 +2059,28 @@ DeclareClass(classSym, className);
 if(param->kind == 8 && !strcmp(param->_class->string, "String"))
 {
 DeclareClass(FindClass("StaticString"), "__ecereClass_StaticString");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.virtualsBuffer.Serialize((StaticString)%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.argsBuffer.Serialize((StaticString)%s);\n", param->name);
 }
 else
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.virtualsBuffer.Serialize(%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.argsBuffer.Serialize(%s);\n", param->name);
+}
+DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::net::DCOMServerObject"), "CallVirtualMethod", privateModule), "__ecereMethod___ecereNameSpace__ecere__net__DCOMServerObject_CallVirtualMethod");
+{
+unsigned int hasReturnValue = method->dataType->returnType->kind != 0;
+
+if(!hasReturnValue)
+{
+for(param = method->dataType->params.first; param; param = param->next)
+{
+if(param->kind == 8 && ((param->_class && param->_class->registered && param->_class->registered->type == 1) || !strcmp(param->_class->string, "String")) && !param->constant)
+{
+hasReturnValue = 0x1;
+break;
+}
+}
+}
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      if(__ecereObject.CallVirtualMethod(%d, %s))\n", vid - _class->base->vTblSize, hasReturnValue ? "true" : "false");
 }
-DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::net::DCOMServerObject"), "CallVirtualMethod", privateModule), "__ecereMethod___ecereNameSpace__ecere__net__DCOMServerObject_CallVirutalMethod");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      if(__ecereObject.CallVirtualMethod(%d))\n", vid - _class->base->vTblSize);
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      {\n");
 for(param = method->dataType->params.first; param; param = param->next)
 {
@@ -2058,10 +2089,10 @@ if(param->kind == 8 && ((param->_class && param->_class->registered && param->_c
 if(!strcmp(param->_class->string, "String"))
 {
 DeclareClass(FindClass("StaticString"), "__ecereClass_StaticString");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize((StaticString)%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize((StaticString)%s);\n", param->name);
 }
 else
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize(%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize(%s);\n", param->name);
 }
 }
 if(method->dataType->returnType->kind != 0)
@@ -2069,10 +2100,10 @@ if(method->dataType->returnType->kind != 0)
 if(method->dataType->returnType->kind == 8 && !strcmp(method->dataType->returnType->_class->string, "String"))
 {
 DeclareClass(FindClass("StaticString"), "__ecereClass_StaticString");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize((StaticString)__ecereResult);\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize((StaticString)__ecereResult);\n");
 }
 else
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize(__ecereResult);\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize(__ecereResult);\n");
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      }\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      else\n");
@@ -2084,7 +2115,9 @@ if(param->next)
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ", ");
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ");\n");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.virtualsBuffer.Free();\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.returnBuffer.Free();\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereMethod___ecereNameSpace__ecere__sys__Mutex_Release(__ecereObject.mutex);\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      delete __ecereObject;\n");
 if(method->dataType->returnType->kind != 0)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      return __ecereResult;\n");
@@ -2108,6 +2141,10 @@ extern void SetSymbolsDir(char *  s);
 
 extern int printf(char * , ...);
 
+extern char *  __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char *  string, char *  stringAndContext);
+
+extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
+
 extern char *  __ecereNameSpace__ecere__sys__GetExtension(char *  string, char *  output);
 
 extern void SetDefines(struct __ecereNameSpace__ecere__sys__OldList *  list);
@@ -2150,8 +2187,32 @@ extern void CheckDataRedefinitions(void);
 
 extern char *  __ecereNameSpace__ecere__sys__ChangeExtension(char *  string, char *  ext, char *  output);
 
+extern char *  strstr(char * , const char * );
+
+extern int strlen(const char * );
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ContextStringPair;
+
+struct ContextStringPair
+{
+char * string;
+char * context;
+};
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Iterator;
+
+struct __ecereNameSpace__ecere__com__Iterator
+{
+struct __ecereNameSpace__ecere__com__Instance * container;
+struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
+};
+
 extern void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module);
 
+extern unsigned int __ecereNameSpace__ecere__sys__MakeDir(char *  path);
+
+extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
+
 extern void FreeContext(struct Context * context);
 
 extern void FreeExcludedSymbols(struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols);
@@ -2170,7 +2231,9 @@ extern void FreeIncludeFiles(void);
 
 extern void FreeGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * globalDataList);
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Map_TPL_String__String_;
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Map_TPL_ContextStringPair__ecere__com__List_TPL_String___;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__List_TPL_String_;
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
 
@@ -2199,15 +2262,9 @@ void __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(struct __ecer
 
 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__MapIterator_map;
 
-unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 index, unsigned int create);
-
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Iterator;
+int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Add;
 
-struct __ecereNameSpace__ecere__com__Iterator
-{
-struct __ecereNameSpace__ecere__com__Instance * container;
-struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
-};
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 index, unsigned int create);
 
 uint64 __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(struct __ecereNameSpace__ecere__com__Iterator * this);
 
@@ -2215,8 +2272,24 @@ void __ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(struct __ecereN
 
 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__Iterator_data;
 
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Next();
+
+int __ecereVMethodID___ecereNameSpace__ecere__com__Container_RemoveAll;
+
 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Free;
 
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__CustomAVLTree;
+
+struct __ecereNameSpace__ecere__com__CustomAVLTree
+{
+struct __ecereNameSpace__ecere__com__AVLNode * root;
+int count;
+};
+
+uint64 __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_key(struct __ecereNameSpace__ecere__com__MapIterator * this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__MapIterator_key;
+
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (*  freeFn)(void * ));
 
 void __ecereMethod_SymbolgenApp_Main(struct __ecereNameSpace__ecere__com__Instance * this)
@@ -2284,7 +2357,7 @@ valid = 0x0;
 if(!output)
 valid = 0x0;
 if(!valid)
-printf("Syntax:\n   ecs [-t <target platform>] <input>[, <input>]* -o <output>\n");
+printf(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Syntax:\n   ecs [-t <target platform>] <input>[, <input>]* -o <output>\n", (((void *)0))));
 else
 {
 int c;
@@ -2307,8 +2380,7 @@ mainModule = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ModuleImpo
 SetMainModule(mainModule);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&_imports, mainModule);
 {
-struct __ecereNameSpace__ecere__com__Instance * potFile = (((void *)0));
-struct __ecereNameSpace__ecere__com__Instance * intlStrings = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__Map_TPL_String__String_);
+struct __ecereNameSpace__ecere__com__Instance * intlStrings = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__Map_TPL_ContextStringPair__ecere__com__List_TPL_String___);
 struct __ecereNameSpace__ecere__com__MapIterator it = (it.container = (void *)0, it.pointer = (void *)0, __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(&it, intlStrings), it);
 
 for(c = 1; c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + 296)))->argc; c++)
@@ -2388,59 +2460,90 @@ __ecereNameSpace__ecere__sys__ChangeExtension(file, "bowl", fileName);
 f = __ecereNameSpace__ecere__sys__FileOpen(fileName, 1);
 if(f)
 {
-if(!potFile)
-{
-char potFileName[797];
+static char line[65536];
+struct __ecereNameSpace__ecere__com__Instance * comments = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__List_TPL_String_);
+char * msgid = (((void *)0)), * msgstr = (((void *)0)), * msgctxt = (((void *)0));
 
-strcpy(potFileName, output);
-__ecereNameSpace__ecere__sys__StripExtension(potFileName);
-__ecereNameSpace__ecere__sys__ChangeExtension(potFileName, "pot", potFileName);
-potFile = __ecereNameSpace__ecere__sys__FileOpen(potFileName, 2);
-}
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(potFile, "# %s\n", moduleName);
 while(!((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof])(f))
 {
-char * comment = (((void *)0)), * msgid = (((void *)0)), * msgstr = (((void *)0));
-int c;
-
-for(c = 0; c < 4; c++)
+if(__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
 {
-static char line[65536];
+int len;
 
-if(__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
+__ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
+if(line[0] == '#')
 {
-if(c == 0)
-comment = __ecereNameSpace__ecere__sys__CopyString(line);
-else if(c == 1)
-msgid = __ecereNameSpace__ecere__sys__CopyString(line);
-else if(c == 2)
-msgstr = __ecereNameSpace__ecere__sys__CopyString(line);
+((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))comments->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(comments, (uint64)(__ecereNameSpace__ecere__sys__CopyString(line)));
 }
+else if(strstr(line, "msgid \"") == line)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgid), msgid = 0);
+msgid = __ecereNameSpace__ecere__sys__CopyString(line + 7);
+len = strlen(msgid);
+if(len)
+msgid[len - 1] = (unsigned char)0;
+}
+else if(strstr(line, "msgctxt \"") == line)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgctxt), msgctxt = 0);
+msgctxt = __ecereNameSpace__ecere__sys__CopyString(line + 9);
+len = strlen(msgctxt);
+if(len)
+msgctxt[len - 1] = (unsigned char)0;
 }
-if(msgid && !__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&it, (uint64)(msgid), 0x0))
+else if(strstr(line, "msgstr \"") == line)
 {
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgstr), msgstr = 0);
+msgstr = __ecereNameSpace__ecere__sys__CopyString(line + 8);
+len = strlen(msgstr);
+if(len)
+msgstr[len - 1] = (unsigned char)0;
+}
+if(msgid && msgstr)
+{
+struct ContextStringPair pair = 
+{
+msgid, msgctxt
+};
+
 i18n = 0x1;
+if(!__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&it, (&pair), 0x0))
+{
+msgid = (((void *)0));
+msgctxt = (((void *)0));
 __extension__ ({
 struct __ecereNameSpace__ecere__com__Iterator __internalIterator = 
 {
 intlStrings, 0
 };
 
-__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&__internalIterator, (uint64)(((uint64)(msgid))), 0x1);
-__ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(&__internalIterator, comment);
+__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&__internalIterator, (((&pair))), 0x1);
+__ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(&__internalIterator, comments);
 });
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, comment);
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, msgid);
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, msgstr);
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
+comments = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__List_TPL_String_);
+}
+else
+{
+{
+struct __ecereNameSpace__ecere__com__Iterator s = 
+{
+(comments), 0
+};
+
+while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&s))
+((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&it))->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&it)), __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&s));
+}
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *))comments->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_RemoveAll])(comments);
+}
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgid), msgid = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgctxt), msgctxt = 0);
 (__ecereNameSpace__ecere__com__eSystem_Delete(msgstr), msgstr = 0);
 }
 }
+}
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *))comments->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Free])(comments);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(comments), comments = 0);
 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
 }
 }
 }
@@ -2452,11 +2555,71 @@ if(!isDynamicLibrary)
 thisAppClass = SearchAppClass_Module(privateModule);
 }
 WriteMain(output);
+if(((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)intlStrings + 12)))->count)
+{
+struct __ecereNameSpace__ecere__com__Instance * potFile;
+char potFileName[797];
+
+strcpy(potFileName, "locale");
+__ecereNameSpace__ecere__sys__MakeDir(potFileName);
+__ecereNameSpace__ecere__sys__PathCat(potFileName, projectName);
+__ecereNameSpace__ecere__sys__ChangeExtension(potFileName, "pot", potFileName);
+potFile = __ecereNameSpace__ecere__sys__FileOpen(potFileName, 2);
+if(potFile)
+{
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgid \"\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgstr \n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"Project-Id-Version: \\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"POT-Creation-Date: \\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"PO-Revision-Date: \\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"Last-Translator: \\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"Language-Team: \\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"MIME-Version: 1.0\\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"Content-Type: text/plain; charset=iso-8859-1\\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"Content-Transfer-Encoding: 8bit\\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"X-Poedit-Basepath: ..\\\\\\n\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
+{
+struct __ecereNameSpace__ecere__com__MapIterator i = (i.container = (void *)0, i.pointer = (void *)0, __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(&i, (intlStrings)), i);
+
+while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&i))
+{
+struct ContextStringPair pair = (*(struct ContextStringPair *)__ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_key(&i));
+struct __ecereNameSpace__ecere__com__Instance * comments = ((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&i));
+
+{
+struct __ecereNameSpace__ecere__com__Iterator s = 
+{
+(comments), 0
+};
+
+while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&s))
+{
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(potFile, __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&s));
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
+}
+}
+if(pair.context)
+{
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgctxt \"");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, pair.context);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"\n");
+}
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgid \"");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, pair.string);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgstr \"");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, pair.string);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
+}
+}
 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *))intlStrings->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Free])(intlStrings);
 (__ecereNameSpace__ecere__com__eInstance_DecRef(intlStrings), intlStrings = 0);
-if(potFile)
 (__ecereNameSpace__ecere__com__eInstance_DecRef(potFile), potFile = 0);
 }
+}
+}
 FreeContext(theGlobalContext);
 FreeExcludedSymbols(&_excludedSymbols);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&_defines, FreeModuleDefine);
@@ -2471,8 +2634,6 @@ SetSymbolsDir((((void *)0)));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char *  name, char *  baseName, int size, int sizeClass, unsigned int (* )(void * ), void (* )(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
 
-extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
-
 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, void *  function, int declMode);
 
 void __ecereRegisterModule_ecs(struct __ecereNameSpace__ecere__com__Instance * module)