compiler: Added (u)intsize to map to size_t; Updated C prototypes to use it; Fixed...
[sdk] / compiler / bootstrap / libec / bootstrap / pass15.c
index bb946ee..b857d5d 100644 (file)
@@ -28,6 +28,19 @@ typedef unsigned __int64 uint64;
 #define __ENDIAN_PAD(x) 0
 #endif
 #include <stdint.h>
+#include <sys/types.h>
+
+#if defined(_W64) || (defined(__WORDSIZE) && __WORDSIZE == 8) || defined(__x86_64__)
+#define _64BIT 1
+#else
+#define _64BIT 0
+#endif
+
+#define arch_PointerSize                  sizeof(void *)
+#define structSize_Instance               (_64BIT ? 24 : 12)
+#define structSize_Module                 (_64BIT ? 560 : 300)
+#define structSize_NamedLink              (_64BIT ? 32 : 16)
+
 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
 
 extern void *  __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
@@ -916,8 +929,6 @@ struct __ecereNameSpace__ecere__com__Method * method;
 } __attribute__ ((gcc_struct));
 } __attribute__ ((gcc_struct));
 
-typedef uintptr_t size_t;
-
 void exit(int status);
 
 void * calloc(size_t nmemb, size_t size);
@@ -1193,7 +1204,7 @@ unsigned int internalValueCounter;
 
 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
 
-extern int strlen(const char * );
+extern size_t strlen(const char * );
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
 
@@ -1258,6 +1269,7 @@ case 2:
 case 3:
 case 4:
 case 22:
+case 23:
 if(type1->passAsTemplate && !type2->passAsTemplate)
 return 0x1;
 return type1->isSigned != type2->isSigned;
@@ -1631,10 +1643,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = op2.i;
 else if(op2.kind == 3)
 *value2 = (int)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (int)op2.i64;
 else if(op2.kind == 4)
 *value2 = (int)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (int)op2.i64;
+else if(op2.kind == 23)
+*value2 = (int)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (int)op2.i64;
 else if(op2.kind == 22)
@@ -1666,10 +1682,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (unsigned int)op2.i;
 else if(op2.kind == 3)
 *value2 = op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (unsigned int)op2.i64;
 else if(op2.kind == 4)
 *value2 = (unsigned int)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (unsigned int)op2.i64;
+else if(op2.kind == 23)
+*value2 = (unsigned int)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (unsigned int)op2.i64;
 else if(op2.kind == 22)
@@ -1701,10 +1721,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (long long)op2.i;
 else if(op2.kind == 3)
 *value2 = (long long)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = op2.i64;
 else if(op2.kind == 4)
 *value2 = (long long)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = op2.i64;
+else if(op2.kind == 23)
+*value2 = (long long)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = op2.i64;
 else if(op2.kind == 22)
@@ -1736,10 +1760,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (uint64)op2.i;
 else if(op2.kind == 3)
 *value2 = (uint64)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (uint64)op2.i64;
 else if(op2.kind == 4)
 *value2 = op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (uint64)op2.i64;
+else if(op2.kind == 23)
+*value2 = op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (uint64)op2.i64;
 else if(op2.kind == 22)
@@ -1771,10 +1799,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (intptr_t)op2.i;
 else if(op2.kind == 3)
 *value2 = (intptr_t)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (intptr_t)op2.i64;
 else if(op2.kind == 4)
 *value2 = (intptr_t)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (intptr_t)op2.i64;
+else if(op2.kind == 23)
+*value2 = (intptr_t)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (intptr_t)op2.i64;
 else if(op2.kind == 22)
@@ -1806,10 +1838,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (uintptr_t)op2.i;
 else if(op2.kind == 3)
 *value2 = (uintptr_t)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (uintptr_t)op2.i64;
 else if(op2.kind == 4)
 *value2 = (uintptr_t)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (uintptr_t)op2.i64;
+else if(op2.kind == 23)
+*value2 = (uintptr_t)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (uintptr_t)op2.i64;
 else if(op2.kind == 22)
@@ -1833,6 +1869,84 @@ return 0x0;
 return 0x1;
 }
 
+unsigned int GetIntSize(struct Expression * exp, ssize_t * value2)
+{
+struct Operand op2 = GetOperand(exp);
+
+if(op2.kind == 3 && op2.type->isSigned)
+*value2 = (ssize_t)op2.i;
+else if(op2.kind == 3)
+*value2 = (ssize_t)op2.ui;
+else if(op2.kind == 4 && op2.type->isSigned)
+*value2 = (ssize_t)op2.i64;
+else if(op2.kind == 4)
+*value2 = (ssize_t)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (ssize_t)op2.i64;
+else if(op2.kind == 23)
+*value2 = (ssize_t)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (ssize_t)op2.i64;
+else if(op2.kind == 22)
+*value2 = (ssize_t)op2.ui64;
+else if(op2.kind == 2 && op2.type->isSigned)
+*value2 = (ssize_t)op2.s;
+else if(op2.kind == 2)
+*value2 = (ssize_t)op2.us;
+else if(op2.kind == 1 && op2.type->isSigned)
+*value2 = (ssize_t)op2.c;
+else if(op2.kind == 1)
+*value2 = (ssize_t)op2.uc;
+else if(op2.kind == 6)
+*value2 = (ssize_t)op2.f;
+else if(op2.kind == 7)
+*value2 = (ssize_t)op2.d;
+else if(op2.kind == 13)
+*value2 = (ssize_t)op2.ui64;
+else
+return 0x0;
+return 0x1;
+}
+
+unsigned int GetUIntSize(struct Expression * exp, size_t * value2)
+{
+struct Operand op2 = GetOperand(exp);
+
+if(op2.kind == 3 && op2.type->isSigned)
+*value2 = (size_t)op2.i;
+else if(op2.kind == 3)
+*value2 = (size_t)op2.ui;
+else if(op2.kind == 4 && op2.type->isSigned)
+*value2 = (size_t)op2.i64;
+else if(op2.kind == 4)
+*value2 = (size_t)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (size_t)op2.i64;
+else if(op2.kind == 23)
+*value2 = (size_t)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (size_t)op2.i64;
+else if(op2.kind == 22)
+*value2 = (size_t)op2.ui64;
+else if(op2.kind == 2 && op2.type->isSigned)
+*value2 = (size_t)op2.s;
+else if(op2.kind == 2)
+*value2 = (size_t)op2.us;
+else if(op2.kind == 1 && op2.type->isSigned)
+*value2 = (size_t)op2.c;
+else if(op2.kind == 1)
+*value2 = (size_t)op2.uc;
+else if(op2.kind == 6)
+*value2 = (size_t)op2.f;
+else if(op2.kind == 7)
+*value2 = (size_t)op2.d;
+else if(op2.kind == 13)
+*value2 = (size_t)op2.ui64;
+else
+return 0x0;
+return 0x1;
+}
+
 unsigned int GetShort(struct Expression * exp, short * value2)
 {
 struct Operand op2 = GetOperand(exp);
@@ -1841,10 +1955,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (short)op2.i;
 else if(op2.kind == 3)
 *value2 = (short)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (short)op2.i64;
 else if(op2.kind == 4)
 *value2 = (short)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (short)op2.i64;
+else if(op2.kind == 23)
+*value2 = (short)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (short)op2.i64;
 else if(op2.kind == 22)
@@ -1876,10 +1994,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (unsigned short)op2.i;
 else if(op2.kind == 3)
 *value2 = (unsigned short)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (unsigned short)op2.i64;
 else if(op2.kind == 4)
 *value2 = (unsigned short)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (unsigned short)op2.i64;
+else if(op2.kind == 23)
+*value2 = (unsigned short)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (unsigned short)op2.i64;
 else if(op2.kind == 22)
@@ -1911,10 +2033,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (char)op2.i;
 else if(op2.kind == 3)
 *value2 = (char)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (char)op2.i64;
 else if(op2.kind == 4)
 *value2 = (char)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (char)op2.i64;
+else if(op2.kind == 23)
+*value2 = (char)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (char)op2.i64;
 else if(op2.kind == 22)
@@ -1946,10 +2072,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (unsigned char)op2.i;
 else if(op2.kind == 3)
 *value2 = (unsigned char)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (unsigned char)op2.i64;
 else if(op2.kind == 4)
 *value2 = (unsigned char)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (unsigned char)op2.i64;
+else if(op2.kind == 23)
+*value2 = (unsigned char)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (unsigned char)op2.i64;
 else if(op2.kind == 22)
@@ -1981,10 +2111,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (float)(float)op2.i;
 else if(op2.kind == 3)
 *value2 = (float)(float)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (float)(float)op2.i64;
 else if(op2.kind == 4)
 *value2 = (float)(float)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (float)(float)op2.i64;
+else if(op2.kind == 23)
+*value2 = (float)(float)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (float)(float)op2.i64;
 else if(op2.kind == 22)
@@ -2016,10 +2150,14 @@ if(op2.kind == 3 && op2.type->isSigned)
 *value2 = (double)(double)op2.i;
 else if(op2.kind == 3)
 *value2 = (double)(double)op2.ui;
-if(op2.kind == 4 && op2.type->isSigned)
+else if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (double)(double)op2.i64;
 else if(op2.kind == 4)
 *value2 = (double)(double)op2.ui64;
+else if(op2.kind == 23 && op2.type->isSigned)
+*value2 = (double)(double)op2.i64;
+else if(op2.kind == 23)
+*value2 = (double)(double)op2.ui64;
 else if(op2.kind == 22 && op2.type->isSigned)
 *value2 = (double)(double)op2.i64;
 else if(op2.kind == 22)
@@ -2408,9 +2546,9 @@ void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module
 struct __ecereNameSpace__ecere__com__Class * _class;
 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
 
-for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->modules.first; subModule; subModule = subModule->next)
+for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->modules.first; subModule; subModule = subModule->next)
 ComputeModuleClasses(subModule->data);
-for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->classes.first; _class; _class = _class->next)
+for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->classes.first; _class; _class = _class->next)
 ComputeClassMembers(_class, 0x0);
 }
 
@@ -2443,6 +2581,9 @@ break;
 case 22:
 type->alignment = size = targetBits / 8;
 break;
+case 23:
+type->alignment = size = targetBits / 8;
+break;
 case 5:
 type->alignment = size = sizeof(long);
 break;
@@ -2765,7 +2906,7 @@ return topMember ? topMember->memberID : _class->memberID;
 
 extern struct Symbol * FindClass(char *  name);
 
-extern char *  strchr(char * , int);
+extern char *  strchr(const char * , int);
 
 extern void FullClassNameCat(char *  output, char *  className, unsigned int includeTemplateParams);
 
@@ -2988,7 +3129,7 @@ if(classSym)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
 }
 imported = 0x1;
-if(prop->_class->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)prop->_class->module + 12)))->importType != 1)
+if(prop->_class->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)prop->_class->module + structSize_Instance)))->importType != 1)
 dllImport = 0x1;
 }
 if(!symbol->type)
@@ -3217,7 +3358,7 @@ return type;
 
 extern void __ecereNameSpace__ecere__com__eClass_FindNextMember(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class **  curClass, struct __ecereNameSpace__ecere__com__DataMember **  curMember, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
 
-extern void *  memcpy(void * , const void * , unsigned int size);
+extern void *  memcpy(void * , const void * , size_t size);
 
 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
 
@@ -3971,7 +4112,7 @@ if(!classSym->_import)
 {
 struct ModuleImport * module;
 
-if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + 12)))->name)
+if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + structSize_Instance)))->name)
 module = FindModule(method->_class->module);
 else
 module = mainModule;
@@ -3997,7 +4138,7 @@ symbol->type->refCount++;
 if(!method->dataType->dllExport)
 {
 imported = 0x1;
-if(method->_class->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + 12)))->importType != 1)
+if(method->_class->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + structSize_Instance)))->importType != 1)
 dllImport = 0x1;
 }
 }
@@ -4273,7 +4414,7 @@ symbol->type->staticMethod = 0x1;
 }
 }
 imported = symbol->_import ? 0x1 : 0x0;
-if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + 12)))->importType != 1)
+if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1)
 dllImport = 0x1;
 }
 DeclareType(function->dataType, 0x1, 0x1);
@@ -4294,7 +4435,7 @@ d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
 if(dllImport)
 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
-if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + 12)))->importType == 1)
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType == 1)
 {
 struct Specifier * spec;
 
@@ -4347,7 +4488,7 @@ if(curExternal)
 symbol->id = curExternal->symbol->idCode;
 }
 }
-return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + 12)))->importType != 1) ? 0x1 : 0x0;
+return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1) ? 0x1 : 0x0;
 }
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData;
@@ -4640,15 +4781,17 @@ else if(dest->kind == 7 && source->kind == 6)
 return 0x1;
 else if(dest->kind == 2 && source->kind == 1)
 return 0x1;
-else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1))
+else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 23))
+return 0x1;
+else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 22 || source->kind == 23))
 return 0x1;
-else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 3))
+else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 23 || source->kind == 4))
 return 0x1;
-else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 3))
+else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 4 || source->kind == 22))
 return 0x1;
-else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || dest->kind == 5 || dest->kind == 4 || dest->kind == 22))
+else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || dest->kind == 5 || dest->kind == 4 || dest->kind == 22 || dest->kind == 23))
 return 0x1;
-else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || source->kind == 4 || source->kind == 22))
+else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || source->kind == 4 || source->kind == 22 || source->kind == 23))
 return 0x1;
 else if((dest->kind == 11 || (dest->kind == 13 && dest->type->kind == 11) || dest->kind == 16) && ((source->kind == 11 || (source->kind == 13 && source->type->kind == 11) || source->kind == 16)))
 {
@@ -4959,9 +5102,9 @@ struct __ecereNameSpace__ecere__com__SubModule * subModule;
 
 if(searchFor == searchIn)
 return 0x1;
-for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + 12)))->modules.first; subModule; subModule = subModule->next)
+for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + structSize_Instance)))->modules.first; subModule; subModule = subModule->next)
 {
-if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + 12)))->application)
+if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + structSize_Instance)))->application)
 {
 if(ModuleVisibility(subModule->module, searchFor))
 return 0x1;
@@ -4987,15 +5130,15 @@ unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance
 {
 struct __ecereNameSpace__ecere__com__Instance * module;
 
-if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + 12)))->application + 300)))->systemNameSpace, sourceExp, dest, string, conversions))
+if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Module)))->systemNameSpace, sourceExp, dest, string, conversions))
 return 0x1;
-if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + 12)))->application + 12)))->privateNameSpace, sourceExp, dest, string, conversions))
+if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Instance)))->privateNameSpace, sourceExp, dest, string, conversions))
 return 0x1;
-if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + 12)))->application + 12)))->publicNameSpace, sourceExp, dest, string, conversions))
+if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Instance)))->publicNameSpace, sourceExp, dest, string, conversions))
 return 0x1;
-for(module = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + 12)))->application + 300)))->allModules.first; module; module = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->next)
+for(module = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Module)))->allModules.first; module; module = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->next)
 {
-if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->publicNameSpace, sourceExp, dest, string, conversions))
+if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->publicNameSpace, sourceExp, dest, string, conversions))
 return 0x1;
 }
 return 0x0;
@@ -9294,6 +9437,19 @@ op.ops = uintOps;
 }
 op.kind = 3;
 break;
+case 23:
+if(type->isSigned)
+{
+op.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->constant, (((void *)0)), 0);
+op.ops = intOps;
+}
+else
+{
+op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
+op.ops = uintOps;
+}
+op.kind = 3;
+break;
 case 6:
 op.f = (float)strtod(exp->constant, (((void *)0)));
 op.ops = floatOps;
@@ -9425,6 +9581,13 @@ exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
 exp->type = 2;
 break;
 }
+case 23:
+{
+FreeExpContents(exp);
+exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
+exp->type = 2;
+break;
+}
 default:
 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0))));
 }
@@ -9728,6 +9891,11 @@ case 22:
 GetIntPtr(value, (intptr_t *)ptr);
 break;
 }
+case 23:
+{
+GetIntSize(value, (ssize_t *)ptr);
+break;
+}
 case 6:
 {
 GetFloat(value, (float *)ptr);
@@ -9803,6 +9971,13 @@ void (* Set)(void *, intptr_t) = (void *)prop->Set;
 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->constant, (((void *)0)), 0));
 break;
 }
+case 23:
+{
+void (* Set)(void *, ssize_t) = (void *)prop->Set;
+
+Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->constant, (((void *)0)), 0));
+break;
+}
 }
 }
 else if(value->type == 3)
@@ -9921,6 +10096,12 @@ bits |= ((intptr_t)part << bitMember->pos);
 else
 bits |= ((uintptr_t)part << bitMember->pos);
 break;
+case 23:
+if(type->isSigned)
+bits |= ((ssize_t)part << bitMember->pos);
+else
+bits |= ((size_t)part << bitMember->pos);
+break;
 }
 }
 }
@@ -10397,6 +10578,21 @@ Set(exp->instance->data, intValue);
 PopulateInstance(exp->instance);
 break;
 }
+case 23:
+{
+ssize_t intValue;
+void (* Set)(void *, ssize_t) = (void *)prop->Set;
+
+exp->instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->instance->_class = MkSpecifierName(_class->fullName);
+exp->instance->loc = exp->loc;
+exp->type = 1;
+GetIntSize(value, &intValue);
+Set(exp->instance->data, intValue);
+PopulateInstance(exp->instance);
+break;
+}
 case 7:
 {
 double doubleValue;
@@ -10692,6 +10888,26 @@ exp->constant = PrintUInt64((uint64)value);
 exp->type = 2;
 }
 break;
+case 23:
+if(type->isSigned)
+{
+ssize_t value;
+
+GetIntSize(e, &value);
+FreeExpContents(exp);
+exp->constant = PrintInt64((long long)value);
+exp->type = 2;
+}
+else
+{
+size_t value;
+
+GetUIntSize(e, &value);
+FreeExpContents(exp);
+exp->constant = PrintUInt64((uint64)value);
+exp->type = 2;
+}
+break;
 case 6:
 {
 float value;
@@ -11043,7 +11259,7 @@ break;
 }
 }
 
-extern int strncmp(const char * , const char * , int n);
+extern int strncmp(const char * , const char * , size_t n);
 
 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  key);
 
@@ -11175,7 +11391,7 @@ return symbol;
 
 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
 {
-if(!type->isSigned && type->kind != 22)
+if(!type->isSigned && type->kind != 22 && type->kind != 23)
 ListAdd(specs, MkSpecifier(UNSIGNED));
 switch(type->kind)
 {
@@ -11207,6 +11423,9 @@ break;
 case 22:
 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
 break;
+case 23:
+ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
+break;
 case 3:
 default:
 ListAdd(specs, MkSpecifier(INT));
@@ -11258,6 +11477,9 @@ break;
 case 22:
 strcat(string, type->isSigned ? "intptr" : "uintptr");
 break;
+case 23:
+strcat(string, type->isSigned ? "intsize" : "uintsize");
+break;
 case 1:
 strcat(string, type->isSigned ? "char" : "byte");
 break;
@@ -11640,7 +11862,7 @@ return data;
 
 extern struct __ecereNameSpace__ecere__com__NameSpace *  globalData;
 
-extern char *  strncpy(char * , const char * , int n);
+extern char *  strncpy(char * , const char * , size_t n);
 
 static struct GlobalData * FindGlobalData(char * name)
 {
@@ -11932,7 +12154,7 @@ destType->refCount++;
 }
 }
 
-extern char *  strstr(char * , const char * );
+extern char *  strstr(const char * , const char * );
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
 
@@ -12195,7 +12417,7 @@ char name[1024];
 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
 name[0] = (char)0;
-if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + 12)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
 strcpy(name, "__ecereFunction_");
 FullClassNameCat(name, id->string, 0x0);
 if(DeclareFunction(function, name))
@@ -12500,7 +12722,7 @@ if(exp->op.exp2->destType && exp->op.op != '=')
 exp->op.exp2->destType->count--;
 if(assign && type1 && type1->kind == 13 && exp->op.exp2->expType)
 {
-if(exp->op.exp2->expType->kind == 22 || exp->op.exp2->expType->kind == 4 || exp->op.exp2->expType->kind == 3 || exp->op.exp2->expType->kind == 2 || exp->op.exp2->expType->kind == 1)
+if(exp->op.exp2->expType->kind == 23 || exp->op.exp2->expType->kind == 22 || exp->op.exp2->expType->kind == 4 || exp->op.exp2->expType->kind == 3 || exp->op.exp2->expType->kind == 2 || exp->op.exp2->expType->kind == 1)
 {
 if(exp->op.op != '=' && type1->type->kind == 0)
 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
@@ -12616,7 +12838,7 @@ ProcessExpressionType(exp->op.exp2);
 }
 }
 }
-if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->_class->string, "String"))) && (type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
+if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->_class->string, "String"))) && (type2->kind == 23 || type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
 {
 if(type1->kind != 8 && type1->type->kind == 0)
 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
@@ -12624,7 +12846,7 @@ exp->expType = type1;
 if(type1)
 type1->refCount++;
 }
-else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->_class->string, "String"))) && (type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
+else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->_class->string, "String"))) && (type1->kind == 23 || type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
 {
 if(type2->kind != 8 && type2->type->kind == 0)
 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
@@ -14493,7 +14715,7 @@ struct __ecereNameSpace__ecere__sys__NamedLink * member;
 
 for(member = symbol->type->members.first; member; member = member->next)
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(16), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
+struct __ecereNameSpace__ecere__sys__NamedLink * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(structSize_NamedLink), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
 
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->members, value);
 }
@@ -16221,7 +16443,7 @@ if(function)
 char name[1024];
 
 name[0] = (char)0;
-if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + 12)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
 strcpy(name, "__ecereFunction_");
 FullClassNameCat(name, s, 0x0);
 DeclareFunction(function, name);
@@ -16263,7 +16485,7 @@ struct Identifier * id = declarator->identifier;
 
 if(id && id->string)
 {
-if(!strcmp(id->string, "uintptr_t") || !strcmp(id->string, "intptr_t"))
+if(!strcmp(id->string, "uintptr_t") || !strcmp(id->string, "intptr_t") || !strcmp(id->string, "size_t") || !strcmp(id->string, "ssize_t"))
 {
 external->symbol->id = -1001, external->symbol->idCode = -1001;
 after = external;
@@ -16362,6 +16584,8 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt6
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
@@ -16389,7 +16613,7 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifie
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(GlobalData data)", DeclareGlobalData, module, 2);
 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, 0, 0, module, 2, 1);
-if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 12)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + 12)))->application && class)
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
 __ecereClass_Conversion = class;
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypes", "bool MatchTypes(Type source, Type dest, ecere::sys::OldList conversions, ecere::com::Class owningClassSource, ecere::com::Class owningClassDest, bool doConversion, bool enumBaseType, bool acceptReversedParams, bool isConversionExploration)", MatchTypes, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchWithEnums_NameSpace", "bool MatchWithEnums_NameSpace(ecere::com::NameSpace nameSpace, Expression sourceExp, Type dest, char * string, ecere::sys::OldList conversions)", MatchWithEnums_NameSpace, module, 2);