compiler: 32/64 bit bootstrap
[sdk] / compiler / bootstrap / libec / bootstrap / pass15.c
index 55a2256..9d48b43 100644 (file)
@@ -1,6 +1,9 @@
 #if defined(__GNUC__)
 typedef long long int64;
 typedef unsigned long long uint64;
+#ifndef _WIN32
+#define __declspec(x)
+#endif
 #elif defined(__TINYC__)
 #include <stdarg.h>
 #define __builtin_va_list va_list
@@ -10,6 +13,8 @@ typedef unsigned long long uint64;
 #define strcasecmp stricmp
 #define strncasecmp strnicmp
 #define __declspec(x) __attribute__((x))
+#else
+#define __declspec(x)
 #endif
 typedef long long int64;
 typedef unsigned long long uint64;
@@ -22,6 +27,27 @@ typedef unsigned __int64 uint64;
 #else
 #define __ENDIAN_PAD(x) 0
 #endif
+#include <stdint.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);
+
+extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsigned int size);
+
+extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
+
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
 
 struct __ecereNameSpace__ecere__sys__BTNode;
@@ -32,9 +58,9 @@ struct __ecereNameSpace__ecere__sys__BinaryTree
 {
 struct __ecereNameSpace__ecere__sys__BTNode * root;
 int count;
-int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b);
+int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
 void (*  FreeKey)(void *  key);
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
 
@@ -45,7 +71,7 @@ void *  last;
 int count;
 unsigned int offset;
 unsigned int circ;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
 
@@ -64,7 +90,7 @@ void *  symbol;
 char *  dataTypeString;
 struct Type * dataType;
 int memberAccess;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
 
@@ -80,9 +106,9 @@ struct __ecereNameSpace__ecere__com__Class * _class;
 char *  dataTypeString;
 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
 struct Type * dataType;
-void (*  Set)();
-int (*  Get)();
-unsigned int (*  IsSet)();
+void (*  Set)(void * , int);
+int (*  Get)(void * );
+unsigned int (*  IsSet)(void * );
 void *  data;
 void *  symbol;
 int vid;
@@ -92,7 +118,7 @@ char *  category;
 unsigned int compiled;
 unsigned int selfWatchable;
 unsigned int isWatchable;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
 
@@ -102,7 +128,7 @@ int line;
 int charPos;
 int pos;
 unsigned int included;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
 
@@ -110,7 +136,24 @@ struct Location
 {
 struct CodePosition start;
 struct CodePosition end;
-};
+} __attribute__ ((gcc_struct));
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
+
+struct Attrib;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
+
+struct ExtDecl
+{
+struct Location loc;
+int type;
+union
+{
+char * s;
+struct Attrib * attr;
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
 
@@ -128,7 +171,7 @@ struct Location nameLoc;
 int endid;
 int declMode;
 unsigned int deleteWatchable;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
 
@@ -144,7 +187,8 @@ int simpleID;
 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
 struct ClassDefinition * classDef;
 unsigned int templateTypesOnly;
-};
+unsigned int hasNameSpace;
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
 
@@ -163,7 +207,7 @@ unsigned char *  data;
 struct Location nameLoc;
 struct Location insideLoc;
 unsigned int built;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
 
@@ -179,18 +223,18 @@ struct
 {
 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
 struct __ecereNameSpace__ecere__sys__OldList *  declarators;
-};
+} __attribute__ ((gcc_struct));
 struct Instantiation * inst;
 struct
 {
 struct Identifier * id;
 struct Expression * exp;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 struct Specifier * extStorage;
 struct Symbol * symbol;
 int declMode;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
 
@@ -207,51 +251,51 @@ struct
 {
 struct Identifier * id;
 struct Statement * stmt;
-} labeled;
+} __attribute__ ((gcc_struct)) labeled;
 struct
 {
 struct Expression * exp;
 struct Statement * stmt;
-} caseStmt;
+} __attribute__ ((gcc_struct)) caseStmt;
 struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * declarations;
 struct __ecereNameSpace__ecere__sys__OldList * statements;
 struct Context * context;
 unsigned int isSwitch;
-} compound;
+} __attribute__ ((gcc_struct)) compound;
 struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * exp;
 struct Statement * stmt;
 struct Statement * elseStmt;
-} ifStmt;
+} __attribute__ ((gcc_struct)) ifStmt;
 struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * exp;
 struct Statement * stmt;
-} switchStmt;
+} __attribute__ ((gcc_struct)) switchStmt;
 struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * exp;
 struct Statement * stmt;
-} whileStmt;
+} __attribute__ ((gcc_struct)) whileStmt;
 struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * exp;
 struct Statement * stmt;
-} doWhile;
+} __attribute__ ((gcc_struct)) doWhile;
 struct
 {
 struct Statement * init;
 struct Statement * check;
 struct __ecereNameSpace__ecere__sys__OldList * increment;
 struct Statement * stmt;
-} forStmt;
+} __attribute__ ((gcc_struct)) forStmt;
 struct
 {
 struct Identifier * id;
-} gotoStmt;
+} __attribute__ ((gcc_struct)) gotoStmt;
 struct
 {
 struct Specifier * spec;
@@ -259,23 +303,23 @@ char * statements;
 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
-} asmStmt;
+} __attribute__ ((gcc_struct)) asmStmt;
 struct
 {
 struct Expression * watcher;
 struct Expression * object;
 struct __ecereNameSpace__ecere__sys__OldList * watches;
-} _watch;
+} __attribute__ ((gcc_struct)) _watch;
 struct
 {
 struct Identifier * id;
 struct __ecereNameSpace__ecere__sys__OldList * exp;
 struct __ecereNameSpace__ecere__sys__OldList * filter;
 struct Statement * stmt;
-} forEachStmt;
+} __attribute__ ((gcc_struct)) forEachStmt;
 struct Declaration * decl;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
 
@@ -288,7 +332,7 @@ struct __ecereNameSpace__ecere__sys__OldList *  qualifiers;
 struct Declarator * declarator;
 int classObjectType;
 struct Expression * bitCount;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
 
@@ -302,9 +346,9 @@ union
 {
 struct Expression * exp;
 struct __ecereNameSpace__ecere__sys__OldList *  list;
-};
+} __attribute__ ((gcc_struct));
 unsigned int isConstant;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
 
@@ -323,8 +367,8 @@ float f;
 double d;
 long long i64;
 uint64 ui64;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
 
@@ -340,7 +384,7 @@ struct
 {
 char *  constant;
 struct Identifier * identifier;
-};
+} __attribute__ ((gcc_struct));
 struct Statement * compound;
 struct Instantiation * instance;
 char *  string;
@@ -349,83 +393,83 @@ struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
 struct Declarator * decl;
-} _classExp;
+} __attribute__ ((gcc_struct)) _classExp;
 struct
 {
 struct Identifier * id;
-} classData;
+} __attribute__ ((gcc_struct)) classData;
 struct
 {
 struct Expression * exp;
 struct __ecereNameSpace__ecere__sys__OldList * arguments;
 struct Location argLoc;
-} call;
+} __attribute__ ((gcc_struct)) call;
 struct
 {
 struct Expression * exp;
 struct __ecereNameSpace__ecere__sys__OldList * index;
-} index;
+} __attribute__ ((gcc_struct)) index;
 struct
 {
 struct Expression * exp;
 struct Identifier * member;
 int memberType;
 unsigned int thisPtr;
-} member;
+} __attribute__ ((gcc_struct)) member;
 struct
 {
 int op;
 struct Expression * exp1;
 struct Expression * exp2;
-} op;
+} __attribute__ ((gcc_struct)) op;
 struct TypeName * typeName;
 struct Specifier * _class;
 struct
 {
 struct TypeName * typeName;
 struct Expression * exp;
-} cast;
+} __attribute__ ((gcc_struct)) cast;
 struct
 {
 struct Expression * cond;
 struct __ecereNameSpace__ecere__sys__OldList * exp;
 struct Expression * elseExp;
-} cond;
+} __attribute__ ((gcc_struct)) cond;
 struct
 {
 struct TypeName * typeName;
 struct Expression * size;
-} _new;
+} __attribute__ ((gcc_struct)) _new;
 struct
 {
 struct TypeName * typeName;
 struct Expression * size;
 struct Expression * exp;
-} _renew;
+} __attribute__ ((gcc_struct)) _renew;
 struct
 {
 char * table;
 struct Identifier * id;
-} db;
+} __attribute__ ((gcc_struct)) db;
 struct
 {
 struct Expression * ds;
 struct Expression * name;
-} dbopen;
+} __attribute__ ((gcc_struct)) dbopen;
 struct
 {
 struct TypeName * typeName;
 struct Initializer * initializer;
-} initializer;
+} __attribute__ ((gcc_struct)) initializer;
 struct
 {
 struct Expression * exp;
 struct TypeName * typeName;
-} vaArg;
-};
+} __attribute__ ((gcc_struct)) vaArg;
+} __attribute__ ((gcc_struct));
 unsigned int debugValue;
 struct __ecereNameSpace__ecere__com__DataValue val;
-unsigned int address;
+uint64 address;
 unsigned int hasAddress;
 struct Type * expType;
 struct Type * destType;
@@ -436,7 +480,7 @@ unsigned int isConstant;
 unsigned int addedThis;
 unsigned int needCast;
 unsigned int thisPtr;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
 
@@ -444,7 +488,7 @@ struct TemplateDatatype
 {
 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
 struct Declarator * decl;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
 
@@ -463,11 +507,11 @@ union
 {
 struct TemplateDatatype * dataType;
 int memberType;
-};
+} __attribute__ ((gcc_struct));
 struct TemplateArgument * defaultArgument;
 char *  dataTypeString;
 struct Type * baseType;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
 
@@ -482,10 +526,11 @@ union
 int specifier;
 struct
 {
+struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
-};
+} __attribute__ ((gcc_struct));
 struct
 {
 struct Identifier * id;
@@ -494,12 +539,13 @@ struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
 unsigned int addNameSpace;
 struct Context * ctx;
-};
+struct ExtDecl * extDeclStruct;
+} __attribute__ ((gcc_struct));
 struct Expression * expression;
 struct Specifier * _class;
 struct TemplateParameter * templateParameter;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
 
@@ -512,7 +558,7 @@ struct Symbol * classSym;
 struct Specifier * _class;
 char *  string;
 struct Identifier * badID;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
 
@@ -535,27 +581,27 @@ struct
 {
 struct Expression * exp;
 struct Expression * posExp;
-char * attrib;
-} structDecl;
+struct Attrib * attrib;
+} __attribute__ ((gcc_struct)) structDecl;
 struct
 {
 struct Expression * exp;
 struct Specifier * enumClass;
-} array;
+} __attribute__ ((gcc_struct)) array;
 struct
 {
 struct __ecereNameSpace__ecere__sys__OldList * parameters;
-} function;
+} __attribute__ ((gcc_struct)) function;
 struct
 {
 struct Pointer * pointer;
-} pointer;
+} __attribute__ ((gcc_struct)) pointer;
 struct
 {
-char * extended;
-} extended;
-};
-};
+struct ExtDecl * extended;
+} __attribute__ ((gcc_struct)) extended;
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
 
@@ -575,7 +621,7 @@ struct Type * type;
 struct Symbol * propSet;
 int tempCount;
 unsigned int propertyNoThis;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
 
@@ -598,9 +644,9 @@ struct Declaration * declaration;
 char *  importString;
 struct Identifier * id;
 struct DBTableDef * table;
-};
+} __attribute__ ((gcc_struct));
 int importType;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
 
@@ -613,7 +659,7 @@ struct __ecereNameSpace__ecere__sys__OldList classes;
 struct __ecereNameSpace__ecere__sys__OldList functions;
 int importType;
 int importAccess;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
 
@@ -626,7 +672,7 @@ struct __ecereNameSpace__ecere__sys__OldList methods;
 struct __ecereNameSpace__ecere__sys__OldList properties;
 unsigned int itself;
 unsigned int isRemote;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
 
@@ -643,7 +689,7 @@ union
 struct __ecereNameSpace__ecere__com__Method * method;
 struct __ecereNameSpace__ecere__com__Property * _property;
 struct __ecereNameSpace__ecere__com__Class * registered;
-};
+} __attribute__ ((gcc_struct));
 int id;
 int idCode;
 union
@@ -652,20 +698,20 @@ struct
 {
 struct External * pointerExternal;
 struct External * structExternal;
-};
+} __attribute__ ((gcc_struct));
 struct
 {
 struct External * externalGet;
 struct External * externalSet;
 struct External * externalPtr;
 struct External * externalIsSet;
-};
+} __attribute__ ((gcc_struct));
 struct
 {
 struct External * methodExternal;
 struct External * methodCodeExternal;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 unsigned int imported;
 unsigned int declaredStructSym;
 struct __ecereNameSpace__ecere__com__Class * _class;
@@ -691,7 +737,8 @@ struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
-};
+struct Expression * propCategory;
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
 
@@ -707,7 +754,7 @@ struct
 {
 struct __ecereNameSpace__ecere__sys__OldList members;
 char *  enumName;
-};
+} __attribute__ ((gcc_struct));
 struct
 {
 struct Type * returnType;
@@ -715,13 +762,13 @@ struct __ecereNameSpace__ecere__sys__OldList params;
 struct Symbol * thisClass;
 unsigned int staticMethod;
 struct TemplateParameter * thisClassTemplate;
-};
+} __attribute__ ((gcc_struct));
 struct
 {
 struct __ecereNameSpace__ecere__com__Method * method;
 struct __ecereNameSpace__ecere__com__Class * methodClass;
 struct __ecereNameSpace__ecere__com__Class * usedClass;
-};
+} __attribute__ ((gcc_struct));
 struct
 {
 struct Type * arrayType;
@@ -729,10 +776,10 @@ int arraySize;
 struct Expression * arraySizeExp;
 unsigned int freeExp;
 struct Symbol * enumClass;
-};
+} __attribute__ ((gcc_struct));
 struct Type * type;
 struct TemplateParameter * templateParameter;
-};
+} __attribute__ ((gcc_struct));
 unsigned int isSigned;
 int kind;
 unsigned int constant;
@@ -752,7 +799,7 @@ unsigned int offset;
 unsigned int keepCast;
 unsigned int passAsTemplate;
 int bitFieldCount;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
 
@@ -810,7 +857,9 @@ struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
 struct __ecereNameSpace__ecere__com__Class * templateClass;
 struct __ecereNameSpace__ecere__sys__OldList templatized;
 int numParams;
-};
+} __attribute__ ((gcc_struct));
+
+extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
 
@@ -819,7 +868,7 @@ struct __ecereNameSpace__ecere__com__Instance
 int (* *  _vTbl)();
 struct __ecereNameSpace__ecere__com__Class * _class;
 int _refCount;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
 
@@ -842,7 +891,7 @@ struct __ecereNameSpace__ecere__sys__OldList members;
 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
 int memberOffset;
 int structAlignment;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
 
@@ -852,7 +901,7 @@ unsigned char *  _buffer;
 unsigned int count;
 unsigned int _size;
 unsigned int pos;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
 
@@ -864,7 +913,7 @@ struct
 {
 char *  dataTypeString;
 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-};
+} __attribute__ ((gcc_struct));
 struct __ecereNameSpace__ecere__com__DataValue expression;
 struct
 {
@@ -874,12 +923,12 @@ union
 struct __ecereNameSpace__ecere__com__DataMember * member;
 struct __ecereNameSpace__ecere__com__Property * prop;
 struct __ecereNameSpace__ecere__com__Method * method;
-};
-};
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
-typedef unsigned int size_t;
+typedef uintptr_t size_t;
 
 void exit(int status);
 
@@ -897,6 +946,11 @@ long long int strtoll(const char * nptr, char ** endptr, int base);
 
 unsigned long long int strtoull(const char * nptr, char ** endptr, int base);
 
+enum yytokentype
+{
+IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, LONG = 294, SIGNED = 295, UNSIGNED = 296, FLOAT = 297, DOUBLE = 298, CONST = 299, VOLATILE = 300, VOID = 301, VALIST = 302, STRUCT = 303, UNION = 304, ENUM = 305, ELLIPSIS = 306, CASE = 307, DEFAULT = 308, IF = 309, SWITCH = 310, WHILE = 311, DO = 312, FOR = 313, GOTO = 314, CONTINUE = 315, BREAK = 316, RETURN = 317, IFX = 318, ELSE = 319, CLASS = 320, THISCLASS = 321, CLASS_NAME = 322, PROPERTY = 323, SETPROP = 324, GETPROP = 325, NEWOP = 326, RENEW = 327, DELETE = 328, EXT_DECL = 329, EXT_STORAGE = 330, IMPORT = 331, DEFINE = 332, VIRTUAL = 333, ATTRIB = 334, PUBLIC = 335, PRIVATE = 336, TYPED_OBJECT = 337, ANY_OBJECT = 338, _INCREF = 339, EXTENSION = 340, ASM = 341, TYPEOF = 342, WATCH = 343, STOPWATCHING = 344, FIREWATCHERS = 345, WATCHABLE = 346, CLASS_DESIGNER = 347, CLASS_NO_EXPANSION = 348, CLASS_FIXED = 349, ISPROPSET = 350, CLASS_DEFAULT_PROPERTY = 351, PROPERTY_CATEGORY = 352, CLASS_DATA = 353, CLASS_PROPERTY = 354, SUBCLASS = 355, NAMESPACE = 356, NEW0OP = 357, RENEW0 = 358, VAARG = 359, DBTABLE = 360, DBFIELD = 361, DBINDEX = 362, DATABASE_OPEN = 363, ALIGNOF = 364, ATTRIB_DEP = 365, __ATTRIB = 366
+};
+
 typedef union YYSTYPE
 {
 int specifierType;
@@ -918,6 +972,9 @@ struct FunctionDefinition * function;
 struct External * external;
 struct Context * context;
 struct AsmField * asmField;
+struct Attrib * attrib;
+struct ExtDecl * extDecl;
+struct Attribute * attribute;
 struct Instantiation * instance;
 struct MembersInit * membersInit;
 struct MemberInit * memberInit;
@@ -934,7 +991,7 @@ struct TemplateDatatype * templateDatatype;
 struct DBTableEntry * dbtableEntry;
 struct DBIndexItem * dbindexItem;
 struct DBTableDef * dbtableDef;
-} YYSTYPE;
+} __attribute__ ((gcc_struct)) YYSTYPE;
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
 
@@ -945,7 +1002,7 @@ struct Enumerator * next;
 struct Location loc;
 struct Identifier * id;
 struct Expression * exp;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
 
@@ -956,7 +1013,7 @@ struct InitDeclarator * next;
 struct Location loc;
 struct Declarator * declarator;
 struct Initializer * initializer;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
 
@@ -967,7 +1024,11 @@ struct AsmField * next;
 struct Location loc;
 char *  command;
 struct Expression * expression;
-};
+} __attribute__ ((gcc_struct));
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
+
+struct Attribute;
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
 
@@ -991,7 +1052,7 @@ unsigned int isDestructor;
 unsigned int dontMangle;
 int id;
 int idCode;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
 
@@ -1005,8 +1066,8 @@ union
 {
 struct __ecereNameSpace__ecere__sys__OldList *  dataMembers;
 struct ClassFunction * function;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
 
@@ -1021,7 +1082,7 @@ struct Initializer * initializer;
 unsigned int used;
 unsigned int variable;
 unsigned int takeOutExp;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
 
@@ -1039,8 +1100,8 @@ struct Statement * issetStmt;
 struct Symbol * symbol;
 unsigned int conversion;
 unsigned int isWatchable;
-char *  category;
-};
+struct Expression * category;
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
 
@@ -1052,7 +1113,7 @@ struct Location loc;
 struct Statement * compound;
 struct __ecereNameSpace__ecere__sys__OldList *  properties;
 unsigned int deleteWatch;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
 
@@ -1075,11 +1136,11 @@ struct
 {
 struct Identifier * id;
 struct Initializer * initializer;
-};
-};
+} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct));
 int memberAccess;
 void *  object;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
 
@@ -1140,17 +1201,14 @@ struct __ecereNameSpace__ecere__com__Class * containerClass;
 
 unsigned int thisClassParams = 0x1;
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
-
-struct __ecereNameSpace__ecere__sys__TempFile
-{
-char __ecere_padding[24];
-};
+unsigned int internalValueCounter;
 
 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
 
 extern int strlen(const char * );
 
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
+
 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
 
 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
@@ -1175,132 +1233,6 @@ string[count] = '\0';
 }
 }
 
-extern int isspace(int c);
-
-long long _strtoi64(char * string, char ** endString, int base)
-{
-long long value = 0;
-int sign = 1;
-int c;
-char ch;
-
-for(c = 0; (ch = string[c]) && isspace(ch); c++)
-;
-if(ch == '+')
-c++;
-else if(ch == '-')
-{
-sign = -1;
-c++;
-}
-;
-if(!base)
-{
-if(ch == (char)0 && string[c + 1] == 'x')
-{
-base = 16;
-c += 2;
-}
-else if(ch == '0')
-{
-base = 8;
-c++;
-}
-else
-base = 10;
-}
-for(; (ch = string[c]); c++)
-{
-if(ch == '0')
-ch = (char)0;
-else if(ch >= '1' && ch <= '9')
-ch -= '1';
-else if(ch >= 'a' && ch <= 'z')
-ch -= 'a';
-else if(ch >= 'A' && ch <= 'Z')
-ch -= 'A';
-else
-{
-*endString = string + c;
-break;
-}
-if(ch < base)
-{
-value *= base;
-value += ch;
-}
-else
-{
-*endString = string + c;
-break;
-}
-}
-return sign * value;
-}
-
-uint64 _strtoui64(char * string, char ** endString, int base)
-{
-uint64 value = 0;
-int sign = 1;
-int c;
-char ch;
-
-for(c = 0; (ch = string[c]) && isspace(ch); c++)
-;
-if(ch == '+')
-c++;
-else if(ch == '-')
-{
-sign = -1;
-c++;
-}
-;
-if(!base)
-{
-if(ch == (char)0 && string[c + 1] == 'x')
-{
-base = 16;
-c += 2;
-}
-else if(ch == '0')
-{
-base = 8;
-c++;
-}
-else
-base = 10;
-}
-for(; (ch = string[c]); c++)
-{
-if(ch == '0')
-ch = (char)0;
-else if(ch >= '1' && ch <= '9')
-ch -= '1';
-else if(ch >= 'a' && ch <= 'z')
-ch -= 'a';
-else if(ch >= 'A' && ch <= 'Z')
-ch -= 'A';
-else
-{
-if(endString)
-*endString = string + c;
-break;
-}
-if(ch < base)
-{
-value *= base;
-value += ch;
-}
-else
-{
-if(endString)
-*endString = string + c;
-break;
-}
-}
-return sign * value;
-}
-
 extern struct Type * ProcessTypeString(char *  string, unsigned int staticMethod);
 
 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
@@ -1337,6 +1269,7 @@ case 1:
 case 2:
 case 3:
 case 4:
+case 22:
 if(type1->passAsTemplate && !type2->passAsTemplate)
 return 0x1;
 return type1->isSigned != type2->isSigned;
@@ -1376,12 +1309,12 @@ struct __ecereNameSpace__ecere__com__ClassProperty * parent;
 struct __ecereNameSpace__ecere__com__ClassProperty * left;
 struct __ecereNameSpace__ecere__com__ClassProperty * right;
 int depth;
-void (*  Set)(struct __ecereNameSpace__ecere__com__Class *, int);
-int (*  Get)(struct __ecereNameSpace__ecere__com__Class *);
+void (*  Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
+long long (*  Get)(struct __ecereNameSpace__ecere__com__Class *);
 char *  dataTypeString;
 struct Type * dataType;
 unsigned int constant;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
 
@@ -1399,11 +1332,10 @@ union
 {
 char *  dataTypeString;
 int memberType;
-};
+} __attribute__ ((gcc_struct));
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
 void *  param;
-char __ecere_padding[4];
-};
+} __attribute__ ((gcc_struct));
 
 extern struct Expression * GetTemplateArgExpByName(char *  paramName, struct __ecereNameSpace__ecere__com__Class * curClass, int tplType);
 
@@ -1451,7 +1383,7 @@ if(!symbol && ((!id->_class || (id->_class->name && !strcmp(id->_class->name, "p
 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
-struct __ecereNameSpace__ecere__com__ClassProperty * classProp;
+struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
 
 if(!prop)
 {
@@ -1623,7 +1555,7 @@ return __ecereNameSpace__ecere__sys__CopyString(temp);
 
 char * PrintFloat(float result)
 {
-char temp[100];
+char temp[350];
 
 sprintf(temp, "%.16ff", result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
@@ -1631,7 +1563,7 @@ return __ecereNameSpace__ecere__sys__CopyString(temp);
 
 char * PrintDouble(double result)
 {
-char temp[100];
+char temp[350];
 
 sprintf(temp, "%.16f", result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
@@ -1676,7 +1608,7 @@ unsigned int (*  Sma)(struct Expression *, struct Operand *, struct Operand *);
 unsigned int (*  GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
 unsigned int (*  SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
 unsigned int (*  Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
 
@@ -1695,12 +1627,11 @@ int i;
 unsigned int ui;
 float f;
 double d;
-unsigned char *  p;
 long long i64;
 uint64 ui64;
-};
+} __attribute__ ((gcc_struct));
 struct OpTable ops;
-};
+} __attribute__ ((gcc_struct));
 
 struct Operand GetOperand(struct Expression * exp);
 
@@ -1716,6 +1647,10 @@ if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (int)op2.i64;
 else if(op2.kind == 4)
 *value2 = (int)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (int)op2.i64;
+else if(op2.kind == 22)
+*value2 = (int)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (int)op2.s;
 else if(op2.kind == 2)
@@ -1729,7 +1664,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (int)op2.d;
 else if(op2.kind == 13)
-*value2 = (int)op2.ui;
+*value2 = (int)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1747,6 +1682,10 @@ 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 == 22 && op2.type->isSigned)
+*value2 = (unsigned int)op2.i64;
+else if(op2.kind == 22)
+*value2 = (unsigned int)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (unsigned int)op2.s;
 else if(op2.kind == 2)
@@ -1760,7 +1699,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (unsigned int)op2.d;
 else if(op2.kind == 13)
-*value2 = op2.ui;
+*value2 = (unsigned int)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1778,6 +1717,10 @@ if(op2.kind == 4 && op2.type->isSigned)
 *value2 = op2.i64;
 else if(op2.kind == 4)
 *value2 = (long long)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = op2.i64;
+else if(op2.kind == 22)
+*value2 = (long long)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (long long)op2.s;
 else if(op2.kind == 2)
@@ -1791,7 +1734,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (long long)op2.d;
 else if(op2.kind == 13)
-*value2 = (long long)op2.ui;
+*value2 = (long long)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1809,6 +1752,10 @@ if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (uint64)op2.i64;
 else if(op2.kind == 4)
 *value2 = op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (uint64)op2.i64;
+else if(op2.kind == 22)
+*value2 = op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (uint64)op2.s;
 else if(op2.kind == 2)
@@ -1822,7 +1769,77 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (uint64)op2.d;
 else if(op2.kind == 13)
-*value2 = (uint64)op2.ui;
+*value2 = op2.ui64;
+else
+return 0x0;
+return 0x1;
+}
+
+unsigned int GetIntPtr(struct Expression * exp, intptr_t * value2)
+{
+struct Operand op2 = GetOperand(exp);
+
+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)
+*value2 = (intptr_t)op2.i64;
+else if(op2.kind == 4)
+*value2 = (intptr_t)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (intptr_t)op2.i64;
+else if(op2.kind == 22)
+*value2 = (intptr_t)op2.ui64;
+else if(op2.kind == 2 && op2.type->isSigned)
+*value2 = (intptr_t)op2.s;
+else if(op2.kind == 2)
+*value2 = (intptr_t)op2.us;
+else if(op2.kind == 1 && op2.type->isSigned)
+*value2 = (intptr_t)op2.c;
+else if(op2.kind == 1)
+*value2 = (intptr_t)op2.uc;
+else if(op2.kind == 6)
+*value2 = (intptr_t)op2.f;
+else if(op2.kind == 7)
+*value2 = (intptr_t)op2.d;
+else if(op2.kind == 13)
+*value2 = (intptr_t)op2.ui64;
+else
+return 0x0;
+return 0x1;
+}
+
+unsigned int GetUIntPtr(struct Expression * exp, uintptr_t * value2)
+{
+struct Operand op2 = GetOperand(exp);
+
+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)
+*value2 = (uintptr_t)op2.i64;
+else if(op2.kind == 4)
+*value2 = (uintptr_t)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (uintptr_t)op2.i64;
+else if(op2.kind == 22)
+*value2 = (uintptr_t)op2.ui64;
+else if(op2.kind == 2 && op2.type->isSigned)
+*value2 = (uintptr_t)op2.s;
+else if(op2.kind == 2)
+*value2 = (uintptr_t)op2.us;
+else if(op2.kind == 1 && op2.type->isSigned)
+*value2 = (uintptr_t)op2.c;
+else if(op2.kind == 1)
+*value2 = (uintptr_t)op2.uc;
+else if(op2.kind == 6)
+*value2 = (uintptr_t)op2.f;
+else if(op2.kind == 7)
+*value2 = (uintptr_t)op2.d;
+else if(op2.kind == 13)
+*value2 = (uintptr_t)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1840,6 +1857,10 @@ if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (short)op2.i64;
 else if(op2.kind == 4)
 *value2 = (short)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (short)op2.i64;
+else if(op2.kind == 22)
+*value2 = (short)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = op2.s;
 else if(op2.kind == 2)
@@ -1853,7 +1874,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (short)op2.d;
 else if(op2.kind == 13)
-*value2 = (short)op2.ui;
+*value2 = (short)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1871,6 +1892,10 @@ 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 == 22 && op2.type->isSigned)
+*value2 = (unsigned short)op2.i64;
+else if(op2.kind == 22)
+*value2 = (unsigned short)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (unsigned short)op2.s;
 else if(op2.kind == 2)
@@ -1884,7 +1909,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (unsigned short)op2.d;
 else if(op2.kind == 13)
-*value2 = (unsigned short)op2.ui;
+*value2 = (unsigned short)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1902,6 +1927,10 @@ if(op2.kind == 4 && op2.type->isSigned)
 *value2 = (char)op2.i64;
 else if(op2.kind == 4)
 *value2 = (char)op2.ui64;
+else if(op2.kind == 22 && op2.type->isSigned)
+*value2 = (char)op2.i64;
+else if(op2.kind == 22)
+*value2 = (char)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (char)op2.s;
 else if(op2.kind == 2)
@@ -1915,7 +1944,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (char)op2.d;
 else if(op2.kind == 13)
-*value2 = (char)op2.ui;
+*value2 = (char)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1933,6 +1962,10 @@ 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 == 22 && op2.type->isSigned)
+*value2 = (unsigned char)op2.i64;
+else if(op2.kind == 22)
+*value2 = (unsigned char)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (unsigned char)op2.s;
 else if(op2.kind == 2)
@@ -1946,7 +1979,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (unsigned char)op2.d;
 else if(op2.kind == 13)
-*value2 = (unsigned char)op2.ui;
+*value2 = (unsigned char)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1964,6 +1997,10 @@ 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 == 22 && op2.type->isSigned)
+*value2 = (float)(float)op2.i64;
+else if(op2.kind == 22)
+*value2 = (float)(float)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (float)(float)op2.s;
 else if(op2.kind == 2)
@@ -1977,7 +2014,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (float)op2.d;
 else if(op2.kind == 13)
-*value2 = (float)(float)op2.ui;
+*value2 = (float)(float)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -1995,6 +2032,10 @@ 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 == 22 && op2.type->isSigned)
+*value2 = (double)(double)op2.i64;
+else if(op2.kind == 22)
+*value2 = (double)(double)op2.ui64;
 else if(op2.kind == 2 && op2.type->isSigned)
 *value2 = (double)(double)op2.s;
 else if(op2.kind == 2)
@@ -2008,7 +2049,7 @@ else if(op2.kind == 6)
 else if(op2.kind == 7)
 *value2 = (double)op2.d;
 else if(op2.kind == 13)
-*value2 = (double)(double)op2.ui;
+*value2 = (double)(double)op2.ui64;
 else
 return 0x0;
 return 0x1;
@@ -2018,6 +2059,8 @@ void ComputeExpression(struct Expression * exp);
 
 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class);
 
+extern int targetBits;
+
 int ComputeTypeSize(struct Type * type);
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
@@ -2038,7 +2081,7 @@ int type;
 int size;
 int pos;
 uint64 mask;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
 
@@ -2047,7 +2090,7 @@ struct __ecereNameSpace__ecere__sys__OldLink
 struct __ecereNameSpace__ecere__sys__OldLink * prev;
 struct __ecereNameSpace__ecere__sys__OldLink * next;
 void *  data;
-};
+} __attribute__ ((gcc_struct));
 
 void FinishTemplatesContext(struct Context * context);
 
@@ -2056,12 +2099,22 @@ void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, un
 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
 
-if(member || ((_class->type == 2 || _class->type == 0 || _class->type == 1 || _class->type == 5) && (_class->type == 2 || _class->structSize == _class->offset) && _class->computeSize))
+if(member || ((_class->type == 2 || _class->type == 0 || _class->type == 1 || _class->type == 5) && (_class->type == 2 || (!_class->structSize || _class->structSize == _class->offset)) && _class->computeSize))
 {
 int c;
 int unionMemberOffset = 0;
 int bitFields = 0;
 
+if(member)
+{
+member->memberOffset = 0;
+if(targetBits < sizeof(void *) * 8)
+member->structAlignment = 0;
+}
+else if(targetBits < sizeof(void *) * 8)
+_class->structAlignment = 0;
+if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
+_class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
 if(!member && _class->destructionWatchOffset)
 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
 {
@@ -2197,24 +2250,38 @@ _class->memberOffset += size;
 }
 else
 {
+int alignment;
+
 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 0x1);
+alignment = dataMember->structAlignment;
 if(isMember)
 {
-int __simpleStruct2;
-int __simpleStruct0, __simpleStruct1;
+int __simpleStruct0;
 
-member->structAlignment = (__simpleStruct0 = member->structAlignment, __simpleStruct1 = dataMember->structAlignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+if(alignment)
+{
+int __simpleStruct0;
+
+if(member->memberOffset % alignment)
+member->memberOffset += alignment - (member->memberOffset % alignment);
+member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
+}
 dataMember->offset = member->memberOffset;
 if(member->type == 1)
-unionMemberOffset = (__simpleStruct2 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct2) ? unionMemberOffset : __simpleStruct2);
+unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
 else
 member->memberOffset += dataMember->memberOffset;
 }
 else
 {
-int __simpleStruct0, __simpleStruct1;
+if(alignment)
+{
+int __simpleStruct0;
 
-_class->structAlignment = (__simpleStruct0 = _class->structAlignment, __simpleStruct1 = dataMember->structAlignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
+if(_class->memberOffset % alignment)
+_class->memberOffset += alignment - (_class->memberOffset % alignment);
+_class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
+}
 dataMember->offset = _class->memberOffset;
 _class->memberOffset += dataMember->memberOffset;
 }
@@ -2268,7 +2335,14 @@ if(!isMember)
 {
 if(_class->type != 2)
 {
-_class->structSize = (_class->base ? (_class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize) : 0) + _class->memberOffset;
+int extra = 0;
+
+if(_class->structAlignment)
+{
+if(_class->memberOffset % _class->structAlignment)
+extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
+}
+_class->structSize = (_class->base ? (_class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize) : 0) + _class->memberOffset + extra;
 if(!member)
 {
 struct __ecereNameSpace__ecere__com__Property * prop;
@@ -2319,7 +2393,7 @@ struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
 
@@ -2336,18 +2410,19 @@ char *  name;
 void *  library;
 void *  Unload;
 int importType;
+int origImportType;
 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
-};
+} __attribute__ ((gcc_struct));
 
 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);
 }
 
@@ -2355,7 +2430,9 @@ extern unsigned int inCompiler;
 
 extern void Compiler_Error(char *  format, ...);
 
-extern int __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
+extern char *  __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char *  string, char *  stringAndContext);
+
+extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
 
 int ComputeTypeSize(struct Type * type)
 {
@@ -2375,6 +2452,9 @@ break;
 case 4:
 type->alignment = size = sizeof(long long);
 break;
+case 22:
+type->alignment = size = targetBits / 8;
+break;
 case 5:
 type->alignment = size = sizeof(long);
 break;
@@ -2406,12 +2486,12 @@ _class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
 size = type->alignment = ComputeTypeSize(_class->dataType);
 }
 else
-size = type->alignment = sizeof(struct __ecereNameSpace__ecere__com__Instance **);
+size = type->alignment = targetBits / 8;
 break;
 }
 case 13:
 case 19:
-size = type->alignment = sizeof(void *);
+size = type->alignment = targetBits / 8;
 break;
 case 12:
 if(type->arraySizeExp)
@@ -2428,7 +2508,7 @@ type->arraySizeExp->expType = (((void *)0));
 yylloc = type->arraySizeExp->loc;
 if(inCompiler)
 PrintExpression(type->arraySizeExp, expression);
-Compiler_Error("Array size not constant int (%s)\n", expression);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Array size not constant int (%s)\n", (((void *)0))), expression);
 yylloc = oldLoc;
 }
 GetInt(type->arraySizeExp, &type->arraySize);
@@ -2437,7 +2517,7 @@ else if(type->enumClass)
 {
 if(type->enumClass && type->enumClass->registered && type->enumClass->registered->type == 4)
 {
-type->arraySize = __ecereNameSpace__ecere__com__eClass_GetProperty(type->enumClass->registered, "enumSize");
+type->arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->enumClass->registered, "enumSize");
 }
 else
 type->arraySize = 0;
@@ -2495,14 +2575,17 @@ struct TemplateParameter * param = type->templateParameter;
 struct Type * baseType = ProcessTemplateParameterType(param);
 
 if(baseType)
+{
 size = ComputeTypeSize(baseType);
+type->alignment = baseType->alignment;
+}
 else
-size = sizeof(uint64);
+type->alignment = size = sizeof(uint64);
 break;
 }
 case 15:
 {
-size = sizeof(enum
+type->alignment = size = sizeof(enum
 {
 test
 });
@@ -2510,7 +2593,7 @@ break;
 }
 case 21:
 {
-size = sizeof(void *);
+type->alignment = size = targetBits / 8;
 break;
 }
 }
@@ -2546,7 +2629,7 @@ extern struct Declarator * MkDeclaratorArray(struct Declarator * declarator, str
 
 extern struct Expression * MkExpConstant(char *  string);
 
-int AddMembers(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember, unsigned int * retSize, struct __ecereNameSpace__ecere__com__Class * topClass)
+int AddMembers(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember, unsigned int * retSize, struct __ecereNameSpace__ecere__com__Class * topClass, unsigned int * addedPadding)
 {
 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
 unsigned int totalSize = 0;
@@ -2555,12 +2638,14 @@ int alignment, size;
 struct __ecereNameSpace__ecere__com__DataMember * member;
 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
 
+if(addedPadding)
+*addedPadding = 0x0;
 if(!isMember && _class->base)
 {
 maxSize = _class->structSize;
 {
 if(_class->type == 1 || _class->type == 5)
-AddMembers(declarations, _class->base, 0x0, &totalSize, topClass);
+AddMembers(declarations, _class->base, 0x0, &totalSize, topClass, (((void *)0)));
 else
 maxSize -= _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
 }
@@ -2608,7 +2693,7 @@ case 2:
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
 
 size = 0;
-AddMembers(list, (struct __ecereNameSpace__ecere__com__Class *)member, 0x1, &size, topClass);
+AddMembers(list, (struct __ecereNameSpace__ecere__com__Class *)member, 0x1, &size, topClass, (((void *)0)));
 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, (((void *)0)), (((void *)0)))));
 alignment = member->structAlignment;
@@ -2634,10 +2719,19 @@ else
 }
 else if(totalSize < maxSize && _class->type != 1000)
 {
+int autoPadding = 0;
+
+if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
+autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
+if(totalSize + autoPadding < maxSize)
+{
 char sizeString[50];
 
 sprintf(sizeString, "%d", maxSize - totalSize);
-ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(289)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
+ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
+if(addedPadding)
+*addedPadding = 0x1;
+}
 }
 if(context)
 FinishTemplatesContext(context);
@@ -2689,6 +2783,8 @@ extern void FullClassNameCat(char *  output, char *  className, unsigned int inc
 
 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* )(void * ));
 
+extern void FreeClassDef(struct ClassDef * def);
+
 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
 
 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
@@ -2709,9 +2805,9 @@ struct External * external = (((void *)0));
 struct Symbol * classSym = FindClass(name);
 
 if(!inCompiler || !classSym)
-return (((void *)0));
+return ;
 if(classSym->registered && (classSym->registered->type == 2 || classSym->registered->type == 3 || classSym->registered->type == 4))
-return (((void *)0));
+return ;
 if(classSym->registered && classSym->imported && !classSym->declaredStructSym)
 {
 struct Declaration * decl;
@@ -2728,19 +2824,21 @@ if(classSym->registered->templateClass)
 DeclareStruct(classSym->registered->templateClass->fullName, skipNoHead);
 classSym->declaring--;
 }
-return (((void *)0));
+return ;
 }
 DeclareMembers(classSym->registered, 0x0);
 structName[0] = (char)0;
 FullClassNameCat(structName, name, 0x0);
 if(!skipNoHead)
 {
+unsigned int addedPadding = 0x0;
+
 classSym->declaredStructSym = 0x1;
 declarations = MkList();
-AddMembers(declarations, classSym->registered, 0x0, (((void *)0)), classSym->registered);
-if(!(*declarations).count)
+AddMembers(declarations, classSym->registered, 0x0, (((void *)0)), classSym->registered, &addedPadding);
+if(!(*declarations).count || ((*declarations).count == 1 && addedPadding))
 {
-FreeList(declarations, (((void *)0)));
+FreeList(declarations, FreeClassDef);
 declarations = (((void *)0));
 }
 }
@@ -2844,7 +2942,7 @@ char *  name;
 unsigned int isVirtual;
 unsigned int hasSet;
 unsigned int hasGet;
-};
+} __attribute__ ((gcc_struct));
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
 
@@ -2902,7 +3000,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)
@@ -2964,11 +3062,11 @@ specifiers = MkList();
 }
 d = MkDeclaratorFunction(d, params);
 if(dllImport)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(285));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(286));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
 if(simple)
-ListAdd(specifiers, MkSpecifier(301));
+ListAdd(specifiers, MkSpecifier(VOID));
 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
 decl = MkDeclaration(specifiers, declarators);
 external = MkExternalDeclaration(decl);
@@ -3031,11 +3129,11 @@ DeclareStruct(spec->name, 0x0);
 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
 specifiers = MkList();
 if(dllImport)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(285));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(286));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
 if(!prop->conversion || prop->_class->type == 1)
-ListAdd(specifiers, MkSpecifier(301));
+ListAdd(specifiers, MkSpecifier(VOID));
 else
 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
 decl = MkDeclaration(specifiers, declarators);
@@ -3057,9 +3155,9 @@ struct External * external;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
 
 if(imported)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(285));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
 else
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(286));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
 ListAdd(specifiers, MkSpecifierName("Property"));
 {
 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
@@ -3111,7 +3209,7 @@ type = source;
 source->refCount++;
 }
 else
-Compiler_Error("cannot dereference type\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot dereference type\n", (((void *)0))));
 }
 return type;
 }
@@ -3248,7 +3346,7 @@ break;
 if(type && type->kind == 20 && type->templateParameter->type == 0 && _class->templateArgs)
 {
 int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * sClass;
 
 for(sClass = _class; sClass; sClass = sClass->base)
@@ -3433,12 +3531,12 @@ char expString[10240];
 expString[0] = '\0';
 PrintExpression(member->initializer->exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-Compiler_Error("unresolved symbol used as an instance method %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
 }
 }
 else if(!MatchTypes(member->initializer->exp->expType, type, (((void *)0)), (((void *)0)), _class, 0x1, 0x1, 0x0, 0x0))
 {
-Compiler_Error("incompatible instance method %s\n", ident->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible instance method %s\n", (((void *)0))), ident->string);
 }
 }
 else if(member->initializer)
@@ -3470,17 +3568,17 @@ if(ident)
 {
 if(method)
 {
-Compiler_Error("couldn't find virtual method %s in class %s\n", ident->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
 }
 else if(_class)
 {
-Compiler_Error("couldn't find member %s in class %s\n", ident->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
 if(inCompiler)
 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
 }
 }
 else if(_class)
-Compiler_Error("too many initializers for instantiation of class %s\n", _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
 }
 }
 }
@@ -3586,7 +3684,7 @@ DeclareType(symbol->type, 0x1, 0x1);
 }
 else if(classSym)
 {
-Compiler_Error("couldn't find virtual method %s in class %s\n", unmangled, classSym->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
 }
 }
 createdExternal = ProcessClassFunction(classSym ? classSym->registered : (((void *)0)), members->function, ast, afterExternal, 0x1);
@@ -3700,7 +3798,7 @@ struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(str
 {
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
 int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * sClass;
 
 for(sClass = _class; sClass; sClass = sClass->base)
@@ -3740,13 +3838,13 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType;
 
 struct TemplatedType
 {
-unsigned int key;
+uintptr_t key;
 struct __ecereNameSpace__ecere__sys__BTNode * parent;
 struct __ecereNameSpace__ecere__sys__BTNode * left;
 struct __ecereNameSpace__ecere__sys__BTNode * right;
 int depth;
 struct TemplateParameter * param;
-};
+} __attribute__ ((gcc_struct));
 
 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
 
@@ -3764,7 +3862,7 @@ for(; param; param = param->next)
 {
 if(param->type == 0 && param->identifier)
 {
-struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (unsigned int)param->identifier->string, type->param = param, type);
+struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
 
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
 }
@@ -3789,7 +3887,7 @@ if(!param)
 {
 p->param = param = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter), ((struct TemplateParameter *)__ecereTemp1)->identifier = MkIdentifier(p->name), ((struct TemplateParameter *)__ecereTemp1)->type = p->type, ((struct TemplateParameter *)__ecereTemp1)->dataTypeString = p->dataTypeString, ((struct TemplateParameter *)__ecereTemp1));
 }
-type = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), ((struct TemplatedType *)__ecereTemp1)->key = (unsigned int)p->name, ((struct TemplatedType *)__ecereTemp1)->param = param, ((struct TemplatedType *)__ecereTemp1));
+type = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), ((struct TemplatedType *)__ecereTemp1)->key = (uintptr_t)p->name, ((struct TemplatedType *)__ecereTemp1)->param = param, ((struct TemplatedType *)__ecereTemp1));
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
 }
 }
@@ -3856,7 +3954,7 @@ struct MethodImport * prev;
 struct MethodImport * next;
 char *  name;
 unsigned int isVirtual;
-};
+} __attribute__ ((gcc_struct));
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
 
@@ -3885,7 +3983,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;
@@ -3911,7 +4009,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;
 }
 }
@@ -3928,12 +4026,12 @@ struct External * external;
 specifiers = MkList();
 declarators = MkList();
 if(dllImport)
-ListAdd(specifiers, MkSpecifier(285));
+ListAdd(specifiers, MkSpecifier(EXTERN));
 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
-ListAdd(specifiers, MkSpecifier(286));
+ListAdd(specifiers, MkSpecifier(STATIC));
 if(method->type == 1)
 {
-ListAdd(specifiers, MkSpecifier(291));
+ListAdd(specifiers, MkSpecifier(INT));
 d = MkDeclaratorIdentifier(MkIdentifier(name));
 }
 else
@@ -3971,7 +4069,7 @@ struct TypeName * thisParam = MkTypeName(MkListOne(MkSpecifierName(method->dataT
 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->function.parameters).first);
 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
 
-if(firstSpec && firstSpec->type == 0 && firstSpec->specifier == 301 && !firstParam->declarator)
+if(firstSpec && firstSpec->type == 0 && firstSpec->specifier == VOID && !firstParam->declarator)
 {
 struct TypeName * param = (*funcDecl->function.parameters).first;
 
@@ -4113,7 +4211,7 @@ struct Specifier * spec;
 
 for(spec = specs->first; spec; spec = spec->next)
 {
-if(spec->type == 0 && spec->specifier == 321)
+if(spec->type == 0 && spec->specifier == THISCLASS)
 {
 spec->type = 1;
 spec->name = ReplaceThisClass(_class);
@@ -4136,7 +4234,7 @@ struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
 char *  dataTypeString;
 struct Type * dataType;
 void *  symbol;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct Context * globalContext;
 
@@ -4147,7 +4245,7 @@ struct FunctionImport
 struct FunctionImport * prev;
 struct FunctionImport * next;
 char *  name;
-};
+} __attribute__ ((gcc_struct));
 
 unsigned int DeclareFunction(struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
 {
@@ -4187,7 +4285,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);
@@ -4203,17 +4301,17 @@ struct External * external;
 
 specifiers = MkList();
 declarators = MkList();
-ListAdd(specifiers, MkSpecifier(285));
+ListAdd(specifiers, MkSpecifier(EXTERN));
 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;
 
 for(spec = (*specifiers).first; spec; spec = spec->next)
-if(spec->type == 5 && !strcmp(spec->name, "dllexport"))
+if(spec->type == 5 && spec->extDecl && spec->extDecl->type == 0 && !strcmp(spec->extDecl->s, "dllexport"))
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
 FreeSpecifier(spec);
@@ -4224,7 +4322,7 @@ funcDecl = GetFuncDecl(d);
 if(funcDecl && !funcDecl->function.parameters)
 {
 funcDecl->function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(301)), (((void *)0))));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
 }
 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
 {
@@ -4261,14 +4359,14 @@ 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;
 
 struct GlobalData
 {
-unsigned int key;
+uintptr_t key;
 struct __ecereNameSpace__ecere__sys__BTNode * parent;
 struct __ecereNameSpace__ecere__sys__BTNode * left;
 struct __ecereNameSpace__ecere__sys__BTNode * right;
@@ -4278,7 +4376,7 @@ char *  dataTypeString;
 struct Type * dataType;
 void *  symbol;
 char *  fullName;
-};
+} __attribute__ ((gcc_struct));
 
 void DeclareGlobalData(struct GlobalData * data)
 {
@@ -4305,7 +4403,7 @@ struct External * external;
 
 specifiers = MkList();
 declarators = MkList();
-ListAdd(specifiers, MkSpecifier(285));
+ListAdd(specifiers, MkSpecifier(EXTERN));
 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
@@ -4332,7 +4430,7 @@ struct Conversion * prev, * next;
 struct __ecereNameSpace__ecere__com__Property * convert;
 unsigned int isGet;
 struct Type * resultType;
-};
+} __attribute__ ((gcc_struct));
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Conversion;
 
@@ -4558,9 +4656,11 @@ else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1))
 return 0x1;
 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 3))
 return 0x1;
-else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || dest->kind == 5 || dest->kind == 4))
+else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 3))
+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))
 return 0x1;
-else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || dest->kind == 4))
+else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || source->kind == 4 || source->kind == 22))
 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)))
 {
@@ -4589,9 +4689,9 @@ if((dest->staticMethod || (!dest->thisClass && !owningClassDest)) && !(source->s
 if(!paramDest || (!(paramDest->kind == 13 && paramDest->type && paramDest->type->kind == 0) && (paramDest->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(source->thisClass ? source->thisClass->registered : owningClassSource, paramDest->_class->registered))))
 {
 if(paramDest && paramDest->kind == 8)
-Compiler_Error("method class must be derived from %s\n", paramDest->_class->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class must be derived from %s\n", (((void *)0))), paramDest->_class->string);
 else
-Compiler_Error("method class should not take an object\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class should not take an object\n", (((void *)0))));
 return 0x0;
 }
 paramDest = paramDest->next;
@@ -4604,7 +4704,7 @@ if(dest->thisClass)
 {
 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->_class->registered, dest->thisClass->registered))
 {
-Compiler_Error("method class must be derived from %s\n", dest->thisClass->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class must be derived from %s\n", (((void *)0))), dest->thisClass->string);
 return 0x0;
 }
 }
@@ -4613,9 +4713,9 @@ else
 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->_class->registered, owningClassDest)))
 {
 if(owningClassDest)
-Compiler_Error("%s expected to be derived from method class\n", owningClassDest->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
 else
-Compiler_Error("overriding class expected to be derived from method class\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "overriding class expected to be derived from method class\n", (((void *)0))));
 return 0x0;
 }
 }
@@ -4627,7 +4727,7 @@ if(dest->thisClass)
 {
 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->thisClass ? source->thisClass->registered : owningClassSource, dest->thisClass->registered))
 {
-Compiler_Error("method class must be derived from %s\n", dest->thisClass->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class must be derived from %s\n", (((void *)0))), dest->thisClass->string);
 return 0x0;
 }
 }
@@ -4635,7 +4735,7 @@ else
 {
 if(source->thisClass && source->thisClass->registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->thisClass->registered, owningClassDest))
 {
-Compiler_Error("%s expected to be derived from method class\n", source->thisClass->registered->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "%s expected to be derived from method class\n", (((void *)0))), source->thisClass->registered->fullName);
 return 0x0;
 }
 }
@@ -4643,14 +4743,14 @@ return 0x0;
 }
 if(!MatchTypes(source->returnType, dest->returnType, (((void *)0)), (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
 {
-Compiler_Warning("incompatible return type for function\n");
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible return type for function\n", (((void *)0))));
 return 0x0;
 }
 for(; paramDest; paramDest = paramDest->next)
 {
 if(!paramSource)
 {
-Compiler_Error("not enough parameters\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "not enough parameters\n", (((void *)0))));
 return 0x0;
 }
 {
@@ -4661,7 +4761,7 @@ struct Type * type = paramDestType;
 if(paramDest->kind == 20 && paramDest->templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
 {
 int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * sClass;
 
 for(sClass = owningClassSource; sClass; sClass = sClass->base)
@@ -4699,7 +4799,7 @@ char type[1024];
 
 type[0] = (char)0;
 PrintType(paramDest, type, 0x0, 0x1);
-Compiler_Warning("incompatible parameter %s (expected %s)\n", paramSource->name, type);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
 if(paramDestType != paramDest)
 FreeType(paramDestType);
 return 0x0;
@@ -4711,7 +4811,7 @@ paramSource = paramSource->next;
 }
 if(paramSource)
 {
-Compiler_Error("too many parameters\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "too many parameters\n", (((void *)0))));
 return 0x0;
 }
 return 0x1;
@@ -4745,7 +4845,7 @@ struct __ecereNameSpace__ecere__com__BTNamedLink * left;
 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
 int depth;
 void *  data;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
 
@@ -4753,7 +4853,7 @@ struct __ecereNameSpace__ecere__com__EnumClassData
 {
 struct __ecereNameSpace__ecere__sys__OldList values;
 int largest;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
 
@@ -4763,7 +4863,7 @@ struct __ecereNameSpace__ecere__sys__NamedLink * prev;
 struct __ecereNameSpace__ecere__sys__NamedLink * next;
 char *  name;
 void *  data;
-};
+} __attribute__ ((gcc_struct));
 
 extern void FreeExpContents(struct Expression * exp);
 
@@ -4863,7 +4963,7 @@ struct __ecereNameSpace__ecere__com__SubModule * prev;
 struct __ecereNameSpace__ecere__com__SubModule * next;
 struct __ecereNameSpace__ecere__com__Instance * module;
 int importMode;
-};
+} __attribute__ ((gcc_struct));
 
 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
 {
@@ -4871,9 +4971,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;
@@ -4893,21 +4993,21 @@ unsigned int isGUIApp;
 struct __ecereNameSpace__ecere__sys__OldList allModules;
 char *  parsedCommand;
 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
-};
+} __attribute__ ((gcc_struct));
 
 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
 {
 struct __ecereNameSpace__ecere__com__Instance * module;
 
-if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + 12)))->application + 296)))->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 + 296)))->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;
@@ -5028,6 +5128,8 @@ sourceExp->_classExp.specifiers = specs;
 sourceExp->_classExp.decl = decl;
 sourceExp->expType = dest;
 dest->refCount++;
+FreeType(source);
+FreeType(dest);
 return 0x1;
 }
 }
@@ -5108,7 +5210,7 @@ sourceExp->destType->refCount++;
 if(sourceExp->expType)
 sourceExp->expType->refCount++;
 sourceExp->type = 11;
-sourceExp->cast.typeName = MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
+sourceExp->cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
 sourceExp->cast.exp = newExp;
 FreeType(sourceExp->expType);
 sourceExp->expType = (((void *)0));
@@ -5131,39 +5233,39 @@ dest->refCount++;
 }
 if(dest->kind == 7 && (source->kind == 7 || source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1))
 {
-specs = MkListOne(MkSpecifier(298));
+specs = MkListOne(MkSpecifier(DOUBLE));
 }
 else if(dest->kind == 6 && (source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 7))
 {
-specs = MkListOne(MkSpecifier(297));
+specs = MkListOne(MkSpecifier(FLOAT));
 }
 else if(dest->kind == 4 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(293));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(INT64));
 }
 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(291));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(INT));
 }
 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(290));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(SHORT));
 }
 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(289));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(CHAR));
 }
 else
 {
@@ -5174,39 +5276,39 @@ return 0x0;
 }
 else if(dest->kind == 7 && (source->kind == 7 || source->kind == 6 || source->kind == 4 || source->kind == 3 || source->kind == 15 || source->kind == 2 || source->kind == 1))
 {
-specs = MkListOne(MkSpecifier(298));
+specs = MkListOne(MkSpecifier(DOUBLE));
 }
 else if(dest->kind == 6 && (source->kind == 6 || source->kind == 15 || source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1))
 {
-specs = MkListOne(MkSpecifier(297));
+specs = MkListOne(MkSpecifier(FLOAT));
 }
 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (dest->isSigned ? (value >= -128 && value <= 127) : (value >= 0 && value <= 255)))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(289));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(CHAR));
 }
 else if(dest->kind == 2 && (source->kind == 15 || source->kind == 1 || source->kind == 2 || (source->kind == 3 && (dest->isSigned ? (value >= -32768 && value <= 32767) : (value >= 0 && value <= 65535)))))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(290));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(SHORT));
 }
 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 1 || source->kind == 3))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(291));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(INT));
 }
 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 4))
 {
 specs = MkList();
 if(!dest->isSigned)
-ListAdd(specs, MkSpecifier(296));
-ListAdd(specs, MkSpecifier(293));
+ListAdd(specs, MkSpecifier(UNSIGNED));
+ListAdd(specs, MkSpecifier(INT64));
 }
 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1))
 {
@@ -9105,6 +9207,10 @@ output[d++] = ch;
 output[d] = '\0';
 }
 
+extern long long __ecereNameSpace__ecere__com___strtoi64(char *  string, char * *  endString, int base);
+
+extern uint64 __ecereNameSpace__ecere__com___strtoui64(char *  string, char * *  endString, int base);
+
 extern double strtod(char * , char * * );
 
 struct Operand GetOperand(struct Expression * exp)
@@ -9177,12 +9283,25 @@ break;
 case 4:
 if(type->isSigned)
 {
-op.i64 = _strtoi64(exp->constant, (((void *)0)), 0);
+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 22:
+if(type->isSigned)
+{
+op.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->constant, (((void *)0)), 0);
 op.ops = intOps;
 }
 else
 {
-op.ui64 = _strtoui64(exp->constant, (((void *)0)), 0);
+op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
 op.ops = uintOps;
 }
 op.kind = 3;
@@ -9198,7 +9317,7 @@ break;
 case 12:
 case 13:
 case 8:
-op.p = (unsigned char *)strtoul(exp->constant, (((void *)0)), 0);
+op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
 op.kind = 13;
 op.ops = uintOps;
 break;
@@ -9221,8 +9340,6 @@ int a;
 
 extern int __ecereVMethodID_class_OnGetString;
 
-extern int printf(char * , ...);
-
 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
 {
 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
@@ -9313,8 +9430,15 @@ exp->constant = PrintInt64(*(long long *)ptr);
 exp->type = 2;
 break;
 }
+case 22:
+{
+FreeExpContents(exp);
+exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
+exp->type = 2;
+break;
+}
 default:
-printf("error: unhandled type populating instance\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0))));
 }
 }
 ListAdd(memberList, member);
@@ -9418,8 +9542,14 @@ exp->constant = PrintInt64(*(long long *)ptr);
 exp->type = 2;
 break;
 }
+case 22:
+{
+exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
+exp->type = 2;
+break;
+}
 default:
-printf("error: unhandled type populating instance\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0))));
 }
 }
 ListAdd(memberList, member);
@@ -9605,6 +9735,11 @@ case 4:
 GetInt64(value, (long long *)ptr);
 break;
 }
+case 22:
+{
+GetIntPtr(value, (intptr_t *)ptr);
+break;
+}
 case 6:
 {
 GetFloat(value, (float *)ptr);
@@ -9670,7 +9805,14 @@ case 4:
 {
 void (* Set)(void *, long long) = (void *)prop->Set;
 
-Set(inst->data, _strtoi64(value->constant, (((void *)0)), 0));
+Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->constant, (((void *)0)), 0));
+break;
+}
+case 22:
+{
+void (* Set)(void *, intptr_t) = (void *)prop->Set;
+
+Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->constant, (((void *)0)), 0));
 break;
 }
 }
@@ -9680,7 +9822,7 @@ else if(value->type == 3)
 char temp[1024];
 
 ReadString(temp, value->string);
-prop->Set(inst->data, temp);
+((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
 }
 }
 }
@@ -9785,6 +9927,12 @@ bits |= ((long long)part << bitMember->pos);
 else
 bits |= ((uint64)part << bitMember->pos);
 break;
+case 22:
+if(type->isSigned)
+bits |= ((intptr_t)part << bitMember->pos);
+else
+bits |= ((uintptr_t)part << bitMember->pos);
+break;
 }
 }
 }
@@ -9819,7 +9967,7 @@ FreeInstance(inst);
 
 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
 {
-if(exp->op.op == 261)
+if(exp->op.op == SIZEOF)
 {
 FreeExpContents(exp);
 exp->type = 2;
@@ -9929,42 +10077,42 @@ FreeExpContents(exp);
 op1->ops.BitXor(exp, op1, op2);
 }
 break;
-case 265:
+case LEFT_OP:
 if(op1->ops.LShift)
 {
 FreeExpContents(exp);
 op1->ops.LShift(exp, op1, op2);
 }
 break;
-case 266:
+case RIGHT_OP:
 if(op1->ops.RShift)
 {
 FreeExpContents(exp);
 op1->ops.RShift(exp, op1, op2);
 }
 break;
-case 269:
+case EQ_OP:
 if(op1->ops.Equ)
 {
 FreeExpContents(exp);
 op1->ops.Equ(exp, op1, op2);
 }
 break;
-case 270:
+case NE_OP:
 if(op1->ops.Nqu)
 {
 FreeExpContents(exp);
 op1->ops.Nqu(exp, op1, op2);
 }
 break;
-case 271:
+case AND_OP:
 if(op1->ops.And)
 {
 FreeExpContents(exp);
 op1->ops.And(exp, op1, op2);
 }
 break;
-case 272:
+case OR_OP:
 if(op1->ops.Or)
 {
 FreeExpContents(exp);
@@ -9985,14 +10133,14 @@ FreeExpContents(exp);
 op1->ops.Sma(exp, op1, op2);
 }
 break;
-case 268:
+case GE_OP:
 if(op1->ops.GrtEqu)
 {
 FreeExpContents(exp);
 op1->ops.GrtEqu(exp, op1, op2);
 }
 break;
-case 267:
+case LE_OP:
 if(op1->ops.SmaEqu)
 {
 FreeExpContents(exp);
@@ -10246,6 +10394,21 @@ Set(exp->instance->data, intValue);
 PopulateInstance(exp->instance);
 break;
 }
+case 22:
+{
+intptr_t intValue;
+void (* Set)(void *, intptr_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;
+GetIntPtr(value, &intValue);
+Set(exp->instance->data, intValue);
+PopulateInstance(exp->instance);
+break;
+}
 case 7:
 {
 double doubleValue;
@@ -10521,6 +10684,26 @@ exp->constant = PrintUInt64(value);
 exp->type = 2;
 }
 break;
+case 22:
+if(type->isSigned)
+{
+intptr_t value;
+
+GetIntPtr(e, &value);
+FreeExpContents(exp);
+exp->constant = PrintInt64((long long)value);
+exp->type = 2;
+}
+else
+{
+uintptr_t value;
+
+GetUIntPtr(e, &value);
+FreeExpContents(exp);
+exp->constant = PrintUInt64((uint64)value);
+exp->type = 2;
+}
+break;
 case 6:
 {
 float value;
@@ -10714,12 +10897,12 @@ result = 0x1;
 return result;
 }
 
-extern struct Expression * MkExpExtensionCompound(struct Statement * compound);
-
 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
 
 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
 
+extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
+
 void CheckTemplateTypes(struct Expression * exp)
 {
 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate)
@@ -10738,13 +10921,31 @@ newExp->next = (((void *)0));
 switch(exp->expType->kind)
 {
 case 7:
-exp->type = 4;
-exp->op.exp1 = (((void *)0));
+if(exp->destType->classObjectType)
+{
+if(exp->destType)
+exp->destType->refCount--;
+if(exp->expType)
+exp->expType->refCount--;
+((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+}
+else
+{
+struct __ecereNameSpace__ecere__sys__OldList * specs;
+struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
+struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
+
 context = PushContext();
-exp->op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpExtensionCompound(compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifier(298)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal")), MkInitializerAssignment(newExp))))), MkListOne(MkExpressionStmt(MkListOne(MkExpOp((((void *)0)), '&', MkExpIdentifier(MkIdentifier("__internal")))))))));
-compound->compound.context = context;
+ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
+ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
+specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
+exp->type = 25;
+exp->compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
+ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
+ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
+exp->compound->compound.context = context;
 PopContext(context);
-exp->op.op = '*';
+}
 break;
 default:
 exp->type = 11;
@@ -10769,14 +10970,31 @@ newExp->next = (((void *)0));
 switch(exp->expType->kind)
 {
 case 7:
-exp->type = 4;
-exp->op.exp1 = (((void *)0));
+if(exp->destType->classObjectType)
+{
+if(exp->destType)
+exp->destType->refCount--;
+if(exp->expType)
+exp->expType->refCount--;
+((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+}
+else
+{
+struct __ecereNameSpace__ecere__sys__OldList * specs;
+struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
+struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
+
 context = PushContext();
-exp->op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifier(298)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpExtensionCompound(compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal")), MkInitializerAssignment(newExp))))), MkListOne(MkExpressionStmt(MkListOne(MkExpOp((((void *)0)), '&', MkExpIdentifier(MkIdentifier("__internal")))))))));
-compound->compound.context = context;
+ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
+ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
+specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
+exp->type = 25;
+exp->compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
+ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
+ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
+exp->compound->compound.context = context;
 PopContext(context);
-exp->op.op = '*';
-ProcessExpressionType(exp->op.exp2);
+}
 break;
 case 8:
 {
@@ -10839,27 +11057,33 @@ break;
 
 extern int strncmp(const char * , const char * , int n);
 
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  key);
+
 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, char * nameSpace, char * name)
 {
-struct Symbol * symbol;
 int nsLen = strlen(nameSpace);
+struct Symbol * symbol;
 
-for(symbol = (struct Symbol *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(tree); symbol; symbol = (struct Symbol *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)symbol)))
+for(symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(tree, nameSpace); symbol; symbol = (struct Symbol *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)symbol)))
 {
-if(!strncmp(symbol->string, nameSpace, nsLen))
+char * s = symbol->string;
+
+if(!strncmp(s, nameSpace, nsLen))
 {
 int c;
 char * namePart;
 
-for(c = strlen(symbol->string) - 1; c >= 0; c--)
-if(symbol->string[c] == ':')
+for(c = strlen(s) - 1; c >= 0; c--)
+if(s[c] == ':')
 break;
-namePart = symbol->string + c + 1;
+namePart = s + c + 1;
 if(!strcmp(namePart, name))
 {
 return symbol;
 }
 }
+else
+break;
 }
 return (((void *)0));
 }
@@ -10883,6 +11107,10 @@ while(c >= 0 && name[c] == ':')
 c--;
 if(c >= 0)
 {
+struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
+
+if(symbol)
+return symbol;
 memcpy(nameSpace, name, c + 1);
 nameSpace[c + 1] = (char)0;
 return ScanWithNameSpace(tree, nameSpace, namePart);
@@ -10894,7 +11122,13 @@ struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere_
 return symbol;
 }
 else
+{
+struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
+
+if(symbol)
+return symbol;
 return ScanWithNameSpace(tree, "", namePart);
+}
 return (((void *)0));
 }
 
@@ -10907,7 +11141,7 @@ struct Symbol * symbol = (((void *)0));
 
 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
 {
-if(ctx == globalContext && !globalNameSpace)
+if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
 {
 symbol = (((void *)0));
 if(thisNameSpace)
@@ -10922,10 +11156,8 @@ symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curNa
 if(!symbol)
 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
 }
-else if(isStruct)
-symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->structSymbols, name);
 else
-symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, name);
+symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
 if(symbol || ctx == endContext)
 break;
 }
@@ -10955,8 +11187,8 @@ return symbol;
 
 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
 {
-if(!type->isSigned)
-ListAdd(specs, MkSpecifier(296));
+if(!type->isSigned && type->kind != 22)
+ListAdd(specs, MkSpecifier(UNSIGNED));
 switch(type->kind)
 {
 case 8:
@@ -10970,23 +11202,26 @@ GetTypeSpecs(type->_class->registered->dataType, specs);
 break;
 }
 case 7:
-ListAdd(specs, MkSpecifier(298));
+ListAdd(specs, MkSpecifier(DOUBLE));
 break;
 case 6:
-ListAdd(specs, MkSpecifier(297));
+ListAdd(specs, MkSpecifier(FLOAT));
 break;
 case 1:
-ListAdd(specs, MkSpecifier(289));
+ListAdd(specs, MkSpecifier(CHAR));
 break;
 case 2:
-ListAdd(specs, MkSpecifier(290));
+ListAdd(specs, MkSpecifier(SHORT));
 break;
 case 4:
-ListAdd(specs, MkSpecifier(293));
+ListAdd(specs, MkSpecifier(INT64));
+break;
+case 22:
+ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
 break;
 case 3:
 default:
-ListAdd(specs, MkSpecifier(291));
+ListAdd(specs, MkSpecifier(INT));
 break;
 }
 }
@@ -11032,6 +11267,9 @@ break;
 case 4:
 strcat(string, type->isSigned ? "int64" : "uint64");
 break;
+case 22:
+strcat(string, type->isSigned ? "intptr" : "uintptr");
+break;
 case 1:
 strcat(string, type->isSigned ? "char" : "byte");
 break;
@@ -11379,7 +11617,7 @@ else
 char constant[256];
 
 exp->type = 2;
-sprintf(constant, "%d", classProp->Get(_class));
+sprintf(constant, "%d", (int)classProp->Get(_class));
 exp->constant = __ecereNameSpace__ecere__sys__CopyString(constant);
 }
 }
@@ -11467,6 +11705,8 @@ checkedExp->next = next;
 
 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
 
+extern int printf(char * , ...);
+
 void __ecereMethod_Expression_Clear();
 
 void ApplyAnyObjectLogic(struct Expression * e)
@@ -11529,7 +11769,7 @@ char size[100];
 
 ComputeTypeSize(e->expType);
 sprintf(size, "%d", e->expType->size);
-newExp = MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(289)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), newExp), '+', MkExpCall(MkExpIdentifier(MkIdentifier("__ENDIAN_PAD")), MkListOne(MkExpConstant(size))))));
+newExp = MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), newExp), '+', MkExpCall(MkExpIdentifier(MkIdentifier("__ENDIAN_PAD")), MkListOne(MkExpConstant(size))))));
 }
 ReplaceExpContents(checkedExp, newExp);
 e->byReference = 0x1;
@@ -11559,7 +11799,21 @@ decl = SpecDeclFromString(typeString, specs, (((void *)0)));
 newExp->destType = ProcessType(specs, decl);
 curContext = context;
 e->type = 25;
-e->compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalValue")), MkInitializerAssignment(newExp))))), MkListOne(MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier("__internalValue"))))));
+if(curCompound)
+{
+char name[100];
+struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
+
+sprintf(name, "__internalValue%03X", internalValueCounter++);
+if(!curCompound->compound.declarations)
+curCompound->compound.declarations = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
+ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
+ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
+e->compound = MkCompoundStmt((((void *)0)), stmts);
+}
+else
+printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
 {
 struct Type * type = e->destType;
 
@@ -11642,7 +11896,7 @@ else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expTyp
 {
 if(destType->kind == 14)
 {
-Compiler_Error("Unspecified type\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unspecified type\n", (((void *)0))));
 }
 else if(!(destType->truth && e->expType->kind == 8 && e->expType->_class && e->expType->_class->registered && e->expType->_class->registered->type == 1))
 {
@@ -11701,7 +11955,7 @@ struct __ecereNameSpace__ecere__com__DefinedExpression * next;
 char *  name;
 char *  value;
 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
-};
+} __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, char *  name);
 
@@ -11711,8 +11965,6 @@ extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(char *  string, in
 
 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
 
-extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
-
 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
 
 extern struct Expression * CopyExpression(struct Expression * exp);
@@ -11723,11 +11975,13 @@ extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldLi
 
 static void ProcessStatement(struct Statement * stmt);
 
+extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
+
 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
 
-extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
+extern char *  __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, void * object, ...);
 
-extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
+extern char *  sourceFile;
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
 
@@ -11900,7 +12154,7 @@ else
 {
 if(inCompiler)
 {
-Compiler_Error("Recursion in defined expression %s\n", id->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Recursion in defined expression %s\n", (((void *)0))), id->string);
 }
 }
 }
@@ -11953,7 +12207,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))
@@ -12079,31 +12333,31 @@ struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ece
 switch(exp->op.op)
 {
 case '=':
-case 273:
-case 274:
-case 275:
-case 276:
-case 277:
-case 278:
-case 279:
-case 280:
-case 281:
-case 282:
+case MUL_ASSIGN:
+case DIV_ASSIGN:
+case MOD_ASSIGN:
+case ADD_ASSIGN:
+case SUB_ASSIGN:
+case LEFT_ASSIGN:
+case RIGHT_ASSIGN:
+case AND_ASSIGN:
+case XOR_ASSIGN:
+case OR_ASSIGN:
 assign = 0x1;
 break;
 case '!':
 break;
-case 271:
-case 272:
+case AND_OP:
+case OR_OP:
 boolOps = 0x1;
 boolResult = 0x1;
 break;
-case 269:
+case EQ_OP:
 case '<':
 case '>':
-case 267:
-case 268:
-case 270:
+case LE_OP:
+case GE_OP:
+case NE_OP:
 boolResult = 0x1;
 useSideType = 0x1;
 break;
@@ -12202,8 +12456,8 @@ if(inCompiler)
 PrintExpression(exp->op.exp2, expString);
 if(type1 && type1->kind == 13)
 {
-if(exp->op.op == 273 || exp->op.op == 274 || exp->op.op == 275 || exp->op.op == 278 || exp->op.op == 279 || exp->op.op == 280 || exp->op.op == 282)
-Compiler_Error("operator %s illegal on pointer\n", exp->op.op);
+if(exp->op.op == MUL_ASSIGN || exp->op.op == DIV_ASSIGN || exp->op.op == MOD_ASSIGN || exp->op.op == LEFT_ASSIGN || exp->op.op == RIGHT_ASSIGN || exp->op.op == AND_ASSIGN || exp->op.op == OR_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "operator %s illegal on pointer\n", (((void *)0))), exp->op.op);
 else if(exp->op.op == '=')
 {
 if(exp->op.exp2->destType)
@@ -12215,7 +12469,7 @@ type1->refCount++;
 }
 else
 {
-if(exp->op.op == 273 || exp->op.op == 274 || exp->op.op == 275 || exp->op.op == 278 || exp->op.op == 279)
+if(exp->op.op == MUL_ASSIGN || exp->op.op == DIV_ASSIGN || exp->op.op == MOD_ASSIGN || exp->op.op == LEFT_ASSIGN || exp->op.op == RIGHT_ASSIGN)
 ;
 else
 {
@@ -12258,20 +12512,20 @@ 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 == 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 == 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("void *: unknown size\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
 }
 else if(exp->op.exp2->expType->kind == 13 || exp->op.exp2->expType->kind == 12 || exp->op.exp2->expType->kind == 11 || exp->op.exp2->expType->kind == 16 || (type1->type->kind == 0 && exp->op.exp2->expType->kind == 8 && exp->op.exp2->expType->_class->registered && (exp->op.exp2->expType->_class->registered->type == 0 || exp->op.exp2->expType->_class->registered->type == 1 || exp->op.exp2->expType->_class->registered->type == 5)))
 {
-if(exp->op.op == 276)
-Compiler_Error("cannot add two pointers\n");
+if(exp->op.op == ADD_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot add two pointers\n", (((void *)0))));
 }
 else if((exp->op.exp2->expType->kind == 8 && type1->kind == 13 && type1->type->kind == 8 && type1->type->_class == exp->op.exp2->expType->_class && exp->op.exp2->expType->_class->registered && exp->op.exp2->expType->_class->registered->type == 1))
 {
-if(exp->op.op == 276)
-Compiler_Error("cannot add two pointers\n");
+if(exp->op.op == ADD_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot add two pointers\n", (((void *)0))));
 }
 else if(inCompiler)
 {
@@ -12283,7 +12537,7 @@ type2String[0] = '\0';
 PrintType(exp->op.exp2->expType, type1String, 0x0, 0x1);
 PrintType(type1, type2String, 0x0, 0x1);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-Compiler_Warning("incompatible expression %s (%s); expected %s\n", expString, type1String, type2String);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
 }
 }
 if(exp->op.exp2->destType == dummy)
@@ -12294,7 +12548,7 @@ exp->op.exp2->destType = (((void *)0));
 type2 = exp->op.exp2->expType;
 }
 dummy->kind = 0;
-if(exp->op.op == 261)
+if(exp->op.op == SIZEOF)
 {
 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1)->kind = 3, ((struct Type *)__ecereTemp1));
 exp->isConstant = 0x1;
@@ -12342,7 +12596,7 @@ exp->op.exp2->expType->truth = 0x1;
 }
 else if(exp->op.exp1 && exp->op.exp2 && ((useSideType) || ((!type1 || type1->kind != 8 || !strcmp(type1->_class->string, "String")) && (!type2 || type2->kind != 8 || !strcmp(type2->_class->string, "String")))))
 {
-if(type1 && type2 && ((type1->kind == 8 && strcmp(type1->_class->string, "String")) == (type2->kind == 8 && strcmp(type2->_class->string, "String"))))
+if(type1 && type2 && ((type1->kind == 8 && type1->_class && strcmp(type1->_class->string, "String")) == (type2->kind == 8 && type2->_class && strcmp(type2->_class->string, "String"))))
 {
 if(exp->op.exp2->destType)
 FreeType(exp->op.exp2->destType);
@@ -12353,7 +12607,7 @@ FreeType(exp->op.exp1->destType);
 exp->op.exp1->destType = type2;
 type2->refCount++;
 if(!boolResult && type1->kind == 8 && (!exp->destType || exp->destType->kind != 8) && type1->_class->registered && type1->_class->registered->type == 3 && type2->_class->registered && type2->_class->registered->type == 3 && type1->_class->registered != type2->_class->registered)
-Compiler_Warning("operating on %s and %s with an untyped result, assuming %s\n", type1->_class->string, type2->_class->string, type1->_class->string);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "operating on %s and %s with an untyped result, assuming %s\n", (((void *)0))), type1->_class->string, type2->_class->string, type1->_class->string);
 if(type1->kind == 13 && type1->type->kind == 20 && type2->kind != 13)
 {
 struct Expression * argExp = GetTemplateArgExp(type1->type->templateParameter, thisClass, 0x1);
@@ -12367,32 +12621,32 @@ ProcessExpressionType(exp->op.exp1);
 if(type2->kind != 13)
 {
 ProcessExpressionType(classExp);
-exp->op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->op.exp2, '*', MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), 269, MkExpConstant("5")), 272, MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), 269, MkExpConstant("0"))))), MkListOne(MkExpTypeSize(MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))))), MkExpMember(classExp, MkIdentifier("typeSize"))))))));
+exp->op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->op.exp2, '*', MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), EQ_OP, MkExpConstant("5")), OR_OP, MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), EQ_OP, MkExpConstant("0"))))), MkListOne(MkExpTypeSize(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))))), MkExpMember(classExp, MkIdentifier("typeSize"))))))));
 if(!exp->op.exp2->expType)
 type2 = exp->op.exp2->expType = ProcessTypeString("int", 0x0);
 ProcessExpressionType(exp->op.exp2);
 }
 }
 }
-if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->_class->string, "String"))) && (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 == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
 {
 if(type1->kind != 8 && type1->type->kind == 0)
-Compiler_Error("void *: unknown size\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
 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 == 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 == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
 {
 if(type2->kind != 8 && type2->type->kind == 0)
-Compiler_Error("void *: unknown size\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
 exp->expType = type2;
 if(type2)
 type2->refCount++;
 }
 else if((type1->kind == 13 && type2->kind != 13 && type2->kind != 12 && type2->kind != 11 && type2->kind != 16 && type2->kind != 8 && type2->kind != 19) || (type2->kind == 13 && type1->kind != 13 && type1->kind != 12 && type1->kind != 11 && type1->kind != 16 && type1->kind != 8 && type1->kind != 19))
 {
-Compiler_Warning("different levels of indirection\n");
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "different levels of indirection\n", (((void *)0))));
 }
 else
 {
@@ -12401,7 +12655,7 @@ unsigned int success = 0x0;
 if(type1->kind == 13 && type2->kind == 13)
 {
 if(exp->op.op == '+')
-Compiler_Error("cannot add two pointers\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot add two pointers\n", (((void *)0))));
 else if(exp->op.op == '-')
 {
 if(MatchTypes(type1->type, type2->type, (((void *)0)), (((void *)0)), (((void *)0)), 0x0, 0x0, 0x0, 0x0))
@@ -12418,7 +12672,7 @@ struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass")
 
 ProcessExpressionType(classExp);
 exp->type = 5;
-exp->list = MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->op.exp1))), exp->op.op, MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->op.exp2)))))), '/', MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), 269, MkExpIdentifier(MkIdentifier("noHeadClass"))), 272, MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), 269, MkExpIdentifier(MkIdentifier("normalClass")))))), MkListOne(MkExpTypeSize(MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))))), MkExpMember(classExp, MkIdentifier("typeSize")))))));
+exp->list = MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->op.exp1))), exp->op.op, MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->op.exp2)))))), '/', MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), EQ_OP, MkExpIdentifier(MkIdentifier("noHeadClass"))), OR_OP, MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), EQ_OP, MkExpIdentifier(MkIdentifier("normalClass")))))), MkListOne(MkExpTypeSize(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))))), MkExpMember(classExp, MkIdentifier("typeSize")))))));
 ProcessExpressionType(((struct Expression *)(*exp->list).first)->op.exp2);
 FreeType(dummy);
 return ;
@@ -12431,6 +12685,8 @@ if(!success && exp->op.exp1->type == 2)
 {
 if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp1->destType;
 if(exp->op.exp1->destType)
 exp->op.exp1->destType->refCount++;
@@ -12438,6 +12694,8 @@ success = 0x1;
 }
 else if(CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp2->destType;
 if(exp->op.exp2->destType)
 exp->op.exp2->destType->refCount++;
@@ -12448,6 +12706,8 @@ else if(!success)
 {
 if(CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp2->destType;
 if(exp->op.exp2->destType)
 exp->op.exp2->destType->refCount++;
@@ -12455,6 +12715,8 @@ success = 0x1;
 }
 else if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp1->destType;
 if(exp->op.exp1->destType)
 exp->op.exp1->destType->refCount++;
@@ -12481,7 +12743,7 @@ __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
 PrintType(exp->op.exp1->expType, type1, 0x0, 0x1);
 PrintType(exp->op.exp2->expType, type2, 0x0, 0x1);
 }
-Compiler_Warning("incompatible expressions %s (%s) and %s (%s)\n", expString1, type1, expString2, type2);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
 }
 }
 }
@@ -12545,6 +12807,8 @@ if(type1->kind == 8 && type1->_class && type1->_class->registered && type1->_cla
 {
 if(CheckExpressionType(exp->op.exp1, exp->op.exp2->expType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp1->expType;
 if(exp->op.exp2->expType)
 exp->op.exp1->expType->refCount++;
@@ -12555,6 +12819,8 @@ else if(type2 && (type2->kind == 8 && type2->_class && type2->_class->registered
 {
 if(CheckExpressionType(exp->op.exp2, exp->op.exp1->expType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp2->expType;
 if(exp->op.exp2->expType)
 exp->op.exp2->expType->refCount++;
@@ -12570,6 +12836,8 @@ exp->op.exp2->destType = type1;
 type1->refCount++;
 if(CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp2->destType;
 if(exp->op.exp2->destType)
 exp->op.exp2->destType->refCount++;
@@ -12594,7 +12862,7 @@ __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
 PrintType(exp->op.exp1->expType, type1String, 0x0, 0x1);
 PrintType(exp->op.exp2->expType, type2String, 0x0, 0x1);
 }
-Compiler_Warning("incompatible expressions %s (%s) and %s (%s)\n", expString1, type1String, expString2, type2String);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
 if(type1->kind == 8 && type1->_class && type1->_class->registered && type1->_class->registered->type == 4)
 {
 exp->expType = exp->op.exp1->expType;
@@ -12628,6 +12896,8 @@ exp->op.exp1->destType = type2;
 type2->refCount++;
 if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
 {
+if(exp->expType)
+FreeType(exp->expType);
 exp->expType = exp->op.exp1->destType;
 if(exp->op.exp1->destType)
 exp->op.exp1->destType->refCount++;
@@ -12685,7 +12955,7 @@ PrintExpression(exp->op.exp1, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(expString[0])
-Compiler_Error("couldn't determine type of %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 if(exp->op.exp2 && !exp->op.exp2->expType)
 {
@@ -12698,7 +12968,7 @@ PrintExpression(exp->op.exp2, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(expString[0])
-Compiler_Error("couldn't determine type of %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 if(boolResult)
 {
@@ -12706,9 +12976,9 @@ FreeType(exp->expType);
 exp->expType = MkClassType("bool");
 exp->expType->truth = 0x1;
 }
-if(exp->op.op != 261)
+if(exp->op.op != SIZEOF)
 exp->isConstant = (!exp->op.exp1 || exp->op.exp1->isConstant) && (!exp->op.exp2 || exp->op.exp2->isConstant);
-if(exp->op.op == 261 && exp->op.exp2->expType)
+if(exp->op.op == SIZEOF && exp->op.exp2->expType)
 {
 DeclareType(exp->op.exp2->expType, 0x0, 0x0);
 }
@@ -12830,7 +13100,14 @@ if(exp->call.exp->type == 0)
 struct Expression * idExp = exp->call.exp;
 struct Identifier * id = idExp->identifier;
 
-if(!strcmp(id->string, "__ENDIAN_PAD"))
+if(!strcmp(id->string, "__builtin_frame_address"))
+{
+exp->expType = ProcessTypeString("void *", 0x1);
+if(exp->call.arguments && (*exp->call.arguments).first)
+ProcessExpressionType((*exp->call.arguments).first);
+break;
+}
+else if(!strcmp(id->string, "__ENDIAN_PAD"))
 {
 exp->expType = ProcessTypeString("int", 0x1);
 if(exp->call.arguments && (*exp->call.arguments).first)
@@ -13002,7 +13279,7 @@ functionType = type;
 }
 if(functionType && functionType->kind != 11)
 {
-Compiler_Error("called object %s is not a function\n", name);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "called object %s is not a function\n", (((void *)0))), name);
 }
 else if(functionType)
 {
@@ -13015,7 +13292,7 @@ struct Location oldyylloc = yylloc;
 
 if(!type)
 emptyParams = 0x1;
-if(functionType->extraParam && e)
+if(functionType->extraParam && e && functionType->thisClass)
 {
 e->destType = MkClassType(functionType->thisClass->string);
 e = e->next;
@@ -13060,9 +13337,9 @@ if(!type && !emptyParams)
 {
 yylloc = e->loc;
 if(methodType && methodType->methodClass)
-Compiler_Error("too many arguments for method %s::%s (%d given, expected %d)\n", methodType->methodClass->fullName, methodType->method->name, (*exp->call.arguments).count, noParams ? 0 : functionType->params.count);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "too many arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->methodClass->fullName, methodType->method->name, (*exp->call.arguments).count, noParams ? 0 : functionType->params.count);
 else
-Compiler_Error("too many arguments for function %s (%d given, expected %d)\n", name, (*exp->call.arguments).count, noParams ? 0 : functionType->params.count);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "too many arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, (*exp->call.arguments).count, noParams ? 0 : functionType->params.count);
 break;
 }
 if(methodType && type && type->kind == 20 && type->templateParameter->type == 0)
@@ -13142,9 +13419,9 @@ type = next;
 if(type && type->kind != 14)
 {
 if(methodType && methodType->methodClass)
-Compiler_Warning("not enough arguments for method %s::%s (%d given, expected %d)\n", methodType->methodClass->fullName, methodType->method->name, exp->call.arguments ? (*exp->call.arguments).count : 0, functionType->params.count + extra);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "not enough arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->methodClass->fullName, methodType->method->name, exp->call.arguments ? (*exp->call.arguments).count : 0, functionType->params.count + extra);
 else
-Compiler_Warning("not enough arguments for function %s (%d given, expected %d)\n", name, exp->call.arguments ? (*exp->call.arguments).count : 0, functionType->params.count + extra);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "not enough arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, exp->call.arguments ? (*exp->call.arguments).count : 0, functionType->params.count + extra);
 }
 yylloc = oldyylloc;
 if(type && !type->refCount)
@@ -13166,9 +13443,11 @@ yylloc = exp->call.exp->identifier->loc;
 if(strstr(string, "__builtin_") == string)
 ;
 else
-Compiler_Warning("%s undefined; assuming extern returning int\n", string);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "%s undefined; assuming extern returning int\n", (((void *)0))), string);
 symbol = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), ((struct Symbol *)__ecereTemp1)->string = __ecereNameSpace__ecere__sys__CopyString(string), ((struct Symbol *)__ecereTemp1)->type = ProcessTypeString("int()", 0x1), ((struct Symbol *)__ecereTemp1));
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
+if(strstr(symbol->string, "::"))
+globalContext->hasNameSpace = 0x1;
 yylloc = oldyylloc;
 }
 }
@@ -13176,7 +13455,7 @@ else if(exp->call.exp->type == 8)
 {
 }
 else
-Compiler_Warning("callable object undefined; extern assuming returning int\n");
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "callable object undefined; extern assuming returning int\n", (((void *)0))));
 if(!functionType->returnType)
 {
 functionType->returnType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1)->kind = 3, ((struct Type *)__ecereTemp1));
@@ -13230,7 +13509,7 @@ if(_class)
 {
 for(param = _class->templateParams.first; param; param = param->next)
 {
-if(param->type == 1 && !strcmp(param->name, exp->member.member->string))
+if(param->type == 1 && exp->member.member && exp->member.member->string && !strcmp(param->name, exp->member.member->string))
 break;
 }
 }
@@ -13416,7 +13695,7 @@ struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
 if(id && id->_class && id->_class->name && !strcmp(id->_class->name, "property"))
 exp->member.memberType = 1;
 if(id && id->_class && type->_class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->_class->registered, _class))
-Compiler_Error("invalid class specifier %s for object of class %s\n", _class->fullName, type->_class->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->_class->string);
 if(typeKind != 19)
 {
 if((exp->member.memberType == 0 && thisPtr) || exp->member.memberType == 3)
@@ -13485,7 +13764,7 @@ strcpy(structName, "__ecereClassData_");
 FullClassNameCat(structName, type->_class->string, 0x0);
 exp->type = 9;
 exp->member.member = id;
-exp->member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(289)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(type->_class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+exp->member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(type->_class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
 FreeType(type);
 ProcessExpressionType(exp);
 return ;
@@ -13564,7 +13843,7 @@ ProcessExpressionType(exp);
 return ;
 }
 yylloc = exp->member.member->loc;
-Compiler_Error("couldn't find member %s in class %s\n", id->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
 if(inCompiler)
 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
 }
@@ -13578,7 +13857,7 @@ tClass = tClass->base;
 if(tClass && exp->expType->kind == 20 && exp->expType->templateParameter->type == 0)
 {
 int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * sClass;
 
 for(sClass = tClass; sClass; sClass = sClass->base)
@@ -13631,7 +13910,7 @@ FinishTemplatesContext(context);
 else if(tClass && exp->expType->kind == 13 && exp->expType->type && exp->expType->type->kind == 20 && exp->expType->type->templateParameter->type == 0)
 {
 int id = 0;
-struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam;
+struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * sClass;
 
 for(sClass = tClass; sClass; sClass = sClass->base)
@@ -13814,7 +14093,7 @@ FinishTemplatesContext(context);
 }
 }
 else
-Compiler_Error("undefined class %s\n", (id && (!id->_class || id->_class->name)) ? (id->classSym ? id->classSym->string : (type->_class ? type->_class->string : (((void *)0)))) : "(null)");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "undefined class %s\n", (((void *)0))), (id && (!id->_class || id->_class->name)) ? (id->classSym ? id->classSym->string : (type->_class ? type->_class->string : (((void *)0)))) : "(null)");
 }
 else if(type && (type->kind == 9 || type->kind == 10))
 {
@@ -13837,7 +14116,7 @@ if(inCompiler)
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-Compiler_Error("member operator on non-structure type expression %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "member operator on non-structure type expression %s\n", (((void *)0))), expString);
 }
 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
 {
@@ -14073,7 +14352,7 @@ if(curCompound && FindSymbol("this", curContext, curCompound->compound.context,
 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
 else
 classExp = MkExpIdentifier(MkIdentifier("class"));
-exp->member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(289)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(_class->fullName)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+exp->member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(_class->fullName)), (((void *)0))), MkIdentifier("offsetClass"))))))));
 ProcessExpressionType(exp);
 return ;
 }
@@ -14146,25 +14425,17 @@ type = (((void *)0));
 if(typeString)
 {
 char templateString[1024];
-struct __ecereNameSpace__ecere__sys__OldList * declarations = MkList();
-struct __ecereNameSpace__ecere__sys__OldList * instMembers = MkList();
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
-char count[128];
-struct Expression * e;
+struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
+struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 struct Expression * expExt;
 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
-struct Context * context = PushContext();
 
 sprintf(templateString, "Container<%s>", typeString);
-ListAdd(instMembers, MkMemberInit(MkListOne(MkIdentifier("data")), MkInitializerAssignment(MkExpIdentifier(MkIdentifier("__internalList")))));
-sprintf(count, "%d", (*exp->list).count);
-ListAdd(instMembers, MkMemberInit(MkListOne(MkIdentifier("count")), MkInitializerAssignment(MkExpConstant(count))));
-ListAdd(instMembers, MkMemberInit(MkListOne(MkIdentifier("type")), MkInitializerAssignment(MkExpClass(CopyList(specs, CopySpecifier), CopyDeclarator(decl)))));
-ListAdd(instMembers, MkMemberInit(MkListOne(MkIdentifier("_vTbl")), MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl")))));
-ListAdd(instMembers, MkMemberInit(MkListOne(MkIdentifier("_class")), MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))))));
 if(exp->list)
 {
+struct Expression * e;
+
 type = ProcessTypeString(typeString, 0x0);
 while(e = (*exp->list).first)
 {
@@ -14177,19 +14448,28 @@ ListAdd(initializers, MkInitializerAssignment(e));
 FreeType(type);
 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->list), exp->list = 0);
 }
-ListAdd(declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorArray(PlugDeclarator(decl, MkDeclaratorIdentifier(MkIdentifier("__internalList"))), (((void *)0))), MkInitializerList(initializers)))));
-ListAdd(declarations, MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName("BuiltInContainer")), MkExpIdentifier(MkIdentifier("__internalContainer")), MkListOne(MkMembersInitList(instMembers)))));
+DeclareStruct("ecere::com::BuiltInContainer", 0x0);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ListAdd(structInitializers, MkInitializerAssignment((__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression), ((struct Expression *)__ecereTemp1)->type = 2, ((struct Expression *)__ecereTemp1)->constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, &(*initializers).count, (void *)0), ((struct Expression *)__ecereTemp1))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, CopySpecifier), CopyDeclarator(decl))));
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
 exp->expType = ProcessTypeString(templateString, 0x0);
 exp->type = 5;
-exp->list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), (expExt = MkExpExtensionCompound(MkCompoundStmt(declarations, MkListOne(MkExpressionStmt(MkListOne(MkExpOp((((void *)0)), '&', MkExpIdentifier(MkIdentifier("__internalContainer")))))))))));
-expExt->compound->compound.context = context;
-PopContext(context);
+exp->list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
 ProcessExpressionType(expExt);
 }
 else
 {
 exp->expType = ProcessTypeString("Container", 0x0);
-Compiler_Error("Couldn't determine type of array elements\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Couldn't determine type of array elements\n", (((void *)0))));
 }
 break;
 }
@@ -14208,7 +14488,13 @@ if(symbol)
 if(exp->expType->kind != 15)
 {
 struct Type * member;
+char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->enumName);
 
+FreeType(exp->expType);
+exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+exp->expType->kind = symbol->type->kind;
+exp->expType->refCount++;
+exp->expType->enumName = enumName;
 exp->expType->members = symbol->type->members;
 for(member = symbol->type->members.first; member; member = member->next)
 member->refCount++;
@@ -14219,7 +14505,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);
 }
@@ -14255,9 +14541,9 @@ PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(unresolved)
-Compiler_Error("unresolved identifier %s; expected %s\n", expString, type2);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
 else if(exp->type != 16)
-Compiler_Error("couldn't determine type of %s; expected %s\n", expString, type2);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
 }
 }
 else
@@ -14271,9 +14557,9 @@ PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(unresolved)
-Compiler_Error("unresolved identifier %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s\n", (((void *)0))), expString);
 else if(exp->type != 16)
-Compiler_Error("couldn't determine type of %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 }
 else
@@ -14300,7 +14586,8 @@ if(inCompiler)
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-Compiler_Warning("incompatible expression %s (%s); expected %s\n", expString, type1, type2);
+if(!sourceFile || (strcmp(sourceFile, "src\\lexer.ec") && strcmp(sourceFile, "src/lexer.ec") && strcmp(sourceFile, "src\\grammar.ec") && strcmp(sourceFile, "src/grammar.ec")))
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
 FreeType(exp->expType);
 exp->destType->refCount++;
 exp->expType = exp->destType;
@@ -14332,9 +14619,9 @@ exp->cast.exp = newExp;
 else if(unresolved)
 {
 if(exp->identifier->_class && exp->identifier->_class->name)
-Compiler_Error("unresolved identifier %s::%s\n", exp->identifier->_class->name, exp->identifier->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s::%s\n", (((void *)0))), exp->identifier->_class->name, exp->identifier->string);
 else if(exp->identifier->string && exp->identifier->string[0])
-Compiler_Error("unresolved identifier %s\n", exp->identifier->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s\n", (((void *)0))), exp->identifier->string);
 }
 else if(!exp->expType && exp->type != 16)
 {
@@ -14346,7 +14633,7 @@ if(inCompiler)
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-Compiler_Error("couldn't determine type of %s\n", expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 ApplyAnyObjectLogic(exp);
 if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->type == 5)
@@ -14496,7 +14783,7 @@ if(type && type->kind == 12)
 FreeType(initializerType);
 if(type && type->kind != 12 && type->kind != 9 && type->kind != 10 && (type->kind != 8 || !type->_class->registered || type->_class->registered->type != 1))
 {
-Compiler_Error("Assigning list initializer to non list\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Assigning list initializer to non list\n", (((void *)0))));
 }
 break;
 }
@@ -14513,7 +14800,7 @@ switch(spec->type)
 {
 case 0:
 {
-if(spec->specifier == 321)
+if(spec->specifier == THISCLASS)
 {
 if(thisClass)
 {
@@ -14609,10 +14896,10 @@ if(param->qualifiers && (*param->qualifiers).first)
 {
 struct Specifier * spec = (*param->qualifiers).first;
 
-if(spec && spec->specifier == 337)
+if(spec && spec->specifier == TYPED_OBJECT)
 {
 struct Declarator * d = param->declarator;
-struct TypeName * newParam = (newParam = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), newParam->qualifiers = MkListOne(MkSpecifier(301)), newParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d), newParam);
+struct TypeName * newParam = (newParam = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), newParam->qualifiers = MkListOne(MkSpecifier(VOID)), newParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d), newParam);
 
 FreeList(param->qualifiers, FreeSpecifier);
 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
@@ -14620,15 +14907,15 @@ param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))),
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->function.parameters), param, newParam);
 param = newParam;
 }
-else if(spec && spec->specifier == 338)
+else if(spec && spec->specifier == ANY_OBJECT)
 {
 struct Declarator * d = param->declarator;
 
 FreeList(param->qualifiers, FreeSpecifier);
-param->qualifiers = MkListOne(MkSpecifier(301));
+param->qualifiers = MkListOne(MkSpecifier(VOID));
 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
 }
-else if(spec->specifier == 321)
+else if(spec->specifier == THISCLASS)
 {
 if(thisClass)
 {
@@ -14811,6 +15098,10 @@ if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) &&
 curFunction->propSet->fireWatchersDone = 0x1;
 }
 
+extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
+
+extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
+
 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
 
 extern struct Statement * MkForStmt(struct Statement * init, struct Statement * check, struct __ecereNameSpace__ecere__sys__OldList * inc, struct Statement * statement);
@@ -15154,7 +15445,7 @@ FreeList(exp, FreeExpression);
 else
 {
 arrayExp->expType = ProcessTypeString("Container", 0x0);
-Compiler_Error("Couldn't determine type of array elements\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Couldn't determine type of array elements\n", (((void *)0))));
 }
 }
 else if(isLinkList && !isList)
@@ -15185,7 +15476,7 @@ block = MkIfStmt(filter, block, (((void *)0)));
 }
 if(isArray)
 {
-stmt->compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array")), '+', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("count")))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), 263, (((void *)0)))), block));
+stmt->compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array")), '+', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("count")))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
 ProcessStatement(((struct Statement *)(*stmt->compound.statements).first)->forStmt.init);
 ProcessStatement(((struct Statement *)(*stmt->compound.statements).first)->forStmt.check);
 ProcessExpressionType((*((struct Statement *)(*stmt->compound.statements).first)->forStmt.increment).first);
@@ -15195,7 +15486,7 @@ else if(isBuiltin)
 char count[128];
 
 sprintf(count, "%d", builtinCount);
-stmt->compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpIdentifier(MkIdentifier("__internalArray"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpIdentifier(MkIdentifier("__internalArray")), '+', MkExpConstant(count))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), 263, (((void *)0)))), block));
+stmt->compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpIdentifier(MkIdentifier("__internalArray"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpIdentifier(MkIdentifier("__internalArray")), '+', MkExpConstant(count))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
 ProcessStatement(((struct Statement *)(*stmt->compound.statements).first)->forStmt.init);
 ProcessStatement(((struct Statement *)(*stmt->compound.statements).first)->forStmt.check);
 ProcessExpressionType((*((struct Statement *)(*stmt->compound.statements).first)->forStmt.increment).first);
@@ -15235,7 +15526,7 @@ break;
 }
 else
 {
-Compiler_Error("Expression is not a container\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Expression is not a container\n", (((void *)0))));
 }
 break;
 }
@@ -15343,7 +15634,7 @@ strcat(watcherName, propID->string);
 }
 if(object && object->expType && object->expType->kind == 8 && object->expType->_class && object->expType->_class->registered)
 {
-func = MkClassFunction(MkListOne(MkSpecifier(301)), (((void *)0)), MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(object->expType->_class->string)), MkDeclaratorIdentifier(MkIdentifier("value"))))), (((void *)0)));
+func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((void *)0)), MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(object->expType->_class->string)), MkDeclaratorIdentifier(MkIdentifier("value"))))), (((void *)0)));
 ProcessClassFunctionBody(func, propWatch->compound);
 propWatch->compound = (((void *)0));
 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 0x1);
@@ -15393,12 +15684,12 @@ ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
 ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
 }
 else
-Compiler_Error("Property %s not found in class %s\n", prop->name, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), prop->name, _class->fullName);
 }
 }
 }
 else
-Compiler_Error("Invalid watched object\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Invalid watched object\n", (((void *)0))));
 }
 curExternal = external;
 curContext = context;
@@ -15409,7 +15700,7 @@ FreeExpression(object);
 FreeList(watches, FreePropertyWatch);
 }
 else
-Compiler_Error("No observer specified and not inside a _class\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "No observer specified and not inside a _class\n", (((void *)0))));
 }
 else
 {
@@ -15455,7 +15746,7 @@ if(prop)
 CreateFireWatcher(prop, object, stmt);
 }
 else
-Compiler_Error("Property %s not found in class %s\n", propID->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
 }
 else
@@ -15479,7 +15770,7 @@ FreeExpression(object);
 FreeList(watches, FreeIdentifier);
 }
 else
-Compiler_Error("Invalid object specified and not inside a class\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Invalid object specified and not inside a class\n", (((void *)0))));
 }
 break;
 }
@@ -15539,7 +15830,7 @@ ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("
 ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
 }
 else
-Compiler_Error("Property %s not found in class %s\n", prop->name, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), prop->name, _class->fullName);
 }
 }
 if(object)
@@ -15549,10 +15840,10 @@ FreeExpression(watcher);
 FreeList(watches, FreeIdentifier);
 }
 else
-Compiler_Error("Invalid object specified and not inside a class\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Invalid object specified and not inside a class\n", (((void *)0))));
 }
 else
-Compiler_Error("No observer specified and not inside a class\n");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "No observer specified and not inside a class\n", (((void *)0))));
 }
 break;
 }
@@ -15632,7 +15923,7 @@ if(funcDecl->function.parameters && (*funcDecl->function.parameters).count == 1)
 {
 struct TypeName * param = (*funcDecl->function.parameters).first;
 
-if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->specifier == 301 && !param->declarator)
+if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->specifier == VOID && !param->declarator)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->function.parameters), param);
 FreeTypeName(param);
@@ -15672,7 +15963,7 @@ if(funcDecl->function.parameters && (*funcDecl->function.parameters).count == 1)
 {
 struct TypeName * param = (*funcDecl->function.parameters).first;
 
-if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->specifier == 301 && !param->declarator)
+if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->specifier == VOID && !param->declarator)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->function.parameters), param);
 FreeTypeName(param);
@@ -15922,7 +16213,7 @@ struct PropertyWatch * propertyWatch = def->propertyWatch;
 thisClass = regClass;
 if(propertyWatch->compound)
 {
-struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
+struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
 
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 curExternal = (((void *)0));
@@ -15933,6 +16224,22 @@ thisClass = (((void *)0));
 }
 }
 
+void DeclareFunctionUtil(char * s)
+{
+struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
+
+if(function)
+{
+char name[1024];
+
+name[0] = (char)0;
+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);
+}
+}
+
 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
 
 void ComputeDataTypes()
@@ -15940,12 +16247,54 @@ void ComputeDataTypes()
 void * __ecereTemp1;
 struct External * external;
 struct External * temp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_External);
+struct External * after = (((void *)0));
 
 currentClass = (((void *)0));
 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
+for(external = (*ast).first; external; external = external->next)
+{
+if(external->type == 1)
+{
+struct Declaration * decl = external->declaration;
+
+if(decl)
+{
+struct __ecereNameSpace__ecere__sys__OldList * decls = decl->declarators;
+
+if(decls)
+{
+struct InitDeclarator * initDecl = (*decls).first;
+
+if(initDecl)
+{
+struct Declarator * declarator = initDecl->declarator;
+
+if(declarator && declarator->type == 1)
+{
+struct Identifier * id = declarator->identifier;
+
+if(id && id->string)
+{
+if(!strcmp(id->string, "uintptr_t") || !strcmp(id->string, "intptr_t"))
+{
+external->symbol->id = -1001, external->symbol->idCode = -1001;
+after = external;
+}
+}
+}
+}
+}
+}
+}
+}
 temp->symbol = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), ((struct Symbol *)__ecereTemp1)->id = -1000, ((struct Symbol *)__ecereTemp1)->idCode = -1000, ((struct Symbol *)__ecereTemp1));
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), (((void *)0)), temp);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, temp);
 curExternal = temp;
+DeclareFunctionUtil("eSystem_New");
+DeclareFunctionUtil("eSystem_New0");
+DeclareFunctionUtil("eSystem_Renew");
+DeclareFunctionUtil("eSystem_Renew0");
+DeclareFunctionUtil("eClass_GetProperty");
 DeclareStruct("ecere::com::Class", 0x0);
 DeclareStruct("ecere::com::Instance", 0x0);
 DeclareStruct("ecere::com::Property", 0x0);
@@ -15997,8 +16346,6 @@ extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__e
 
 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;
-
 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
 {
 struct __ecereNameSpace__ecere__com__Class * class;
@@ -16007,8 +16354,6 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYy
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("_strtoi64", "int64 _strtoi64(char * string, char * * endString, int base)", _strtoi64, module, 2);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("_strtoui64", "uint64 _strtoui64(char * string, char * * endString, int base)", _strtoui64, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
@@ -16027,6 +16372,8 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Ex
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
 __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("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);
@@ -16036,7 +16383,7 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDou
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("AddMembers", "int AddMembers(ecere::sys::OldList * declarations, ecere::com::Class _class, bool isMember, uint * retSize, ecere::com::Class topClass)", AddMembers, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("AddMembers", "int AddMembers(ecere::sys::OldList * declarations, ecere::com::Class _class, bool isMember, uint * retSize, ecere::com::Class topClass, bool * addedPadding)", AddMembers, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "void DeclareStruct(char * name, bool skipNoHead)", DeclareStruct, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
@@ -16054,7 +16401,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);
@@ -16075,6 +16422,7 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString",
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(String s)", DeclareFunctionUtil, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);
 }