ecere; compiler/libec: (#234, #361) Fixed isblank issue with GCC 3.4.5
authorJerome St-Louis <jerome@ecere.com>
Fri, 11 Jul 2014 08:24:45 +0000 (04:24 -0400)
committerJerome St-Louis <jerome@ecere.com>
Fri, 11 Jul 2014 08:45:52 +0000 (04:45 -0400)
- Added isblank and also isxdigit to registered C functions
- Also moved other ctype definitions at their proper place
- Removed obsolete notes regarding #361

compiler/bootstrap/ecere/bootstrap/BTNode.c
compiler/bootstrap/ecere/bootstrap/instance.c
ecere/src/com/BTNode.ec
ecere/src/com/instance.c
ecere/src/com/instance.ec
extras/types/DynamicString.ec
ide/src/debugger/Debugger.ec

index 3d81da1..c4eefa7 100644 (file)
@@ -1072,7 +1072,7 @@ unsigned int truth;
 __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ecereClass_bool, (void *)&truth);
 if(truth)
 {
-(*this) = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__StringBTNode);
+(*this) = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__sys__StringBTNode));
 __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ecereClass_String, (void *)&(*this)->key);
 __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Unserialize(channel, __ecereClass___ecereNameSpace__ecere__sys__StringBTNode, (void *)&(*this)->left);
 if((*this)->left)
index 27d0c40..eddef66 100644 (file)
@@ -693,12 +693,6 @@ extern int atoi(const char * );
 
 extern double atof(const char * );
 
-extern int tolower(int);
-
-extern int toupper(int);
-
-extern unsigned int isdigit(int);
-
 extern char *  getenv(const char *  name);
 
 extern int rename(const char *  oldpath, const char *  newpath);
@@ -721,6 +715,14 @@ extern int puts(const char * );
 
 extern int fputs(const char * , void *  stream);
 
+extern int tolower(int);
+
+extern int toupper(int);
+
+extern unsigned int isdigit(int);
+
+extern unsigned int isxdigit(int);
+
 extern int isalnum(int c);
 
 extern int isalpha(int c);
@@ -731,6 +733,8 @@ extern int isupper(int c);
 
 extern int isprint(int c);
 
+extern int isblank(int c);
+
 int __ecereVMethodID_class_OnGetString;
 
 const char *  __ecereProp___ecereNameSpace__ecere__com__Platform_Get_char__PTR_(int this);
@@ -6181,9 +6185,6 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("strtoull", "uint64 strto
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("system", "int system(const char*)", system, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("atoi", "int atoi(const char*)", atoi, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("atof", "double atof(const char*)", atof, module, 4);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("tolower", "int tolower(int)", tolower, module, 4);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("toupper", "int toupper(int)", toupper, module, 4);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("isdigit", "bool isdigit(int)", isdigit, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("memset", "void * memset(void * area, int value, uintsize count)", memset, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("getenv", "char * getenv(const char * name)", getenv, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("rename", "int rename(const char *oldpath, const char *newpath)", rename, module, 4);
@@ -6216,12 +6217,17 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("vsprintf", "int vsprintf
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("vsnprintf", "int vsnprintf(char*, uintsize, const char*, __builtin_va_list)", vsnprintf, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("puts", "int puts(const char *)", puts, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("fputs", "int fputs(const char *, void * stream)", fputs, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("tolower", "int tolower(int)", tolower, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("toupper", "int toupper(int)", toupper, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("isdigit", "bool isdigit(int)", isdigit, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("isxdigit", "bool isxdigit(int)", isxdigit, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("isalnum", "int isalnum(int c)", isalnum, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("isspace", "int isspace(int c)", isspace, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("isalpha", "int isalpha(int c)", isalpha, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("islower", "int islower(int c)", islower, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("isupper", "int isupper(int c)", isupper, module, 4);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("isprint", "int isprint(int c)", isprint, module, 4);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("isblank", "int isblank(int c)", isblank, module, 4);
 }
 
 struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__com____ecere_COM_Initialize(unsigned int guiApp, int argc, char * argv[])
index c1e3f34..beacf3c 100644 (file)
@@ -656,8 +656,6 @@ private:
    }
 };
 
-// TODO: WHY CAN'T WE HAVE THIS ABOVE?
-
 public class StringBTNode : struct // BTNode
 {
    class_fixed
@@ -689,8 +687,7 @@ public:
       channel.Unserialize(truth);
       if(truth)
       {
-         // TODO: Fix typed_object issues
-         this = eInstance_New(class(StringBTNode));
+         this = { };
          channel.Unserialize(key);
          channel.Unserialize(left);
          if(left) { left.parent = this; }
index 0bcaef0..a9f3c25 100644 (file)
@@ -50,6 +50,10 @@ typedef unsigned long long uint64;
 #define MAX_FILENAME 274
 #define MAX_EXTENSION 17
 
+#if defined(__MINGW32__) && !defined(_W64) && __GNUC__ < 4
+__declspec(dllexport) int isblank(int c) { return c == '\t' || c == ' '; }
+#endif
+
 #if defined(__WIN32__)
 intptr_t stdinHandle, stdoutHandle;
 int osfStdin, osfStdout;
index da30ff9..4cdae2d 100644 (file)
@@ -82,6 +82,9 @@ default:
 extern int __ecereVMethodID_class_OnGetDataFromString;
 
 // IMPLEMENTATION FOR THESE IN _instance.c:
+#if defined(__MINGW32__) && !defined(_W64) && __GNUC__ < 4
+dllexport int isblank(int c);
+#endif
 bool Instance_LocateModule(const char * name, const char * fileName);
 void Instance_COM_Initialize(int argc, char ** argv, char ** parsedCommand, int * argcPtr, const char *** argvPtr);
 void * Instance_Module_Load(const char * libLocation, const char * name, void ** Load, void ** Unload);
@@ -6289,9 +6292,6 @@ static void LoadCOM(Module module)
    eSystem_RegisterFunction("system", "int system(const char*)", system, module, baseSystemAccess);
    eSystem_RegisterFunction("atoi", "int atoi(const char*)", atoi, module, baseSystemAccess);
    eSystem_RegisterFunction("atof", "double atof(const char*)", atof, module, baseSystemAccess);
-   eSystem_RegisterFunction("tolower", "int tolower(int)", tolower, module, baseSystemAccess);
-   eSystem_RegisterFunction("toupper", "int toupper(int)", toupper, module, baseSystemAccess);
-   eSystem_RegisterFunction("isdigit", "bool isdigit(int)", isdigit, module, baseSystemAccess);
    eSystem_RegisterFunction("memset", "void * memset(void * area, int value, uintsize count)", memset, module, baseSystemAccess);
    eSystem_RegisterFunction("getenv", "char * getenv(const char * name)", getenv, module, baseSystemAccess);
    eSystem_RegisterFunction("rename", "int rename(const char *oldpath, const char *newpath)", rename, module, baseSystemAccess);
@@ -6342,12 +6342,17 @@ static void LoadCOM(Module module)
    eSystem_RegisterFunction("fputs", "int fputs(const char *, void * stream)", fputs, module, baseSystemAccess);
 
    // --- Ctype ---
+   eSystem_RegisterFunction("tolower", "int tolower(int)", tolower, module, baseSystemAccess);
+   eSystem_RegisterFunction("toupper", "int toupper(int)", toupper, module, baseSystemAccess);
+   eSystem_RegisterFunction("isdigit", "bool isdigit(int)", isdigit, module, baseSystemAccess);
+   eSystem_RegisterFunction("isxdigit","bool isxdigit(int)", isxdigit, module, baseSystemAccess);
    eSystem_RegisterFunction("isalnum", "int isalnum(int c)", isalnum, module, baseSystemAccess);
    eSystem_RegisterFunction("isspace", "int isspace(int c)", isspace, module, baseSystemAccess);
    eSystem_RegisterFunction("isalpha", "int isalpha(int c)", isalpha, module, baseSystemAccess);
    eSystem_RegisterFunction("islower", "int islower(int c)", islower, module, baseSystemAccess);
    eSystem_RegisterFunction("isupper", "int isupper(int c)", isupper, module, baseSystemAccess);
    eSystem_RegisterFunction("isprint", "int isprint(int c)", isprint, module, baseSystemAccess);
+   eSystem_RegisterFunction("isblank", "int isblank(int c)", isblank, module, baseSystemAccess);
 
 }
 
index 67056e0..4189386 100644 (file)
@@ -4,8 +4,6 @@ public import static "ecere"
 
 #include <stdarg.h>
 
-extern int isblank(int c);
-
 public class DynamicString : Array<char>
 {
    minAllocSize = 1024;
index 5e5842e..a5ea6b9 100644 (file)
@@ -23,7 +23,6 @@ extern char * strrchr(const char * s, int c);
 #define strlen _strlen
 #include <stdarg.h>
 #include <unistd.h>
-#include <ctype.h>
 #include <string.h> // For memchr
 
 #ifdef __APPLE__