Fixes for #1006 and more
authorJerome St-Louis <jerome@ecere.com>
Sat, 28 Sep 2013 23:50:03 +0000 (19:50 -0400)
committerJerome St-Louis <jerome@ecere.com>
Sun, 29 Sep 2013 00:02:22 +0000 (20:02 -0400)
compiler/bootstrap/ecere/bootstrap/instance.c
ecere/src/com/instance.ec
extras/types/DynamicString.ec
ide/src/debugger/Debugger.ec
ide/src/dialogs/FindInFilesDialog.ec

index 640d9e5..fd5c073 100644 (file)
@@ -1438,10 +1438,10 @@ extern int strcmp(const char * , const char * );
 
 extern char *  strncpy(char * , const char * , size_t n);
 
-static void __ecereNameSpace__ecere__com__FreeTemplatesDerivatives(struct __ecereNameSpace__ecere__com__Class * base);
-
 extern int printf(char * , ...);
 
+static void __ecereNameSpace__ecere__com__FreeTemplatesDerivatives(struct __ecereNameSpace__ecere__com__Class * base);
+
 static void __ecereNameSpace__ecere__com__NameSpace_Free(struct __ecereNameSpace__ecere__com__NameSpace * parentNameSpace);
 
 static struct __ecereNameSpace__ecere__com__BTNamedLink * __ecereNameSpace__ecere__com__SearchNameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char *  name, void *  listOffset);
@@ -1605,7 +1605,6 @@ offsetClass = base ? base->sizeClass : (type == 5 ? 0 : 0);
 totalSizeClass = offsetClass + sizeClass;
 if((_class = __ecereNameSpace__ecere__com__eSystem_FindClass(module, name)))
 {
-__ecereNameSpace__ecere__com__FreeTemplatesDerivatives(_class);
 if(!_class->internalDecl)
 {
 if(declMode != 4)
@@ -1617,6 +1616,7 @@ return _class;
 }
 return (((void *)0));
 }
+__ecereNameSpace__ecere__com__FreeTemplatesDerivatives(_class);
 classLink = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*_class->nameSpace).classes, name + start);
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Delete(&(*_class->nameSpace).classes, (struct __ecereNameSpace__ecere__sys__BTNode *)classLink);
 {
@@ -3235,7 +3235,7 @@ __ecereNameSpace__ecere__com__FixDerivativeVirtualMethod(template, name, vid, or
 
 struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, char * name, char * type, void * function, int declMode)
 {
-if(_class && name)
+if(_class && !_class->comRedefinition && name)
 {
 struct __ecereNameSpace__ecere__com__Class * base;
 
@@ -3303,7 +3303,7 @@ return (((void *)0));
 
 struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(struct __ecereNameSpace__ecere__com__Class * _class, char * name, char * type, void * function, int declMode)
 {
-if(_class && name)
+if(_class && !_class->comRedefinition && name)
 {
 struct __ecereNameSpace__ecere__com__Class * base;
 
index dfc5f95..332df66 100644 (file)
@@ -2384,8 +2384,6 @@ public dllexport Class eSystem_RegisterClass(ClassType type, char * name, char *
    
       if((_class = eSystem_FindClass(module, name)))
       {
-         FreeTemplatesDerivatives(_class);
-
          if(!_class.internalDecl)
          {
             if(declMode != baseSystemAccess)
@@ -2399,6 +2397,8 @@ public dllexport Class eSystem_RegisterClass(ClassType type, char * name, char *
             return null;
          }
 
+         FreeTemplatesDerivatives(_class);
+
          classLink = (BTNamedLink)_class.nameSpace->classes.FindString(name + start);
          _class.nameSpace->classes.Delete((BTNode)classLink);
          {
@@ -4019,7 +4019,7 @@ static void FixDerivativeVirtualMethod(Class base, char * name, int vid, void *
 
 public dllexport Method eClass_AddMethod(Class _class, char * name, char * type, void * function, AccessMode declMode)
 {
-   if(_class && name)
+   if(_class && !_class.comRedefinition && name)
    {
       Class base;
       for(base = _class; base; base = base.base)
@@ -4090,7 +4090,7 @@ public dllexport Method eClass_AddMethod(Class _class, char * name, char * type,
 
 public dllexport Method eClass_AddVirtualMethod(Class _class, char * name, char * type, void * function, AccessMode declMode)
 {
-   if(_class && name)
+   if(_class && !_class.comRedefinition && name)
    {
       Class base;
       for(base = _class; base; base = base.base)
index 6f14d49..0562ec2 100644 (file)
@@ -1,3 +1,5 @@
+public import "ecere"
+
 #include <stdarg.h>
 
 extern int isblank(int c);
index a4af8d3..a1d7e41 100644 (file)
@@ -3289,7 +3289,8 @@ class Debugger
       
 #if defined(GDB_DEBUG_CONSOLE) || defined(GDB_DEBUG_GUI)
 #ifdef GDB_DEBUG_CONSOLE
-      _dpl2(_dpct, dplchan::gdbOutput, 0, output);
+      // _dpl2(_dpct, dplchan::gdbOutput, 0, output);
+      puts(output);
 #endif
 #ifdef GDB_DEBUG_OUTPUT
       {
index 2b7856c..c0f8e0f 100644 (file)
@@ -647,10 +647,11 @@ private:
 
    unsigned int Main()
    {
+      const int stackSize = 1024;
       int frame, treeTop = 0;
       int globalFindCount = 0, filesSearchedCount = 0, filesMatchedCount = 0, dirsMatchedCount = 0;
       //double lastTime = GetTime();
-      SearchStackFrame stack[1024];
+      SearchStackFrame stack[stackSize];
       FindInFilesMode mode = this.mode;
       
       EditBox replaceEdit = null;
@@ -714,7 +715,7 @@ private:
          strcpy(stack[0].path, dir);
          stack[0].fileList = FileListing { dir, extensions = filter.extensions };  // there should be a sorted = true/false 
 
-         for(frame = 0; frame >= 0 && !abort; )
+         for(frame = 0; frame >= 0 && frame < stackSize && !abort; )
          {
             if(stack[frame].fileList.Find())
             {