compiler/libec; ecere: Support for checking platform as a compile time constant
[sdk] / compiler / bootstrap / libec / bootstrap / pass15.c
index 1e875d0..5a637b4 100644 (file)
@@ -1,4 +1,11 @@
 /* Code generated from eC source file: pass15.ec */
+#if defined(_WIN32)
+#define __runtimePlatform 1
+#elif defined(__APPLE__)
+#define __runtimePlatform 3
+#else
+#define __runtimePlatform 2
+#endif
 #if defined(__GNUC__)
 typedef long long int64;
 typedef unsigned long long uint64;
@@ -40,7 +47,9 @@ typedef unsigned __int64 uint64;
 #define arch_PointerSize                  sizeof(void *)
 #define structSize_Instance               (_64BIT ? 24 : 12)
 #define structSize_Module                 (_64BIT ? 560 : 300)
-#define structSize_NamedLink              (_64BIT ? 32 : 16)
+#define structSize_NamedLink64            (_64BIT ? 32 : 24)
+
+struct __ecereNameSpace__ecere__com__Instance;
 
 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
 
@@ -50,6 +59,8 @@ extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsig
 
 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
 
+extern void __ecereNameSpace__ecere__com__eSystem_Delete(void *  memory);
+
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
 
 struct __ecereNameSpace__ecere__sys__BTNode;
@@ -79,7 +90,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 struct __ecereNameSpace__ecere__com__Method
 {
-char *  name;
+const char *  name;
 struct __ecereNameSpace__ecere__com__Method * parent;
 struct __ecereNameSpace__ecere__com__Method * left;
 struct __ecereNameSpace__ecere__com__Method * right;
@@ -89,7 +100,7 @@ int vid;
 int type;
 struct __ecereNameSpace__ecere__com__Class * _class;
 void *  symbol;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct Type * dataType;
 int memberAccess;
 } __attribute__ ((gcc_struct));
@@ -100,12 +111,12 @@ struct __ecereNameSpace__ecere__com__Property
 {
 struct __ecereNameSpace__ecere__com__Property * prev;
 struct __ecereNameSpace__ecere__com__Property * next;
-char *  name;
+const char *  name;
 unsigned int isProperty;
 int memberAccess;
 int id;
 struct __ecereNameSpace__ecere__com__Class * _class;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
 struct Type * dataType;
 void (*  Set)(void * , int);
@@ -116,7 +127,7 @@ void *  symbol;
 int vid;
 unsigned int conversion;
 unsigned int watcherOffset;
-char *  category;
+const char *  category;
 unsigned int compiled;
 unsigned int selfWatchable;
 unsigned int isWatchable;
@@ -154,7 +165,7 @@ union
 {
 char * s;
 struct Attrib * attr;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
@@ -225,14 +236,14 @@ struct
 {
 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
 struct __ecereNameSpace__ecere__sys__OldList *  declarators;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct Instantiation * inst;
 struct
 {
 struct Identifier * id;
 struct Expression * exp;
-} __attribute__ ((gcc_struct));
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon2;
+} __attribute__ ((gcc_struct)) __anon1;
 struct Specifier * extStorage;
 struct Symbol * symbol;
 int declMode;
@@ -320,7 +331,7 @@ struct __ecereNameSpace__ecere__sys__OldList * filter;
 struct Statement * stmt;
 } __attribute__ ((gcc_struct)) forEachStmt;
 struct Declaration * decl;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
@@ -348,8 +359,9 @@ union
 {
 struct Expression * exp;
 struct __ecereNameSpace__ecere__sys__OldList *  list;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 unsigned int isConstant;
+struct Identifier * id;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
@@ -369,7 +381,7 @@ float f;
 double d;
 long long i64;
 uint64 ui64;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
@@ -386,10 +398,14 @@ struct
 {
 char *  constant;
 struct Identifier * identifier;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct Statement * compound;
 struct Instantiation * instance;
+struct
+{
 char *  string;
+unsigned int intlString;
+} __attribute__ ((gcc_struct)) __anon2;
 struct __ecereNameSpace__ecere__sys__OldList *  list;
 struct
 {
@@ -468,7 +484,7 @@ struct
 struct Expression * exp;
 struct TypeName * typeName;
 } __attribute__ ((gcc_struct)) vaArg;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 unsigned int debugValue;
 struct __ecereNameSpace__ecere__com__DataValue val;
 uint64 address;
@@ -482,6 +498,8 @@ unsigned int isConstant;
 unsigned int addedThis;
 unsigned int needCast;
 unsigned int thisPtr;
+unsigned int opDestType;
+unsigned int needTemplateCast;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
@@ -509,9 +527,9 @@ union
 {
 struct TemplateDatatype * dataType;
 int memberType;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct TemplateArgument * defaultArgument;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct Type * baseType;
 } __attribute__ ((gcc_struct));
 
@@ -532,7 +550,7 @@ struct ExtDecl * extDecl;
 char *  name;
 struct Symbol * symbol;
 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct
 {
 struct Identifier * id;
@@ -542,11 +560,11 @@ struct __ecereNameSpace__ecere__sys__OldList *  definitions;
 unsigned int addNameSpace;
 struct Context * ctx;
 struct ExtDecl * extDeclStruct;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon2;
 struct Expression * expression;
 struct Specifier * _class;
 struct TemplateParameter * templateParameter;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
@@ -602,7 +620,7 @@ struct
 {
 struct ExtDecl * extended;
 } __attribute__ ((gcc_struct)) extended;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
@@ -646,7 +664,7 @@ struct Declaration * declaration;
 char *  importString;
 struct Identifier * id;
 struct DBTableDef * table;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 int importType;
 } __attribute__ ((gcc_struct));
 
@@ -673,7 +691,7 @@ char *  name;
 struct __ecereNameSpace__ecere__sys__OldList methods;
 struct __ecereNameSpace__ecere__sys__OldList properties;
 unsigned int itself;
-unsigned int isRemote;
+int isRemote;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
@@ -691,7 +709,7 @@ union
 struct __ecereNameSpace__ecere__com__Method * method;
 struct __ecereNameSpace__ecere__com__Property * _property;
 struct __ecereNameSpace__ecere__com__Class * registered;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 int id;
 int idCode;
 union
@@ -700,20 +718,20 @@ struct
 {
 struct External * pointerExternal;
 struct External * structExternal;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct
 {
 struct External * externalGet;
 struct External * externalSet;
 struct External * externalPtr;
 struct External * externalIsSet;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon2;
 struct
 {
 struct External * methodExternal;
 struct External * methodCodeExternal;
-} __attribute__ ((gcc_struct));
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon3;
+} __attribute__ ((gcc_struct)) __anon2;
 unsigned int imported;
 unsigned int declaredStructSym;
 struct __ecereNameSpace__ecere__com__Class * _class;
@@ -756,7 +774,7 @@ struct
 {
 struct __ecereNameSpace__ecere__sys__OldList members;
 char *  enumName;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct
 {
 struct Type * returnType;
@@ -764,13 +782,13 @@ struct __ecereNameSpace__ecere__sys__OldList params;
 struct Symbol * thisClass;
 unsigned int staticMethod;
 struct TemplateParameter * thisClassTemplate;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon2;
 struct
 {
 struct __ecereNameSpace__ecere__com__Method * method;
 struct __ecereNameSpace__ecere__com__Class * methodClass;
 struct __ecereNameSpace__ecere__com__Class * usedClass;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon3;
 struct
 {
 struct Type * arrayType;
@@ -778,10 +796,10 @@ int arraySize;
 struct Expression * arraySizeExp;
 unsigned int freeExp;
 struct Symbol * enumClass;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon4;
 struct Type * type;
 struct TemplateParameter * templateParameter;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 int kind;
 unsigned int size;
 char *  name;
@@ -803,6 +821,8 @@ unsigned int passAsTemplate : 1;
 unsigned int dllExport : 1;
 unsigned int attrStdcall : 1;
 unsigned int declaredWithStruct : 1;
+unsigned int typedByReference : 1;
+unsigned int casted : 1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
@@ -811,7 +831,7 @@ struct __ecereNameSpace__ecere__com__Class
 {
 struct __ecereNameSpace__ecere__com__Class * prev;
 struct __ecereNameSpace__ecere__com__Class * next;
-char *  name;
+const char *  name;
 int offset;
 int structSize;
 int (* *  _vTbl)();
@@ -832,19 +852,19 @@ int startMemberID;
 int type;
 struct __ecereNameSpace__ecere__com__Instance * module;
 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct Type * dataType;
 int typeSize;
 int defaultAlignment;
 void (*  Initialize)();
 int memberOffset;
 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
-char *  designerClass;
+const char *  designerClass;
 unsigned int noExpansion;
-char *  defaultProperty;
+const char *  defaultProperty;
 unsigned int comRedefinition;
 int count;
-unsigned int isRemote;
+int isRemote;
 unsigned int internalDecl;
 void *  data;
 unsigned int computeSize;
@@ -853,7 +873,7 @@ int destructionWatchOffset;
 unsigned int fixed;
 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
 int inheritanceAccess;
-char *  fullName;
+const char *  fullName;
 void *  symbol;
 struct __ecereNameSpace__ecere__sys__OldList conversions;
 struct __ecereNameSpace__ecere__sys__OldList templateParams;
@@ -862,9 +882,24 @@ struct __ecereNameSpace__ecere__com__Class * templateClass;
 struct __ecereNameSpace__ecere__sys__OldList templatized;
 int numParams;
 unsigned int isInstanceClass;
+unsigned int byValueSystemClass;
 } __attribute__ ((gcc_struct));
 
-extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
+extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
+
+extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
+
+extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
+
+extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
+
+extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
+
+extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
+
+extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
+
+extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
 
@@ -881,12 +916,12 @@ struct __ecereNameSpace__ecere__com__DataMember
 {
 struct __ecereNameSpace__ecere__com__DataMember * prev;
 struct __ecereNameSpace__ecere__com__DataMember * next;
-char *  name;
+const char *  name;
 unsigned int isProperty;
 int memberAccess;
 int id;
 struct __ecereNameSpace__ecere__com__Class * _class;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
 struct Type * dataType;
 int type;
@@ -916,21 +951,21 @@ union
 {
 struct
 {
-char *  dataTypeString;
+const char *  dataTypeString;
 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct __ecereNameSpace__ecere__com__DataValue expression;
 struct
 {
-char *  memberString;
+const char *  memberString;
 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)) __anon1;
+} __attribute__ ((gcc_struct)) __anon2;
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 void exit(int status);
@@ -951,7 +986,7 @@ 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
+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, BOOL = 367, _BOOL = 368, _COMPLEX = 369, _IMAGINARY = 370, RESTRICT = 371, THREAD = 372
 };
 
 typedef union YYSTYPE
@@ -1027,6 +1062,7 @@ struct AsmField * next;
 struct Location loc;
 char *  command;
 struct Expression * expression;
+struct Identifier * symbolic;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
@@ -1069,7 +1105,7 @@ union
 {
 struct __ecereNameSpace__ecere__sys__OldList *  dataMembers;
 struct ClassFunction * function;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
@@ -1101,9 +1137,13 @@ struct Statement * getStmt;
 struct Statement * setStmt;
 struct Statement * issetStmt;
 struct Symbol * symbol;
-unsigned int conversion;
-unsigned int isWatchable;
 struct Expression * category;
+struct
+{
+unsigned int conversion : 1;
+unsigned int isWatchable : 1;
+unsigned int isDBProp : 1;
+} __attribute__ ((gcc_struct)) __anon1;
 } __attribute__ ((gcc_struct));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
@@ -1139,8 +1179,8 @@ struct
 {
 struct Identifier * id;
 struct Initializer * initializer;
-} __attribute__ ((gcc_struct));
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
+} __attribute__ ((gcc_struct)) __anon1;
 int memberAccess;
 void *  object;
 } __attribute__ ((gcc_struct));
@@ -1202,10 +1242,12 @@ static char * thisNameSpace;
 
 struct __ecereNameSpace__ecere__com__Class * containerClass;
 
-unsigned int thisClassParams = 0x1;
+unsigned int thisClassParams = 1;
 
 unsigned int internalValueCounter;
 
+extern unsigned int outputLineNumbers;
+
 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
 
 extern size_t strlen(const char * );
@@ -1225,31 +1267,42 @@ void PrintExpression(struct Expression * exp, char * string)
 {
 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
 int count;
+unsigned int backOutputLineNumbers = outputLineNumbers;
 
+outputLineNumbers = 0;
 if(exp)
 OutputExpression(exp, f);
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
 count = strlen(string);
-count += ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(f, string + count, 1, 1023);
+count += ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(f, string + count, 1, 1023);
 string[count] = '\0';
 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
+outputLineNumbers = backOutputLineNumbers;
 }
 }
 
-extern struct Type * ProcessTypeString(char *  string, unsigned int staticMethod);
+extern struct Type * ProcessTypeString(const char *  string, unsigned int staticMethod);
 
 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
 
 struct Type * ProcessTemplateParameterType(struct TemplateParameter * param)
 {
-if(param && param->type == 0 && (param->dataType || param->dataTypeString))
+if(param && param->type == 0 && (param->__anon1.dataType || param->dataTypeString))
 {
 if(!param->baseType)
 {
 if(param->dataTypeString)
-param->baseType = ProcessTypeString(param->dataTypeString, 0x0);
+param->baseType = ProcessTypeString(param->dataTypeString, 0);
 else
-param->baseType = ProcessType(param->dataType->specifiers, param->dataType->decl);
+param->baseType = ProcessType(param->__anon1.dataType->specifiers, param->__anon1.dataType->decl);
 }
 return param->baseType;
 }
@@ -1259,15 +1312,16 @@ return (((void *)0));
 unsigned int NeedCast(struct Type * type1, struct Type * type2)
 {
 if(!type1 || !type2 || type1->keepCast || type2->keepCast)
-return 0x1;
-if(type1->kind == 20 && type2->kind == 4 && type2->passAsTemplate == 0x0)
+return 1;
+if(type1->kind == 20 && type2->kind == 4 && type2->passAsTemplate == 0)
 {
-return 0x0;
+return 0;
 }
 if(type1->kind == type2->kind)
 {
 switch(type1->kind)
 {
+case 24:
 case 1:
 case 2:
 case 3:
@@ -1275,17 +1329,17 @@ case 4:
 case 22:
 case 23:
 if(type1->passAsTemplate && !type2->passAsTemplate)
-return 0x1;
+return 1;
 return type1->isSigned != type2->isSigned;
 case 8:
-return type1->_class != type2->_class;
+return type1->__anon1._class != type2->__anon1._class;
 case 13:
-return NeedCast(type1->type, type2->type);
+return (type1->__anon1.type && type2->__anon1.type && type1->__anon1.type->constant != type2->__anon1.type->constant) || NeedCast(type1->__anon1.type, type2->__anon1.type);
 default:
-return 0x1;
+return 1;
 }
 }
-return 0x1;
+return 1;
 }
 
 extern int strcmp(const char * , const char * );
@@ -1296,33 +1350,33 @@ extern struct Context * topContext;
 
 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
 
-extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_FindProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
+extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_FindProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
 
 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
 
-extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_FindMethod(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
+extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_FindMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
 
-extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMember(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
+extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
 
 struct __ecereNameSpace__ecere__com__ClassProperty
 {
-char *  name;
+const char *  name;
 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 *, long long);
 long long (*  Get)(struct __ecereNameSpace__ecere__com__Class *);
-char *  dataTypeString;
+const 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);
+extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
 
-extern struct Expression * QMkExpId(char *  id);
+extern struct Expression * QMkExpId(const char *  id);
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateParameter;
 
@@ -1330,18 +1384,18 @@ struct __ecereNameSpace__ecere__com__ClassTemplateParameter
 {
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
-char *  name;
+const char *  name;
 int type;
 union
 {
-char *  dataTypeString;
+const char *  dataTypeString;
 int memberType;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
 void *  param;
 } __attribute__ ((gcc_struct));
 
-extern struct Expression * GetTemplateArgExpByName(char *  paramName, struct __ecereNameSpace__ecere__com__Class * curClass, int tplType);
+extern struct Expression * GetTemplateArgExpByName(const char *  paramName, struct __ecereNameSpace__ecere__com__Class * curClass, int tplType);
 
 extern struct __ecereNameSpace__ecere__sys__OldList *  MkList(void);
 
@@ -1349,7 +1403,7 @@ extern void FreeIdentifier(struct Identifier * id);
 
 void ProcessExpressionType(struct Expression * exp);
 
-extern struct Declarator * SpecDeclFromString(char *  string, struct __ecereNameSpace__ecere__sys__OldList *  specs, struct Declarator * baseDecl);
+extern struct Declarator * SpecDeclFromString(const char *  string, struct __ecereNameSpace__ecere__sys__OldList *  specs, struct Declarator * baseDecl);
 
 extern struct __ecereNameSpace__ecere__sys__OldList *  MkListOne(void *  item);
 
@@ -1363,17 +1417,17 @@ extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct
 
 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  key);
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char *  key);
 
 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
 {
-if(exp->type == 0 && exp->identifier)
+if(exp->type == 0 && exp->__anon1.__anon1.identifier)
 {
-struct Identifier * id = exp->identifier;
+struct Identifier * id = exp->__anon1.__anon1.identifier;
 struct Context * ctx;
 struct Symbol * symbol = (((void *)0));
 
-if(!id->_class || !id->_class->name || strcmp(id->_class->name, "property"))
+if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
 {
 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
 {
@@ -1382,7 +1436,7 @@ if(symbol)
 break;
 }
 }
-if(!symbol && ((!id->_class || (id->_class->name && !strcmp(id->_class->name, "property"))) || (id->classSym && __ecereNameSpace__ecere__com__eClass_IsDerived(_class, id->classSym->registered))))
+if(!symbol && ((!id->_class || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))) || (id->classSym && __ecereNameSpace__ecere__com__eClass_IsDerived(_class, id->classSym->__anon1.registered))))
 {
 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
@@ -1402,10 +1456,10 @@ classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->s
 if(prop || method || member || classProp)
 {
 exp->type = 8;
-exp->member.member = id;
-exp->member.memberType = 0;
-exp->member.exp = QMkExpId("this");
-exp->addedThis = 0x1;
+exp->__anon1.member.member = id;
+exp->__anon1.member.memberType = 0;
+exp->__anon1.member.exp = QMkExpId("this");
+exp->addedThis = 1;
 }
 else if(_class && _class->templateParams.first)
 {
@@ -1428,12 +1482,12 @@ if(argExp)
 struct Declarator * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
-FreeIdentifier(exp->member.member);
+FreeIdentifier(exp->__anon1.member.member);
 ProcessExpressionType(argExp);
-decl = SpecDeclFromString(param->dataTypeString, specs, (((void *)0)));
+decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
 exp->expType = ProcessType(specs, decl);
 exp->type = 5;
-exp->list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
+exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
 }
 }
 }
@@ -1444,20 +1498,22 @@ exp->list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, Mk
 }
 }
 
-extern int sprintf(char * , char * , ...);
+extern int sprintf(char * , const char * , ...);
 
-extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
+extern char *  strcat(char * , const char * );
 
-extern char *  __ecereNameSpace__ecere__sys__CopyString(char *  string);
+extern char *  __ecereNameSpace__ecere__sys__CopyString(const char *  string);
 
 char * PrintInt(long long result)
 {
 char temp[100];
 
-if(result > (((long long)0x7fffffffffffffffLL)))
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
+if(result > (((int)0x7fffffff)))
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
 else
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "%I64dLL" : "%lldLL"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
+if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
+strcat(temp, "LL");
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
@@ -1466,11 +1522,11 @@ char * PrintUInt(uint64 result)
 char temp[100];
 
 if(result > (0xffffffff))
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
 else if(result > (((int)0x7fffffff)))
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64X" : "0x%llX"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
 else
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "%I64d" : "%lld"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
@@ -1478,7 +1534,10 @@ char * PrintInt64(long long result)
 {
 char temp[100];
 
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "%I64dLL" : "%lldLL"), result);
+if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
+sprintf(temp, ((__runtimePlatform == 1) ? "%I64dLL" : "%lldLL"), result);
+else
+sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
@@ -1486,10 +1545,12 @@ char * PrintUInt64(uint64 result)
 {
 char temp[100];
 
-if(result > (((long long)0x7fffffffffffffffLL)))
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
+if(result > (0xffffffff))
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
+else if(result > (((int)0x7fffffff)))
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
 else
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "%I64dLL" : "%lldLL"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
@@ -1498,9 +1559,11 @@ char * PrintHexUInt(uint64 result)
 char temp[100];
 
 if(result > (0xffffffff))
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
 else
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64X" : "0x%llX"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
+if(result > (0xffffffff))
+strcat(temp, "LL");
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
@@ -1509,9 +1572,9 @@ char * PrintHexUInt64(uint64 result)
 char temp[100];
 
 if(result > (0xffffffff))
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
 else
-sprintf(temp, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "0x%I64X" : "0x%llX"), result);
+sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
@@ -1557,18 +1620,74 @@ sprintf(temp, "0x%X", result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
+extern char *  strcpy(char * , const char * );
+
+extern unsigned int (* __ecereProp_float_Get_isInf)(float this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_float_isInf;
+
+extern int (* __ecereProp_float_Get_signBit)(float this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_float_signBit;
+
+extern unsigned int (* __ecereProp_float_Get_isNan)(float this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_float_isNan;
+
 char * PrintFloat(float result)
 {
 char temp[350];
 
+if(__ecereProp_float_Get_isInf(result))
+{
+if(__ecereProp_float_Get_signBit(result))
+strcpy(temp, "-inf");
+else
+strcpy(temp, "inf");
+}
+else if(__ecereProp_float_Get_isNan(result))
+{
+if(__ecereProp_float_Get_signBit(result))
+strcpy(temp, "-nan");
+else
+strcpy(temp, "nan");
+}
+else
 sprintf(temp, "%.16ff", result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
 
+extern unsigned int (* __ecereProp_double_Get_isInf)(double this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_double_isInf;
+
+extern int (* __ecereProp_double_Get_signBit)(double this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_double_signBit;
+
+extern unsigned int (* __ecereProp_double_Get_isNan)(double this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_double_isNan;
+
 char * PrintDouble(double result)
 {
 char temp[350];
 
+if(__ecereProp_double_Get_isInf(result))
+{
+if(__ecereProp_double_Get_signBit(result))
+strcpy(temp, "-inf");
+else
+strcpy(temp, "inf");
+}
+else if(__ecereProp_double_Get_isNan(result))
+{
+if(__ecereProp_double_Get_signBit(result))
+strcpy(temp, "-nan");
+else
+strcpy(temp, "nan");
+}
+else
 sprintf(temp, "%.16f", result);
 return __ecereNameSpace__ecere__sys__CopyString(temp);
 }
@@ -1633,556 +1752,626 @@ float f;
 double d;
 long long i64;
 uint64 ui64;
-} __attribute__ ((gcc_struct));
+} __attribute__ ((gcc_struct)) __anon1;
 struct OpTable ops;
 } __attribute__ ((gcc_struct));
 
+unsigned int GetOpInt(struct Operand * op2, int * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (int)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (int)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (int)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (int)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (int)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (int)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (int)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (int)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (int)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (int)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (int)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (int)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (int)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (int)op2->__anon1.ui64;
+else
+return 0;
+return 1;
+}
+
 struct Operand GetOperand(struct Expression * exp);
 
 unsigned int GetInt(struct Expression * exp, int * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = op2.i;
-else if(op2.kind == 3)
-*value2 = (int)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (int)op2.i64;
-else if(op2.kind == 4)
-*value2 = (int)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (int)op2.i64;
-else if(op2.kind == 23)
-*value2 = (int)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (int)op2.i64;
-else if(op2.kind == 22)
-*value2 = (int)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (int)op2.s;
-else if(op2.kind == 2)
-*value2 = (int)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (int)op2.c;
-else if(op2.kind == 1)
-*value2 = (int)op2.uc;
-else if(op2.kind == 6)
-*value2 = (int)op2.f;
-else if(op2.kind == 7)
-*value2 = (int)op2.d;
-else if(op2.kind == 13)
-*value2 = (int)op2.ui64;
+return GetOpInt(&op2, value2);
+}
+
+unsigned int GetOpUInt(struct Operand * op2, unsigned int * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (unsigned int)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (unsigned int)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (unsigned int)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (unsigned int)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (unsigned int)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (unsigned int)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (unsigned int)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (unsigned int)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (unsigned int)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (unsigned int)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (unsigned int)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (unsigned int)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (unsigned int)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (unsigned int)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetUInt(struct Expression * exp, unsigned int * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (unsigned int)op2.i;
-else if(op2.kind == 3)
-*value2 = op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (unsigned int)op2.i64;
-else if(op2.kind == 4)
-*value2 = (unsigned int)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (unsigned int)op2.i64;
-else if(op2.kind == 23)
-*value2 = (unsigned int)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (unsigned int)op2.i64;
-else if(op2.kind == 22)
-*value2 = (unsigned int)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (unsigned int)op2.s;
-else if(op2.kind == 2)
-*value2 = (unsigned int)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (unsigned int)op2.c;
-else if(op2.kind == 1)
-*value2 = (unsigned int)op2.uc;
-else if(op2.kind == 6)
-*value2 = (unsigned int)op2.f;
-else if(op2.kind == 7)
-*value2 = (unsigned int)op2.d;
-else if(op2.kind == 13)
-*value2 = (unsigned int)op2.ui64;
+return GetOpUInt(&op2, value2);
+}
+
+unsigned int GetOpInt64(struct Operand * op2, long long * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (long long)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (long long)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (long long)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (long long)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (long long)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (long long)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (long long)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (long long)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (long long)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (long long)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (long long)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (long long)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetInt64(struct Expression * exp, long long * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (long long)op2.i;
-else if(op2.kind == 3)
-*value2 = (long long)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = op2.i64;
-else if(op2.kind == 4)
-*value2 = (long long)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = op2.i64;
-else if(op2.kind == 23)
-*value2 = (long long)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = op2.i64;
-else if(op2.kind == 22)
-*value2 = (long long)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (long long)op2.s;
-else if(op2.kind == 2)
-*value2 = (long long)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (long long)op2.c;
-else if(op2.kind == 1)
-*value2 = (long long)op2.uc;
-else if(op2.kind == 6)
-*value2 = (long long)op2.f;
-else if(op2.kind == 7)
-*value2 = (long long)op2.d;
-else if(op2.kind == 13)
-*value2 = (long long)op2.ui64;
+return GetOpInt64(&op2, value2);
+}
+
+unsigned int GetOpUInt64(struct Operand * op2, uint64 * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (uint64)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (uint64)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (uint64)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (uint64)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (uint64)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (uint64)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (uint64)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (uint64)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (uint64)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (uint64)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (uint64)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetUInt64(struct Expression * exp, uint64 * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (uint64)op2.i;
-else if(op2.kind == 3)
-*value2 = (uint64)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (uint64)op2.i64;
-else if(op2.kind == 4)
-*value2 = op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (uint64)op2.i64;
-else if(op2.kind == 23)
-*value2 = op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (uint64)op2.i64;
-else if(op2.kind == 22)
-*value2 = op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (uint64)op2.s;
-else if(op2.kind == 2)
-*value2 = (uint64)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (uint64)op2.c;
-else if(op2.kind == 1)
-*value2 = (uint64)op2.uc;
-else if(op2.kind == 6)
-*value2 = (uint64)op2.f;
-else if(op2.kind == 7)
-*value2 = (uint64)op2.d;
-else if(op2.kind == 13)
-*value2 = op2.ui64;
+return GetOpUInt64(&op2, value2);
+}
+
+unsigned int GetOpIntPtr(struct Operand * op2, intptr_t * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (intptr_t)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (intptr_t)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (intptr_t)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (intptr_t)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (intptr_t)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (intptr_t)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (intptr_t)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (intptr_t)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (intptr_t)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (intptr_t)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (intptr_t)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (intptr_t)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (intptr_t)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (intptr_t)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (intptr_t)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 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;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (intptr_t)op2.i64;
-else if(op2.kind == 4)
-*value2 = (intptr_t)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (intptr_t)op2.i64;
-else if(op2.kind == 23)
-*value2 = (intptr_t)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (intptr_t)op2.i64;
-else if(op2.kind == 22)
-*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;
+return GetOpIntPtr(&op2, value2);
+}
+
+unsigned int GetOpUIntPtr(struct Operand * op2, uintptr_t * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (uintptr_t)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (uintptr_t)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (uintptr_t)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (uintptr_t)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (uintptr_t)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (uintptr_t)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (uintptr_t)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (uintptr_t)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (uintptr_t)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (uintptr_t)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (uintptr_t)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (uintptr_t)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (uintptr_t)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (uintptr_t)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (uintptr_t)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 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;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (uintptr_t)op2.i64;
-else if(op2.kind == 4)
-*value2 = (uintptr_t)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (uintptr_t)op2.i64;
-else if(op2.kind == 23)
-*value2 = (uintptr_t)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (uintptr_t)op2.i64;
-else if(op2.kind == 22)
-*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;
+return GetOpUIntPtr(&op2, value2);
+}
+
+unsigned int GetOpIntSize(struct Operand * op2, ssize_t * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (ssize_t)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (ssize_t)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (ssize_t)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (ssize_t)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (ssize_t)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (ssize_t)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (ssize_t)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (ssize_t)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (ssize_t)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (ssize_t)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (ssize_t)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (ssize_t)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (ssize_t)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (ssize_t)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (ssize_t)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetIntSize(struct Expression * exp, ssize_t * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (ssize_t)op2.i;
-else if(op2.kind == 3)
-*value2 = (ssize_t)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (ssize_t)op2.i64;
-else if(op2.kind == 4)
-*value2 = (ssize_t)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (ssize_t)op2.i64;
-else if(op2.kind == 23)
-*value2 = (ssize_t)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (ssize_t)op2.i64;
-else if(op2.kind == 22)
-*value2 = (ssize_t)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (ssize_t)op2.s;
-else if(op2.kind == 2)
-*value2 = (ssize_t)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (ssize_t)op2.c;
-else if(op2.kind == 1)
-*value2 = (ssize_t)op2.uc;
-else if(op2.kind == 6)
-*value2 = (ssize_t)op2.f;
-else if(op2.kind == 7)
-*value2 = (ssize_t)op2.d;
-else if(op2.kind == 13)
-*value2 = (ssize_t)op2.ui64;
+return GetOpIntSize(&op2, value2);
+}
+
+unsigned int GetOpUIntSize(struct Operand * op2, size_t * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (size_t)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (size_t)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (size_t)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (size_t)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (size_t)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (size_t)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (size_t)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (size_t)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (size_t)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (size_t)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (size_t)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (size_t)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (size_t)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (size_t)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (size_t)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetUIntSize(struct Expression * exp, size_t * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (size_t)op2.i;
-else if(op2.kind == 3)
-*value2 = (size_t)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (size_t)op2.i64;
-else if(op2.kind == 4)
-*value2 = (size_t)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (size_t)op2.i64;
-else if(op2.kind == 23)
-*value2 = (size_t)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (size_t)op2.i64;
-else if(op2.kind == 22)
-*value2 = (size_t)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (size_t)op2.s;
-else if(op2.kind == 2)
-*value2 = (size_t)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (size_t)op2.c;
-else if(op2.kind == 1)
-*value2 = (size_t)op2.uc;
-else if(op2.kind == 6)
-*value2 = (size_t)op2.f;
-else if(op2.kind == 7)
-*value2 = (size_t)op2.d;
-else if(op2.kind == 13)
-*value2 = (size_t)op2.ui64;
+return GetOpUIntSize(&op2, value2);
+}
+
+unsigned int GetOpShort(struct Operand * op2, short * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (short)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (short)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (short)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (short)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (short)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (short)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (short)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (short)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (short)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (short)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (short)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (short)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (short)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (short)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetShort(struct Expression * exp, short * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (short)op2.i;
-else if(op2.kind == 3)
-*value2 = (short)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (short)op2.i64;
-else if(op2.kind == 4)
-*value2 = (short)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (short)op2.i64;
-else if(op2.kind == 23)
-*value2 = (short)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (short)op2.i64;
-else if(op2.kind == 22)
-*value2 = (short)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = op2.s;
-else if(op2.kind == 2)
-*value2 = (short)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (short)op2.c;
-else if(op2.kind == 1)
-*value2 = (short)op2.uc;
-else if(op2.kind == 6)
-*value2 = (short)op2.f;
-else if(op2.kind == 7)
-*value2 = (short)op2.d;
-else if(op2.kind == 13)
-*value2 = (short)op2.ui64;
+return GetOpShort(&op2, value2);
+}
+
+unsigned int GetOpUShort(struct Operand * op2, unsigned short * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (unsigned short)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (unsigned short)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (unsigned short)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (unsigned short)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (unsigned short)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (unsigned short)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (unsigned short)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (unsigned short)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (unsigned short)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (unsigned short)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (unsigned short)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (unsigned short)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (unsigned short)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (unsigned short)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetUShort(struct Expression * exp, unsigned short * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (unsigned short)op2.i;
-else if(op2.kind == 3)
-*value2 = (unsigned short)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (unsigned short)op2.i64;
-else if(op2.kind == 4)
-*value2 = (unsigned short)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (unsigned short)op2.i64;
-else if(op2.kind == 23)
-*value2 = (unsigned short)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (unsigned short)op2.i64;
-else if(op2.kind == 22)
-*value2 = (unsigned short)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (unsigned short)op2.s;
-else if(op2.kind == 2)
-*value2 = op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (unsigned short)op2.c;
-else if(op2.kind == 1)
-*value2 = (unsigned short)op2.uc;
-else if(op2.kind == 6)
-*value2 = (unsigned short)op2.f;
-else if(op2.kind == 7)
-*value2 = (unsigned short)op2.d;
-else if(op2.kind == 13)
-*value2 = (unsigned short)op2.ui64;
+return GetOpUShort(&op2, value2);
+}
+
+unsigned int GetOpChar(struct Operand * op2, char * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (char)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (char)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (char)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (char)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (char)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (char)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (char)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (char)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (char)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (char)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (char)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (char)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (char)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (char)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetChar(struct Expression * exp, char * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (char)op2.i;
-else if(op2.kind == 3)
-*value2 = (char)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (char)op2.i64;
-else if(op2.kind == 4)
-*value2 = (char)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (char)op2.i64;
-else if(op2.kind == 23)
-*value2 = (char)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (char)op2.i64;
-else if(op2.kind == 22)
-*value2 = (char)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (char)op2.s;
-else if(op2.kind == 2)
-*value2 = (char)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = op2.c;
-else if(op2.kind == 1)
-*value2 = (char)op2.uc;
-else if(op2.kind == 6)
-*value2 = (char)op2.f;
-else if(op2.kind == 7)
-*value2 = (char)op2.d;
-else if(op2.kind == 13)
-*value2 = (char)op2.ui64;
+return GetOpChar(&op2, value2);
+}
+
+unsigned int GetOpUChar(struct Operand * op2, unsigned char * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (unsigned char)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (unsigned char)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (unsigned char)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (unsigned char)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (unsigned char)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (unsigned char)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (unsigned char)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (unsigned char)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (unsigned char)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (unsigned char)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (unsigned char)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (unsigned char)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (unsigned char)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (unsigned char)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetUChar(struct Expression * exp, unsigned char * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (unsigned char)op2.i;
-else if(op2.kind == 3)
-*value2 = (unsigned char)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (unsigned char)op2.i64;
-else if(op2.kind == 4)
-*value2 = (unsigned char)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (unsigned char)op2.i64;
-else if(op2.kind == 23)
-*value2 = (unsigned char)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (unsigned char)op2.i64;
-else if(op2.kind == 22)
-*value2 = (unsigned char)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (unsigned char)op2.s;
-else if(op2.kind == 2)
-*value2 = (unsigned char)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (unsigned char)op2.c;
-else if(op2.kind == 1)
-*value2 = op2.uc;
-else if(op2.kind == 6)
-*value2 = (unsigned char)op2.f;
-else if(op2.kind == 7)
-*value2 = (unsigned char)op2.d;
-else if(op2.kind == 13)
-*value2 = (unsigned char)op2.ui64;
+return GetOpUChar(&op2, value2);
+}
+
+unsigned int GetOpFloat(struct Operand * op2, float * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (float)(float)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (float)(float)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (float)(float)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (float)(float)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (float)(float)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (float)(float)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (float)(float)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (float)(float)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (float)(float)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (float)(float)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (float)(float)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (float)(float)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (float)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (float)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (float)(float)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetFloat(struct Expression * exp, float * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (float)(float)op2.i;
-else if(op2.kind == 3)
-*value2 = (float)(float)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (float)(float)op2.i64;
-else if(op2.kind == 4)
-*value2 = (float)(float)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (float)(float)op2.i64;
-else if(op2.kind == 23)
-*value2 = (float)(float)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (float)(float)op2.i64;
-else if(op2.kind == 22)
-*value2 = (float)(float)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (float)(float)op2.s;
-else if(op2.kind == 2)
-*value2 = (float)(float)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (float)(float)op2.c;
-else if(op2.kind == 1)
-*value2 = (float)(float)op2.uc;
-else if(op2.kind == 6)
-*value2 = (float)op2.f;
-else if(op2.kind == 7)
-*value2 = (float)op2.d;
-else if(op2.kind == 13)
-*value2 = (float)(float)op2.ui64;
+return GetOpFloat(&op2, value2);
+}
+
+unsigned int GetOpDouble(struct Operand * op2, double * value2)
+{
+if(op2->kind == 3 && op2->type->isSigned)
+*value2 = (double)(double)op2->__anon1.i;
+else if(op2->kind == 3)
+*value2 = (double)(double)op2->__anon1.ui;
+else if(op2->kind == 4 && op2->type->isSigned)
+*value2 = (double)(double)op2->__anon1.i64;
+else if(op2->kind == 4)
+*value2 = (double)(double)op2->__anon1.ui64;
+else if(op2->kind == 23 && op2->type->isSigned)
+*value2 = (double)(double)op2->__anon1.i64;
+else if(op2->kind == 23)
+*value2 = (double)(double)op2->__anon1.ui64;
+else if(op2->kind == 22 && op2->type->isSigned)
+*value2 = (double)(double)op2->__anon1.i64;
+else if(op2->kind == 22)
+*value2 = (double)(double)op2->__anon1.ui64;
+else if(op2->kind == 2 && op2->type->isSigned)
+*value2 = (double)(double)op2->__anon1.s;
+else if(op2->kind == 2)
+*value2 = (double)(double)op2->__anon1.us;
+else if(op2->kind == 1 && op2->type->isSigned)
+*value2 = (double)(double)op2->__anon1.c;
+else if(op2->kind == 24 || op2->kind == 1)
+*value2 = (double)(double)op2->__anon1.uc;
+else if(op2->kind == 6)
+*value2 = (double)op2->__anon1.f;
+else if(op2->kind == 7)
+*value2 = (double)op2->__anon1.d;
+else if(op2->kind == 13)
+*value2 = (double)(double)op2->__anon1.ui64;
 else
-return 0x0;
-return 0x1;
+return 0;
+return 1;
 }
 
 unsigned int GetDouble(struct Expression * exp, double * value2)
 {
 struct Operand op2 = GetOperand(exp);
 
-if(op2.kind == 3 && op2.type->isSigned)
-*value2 = (double)(double)op2.i;
-else if(op2.kind == 3)
-*value2 = (double)(double)op2.ui;
-else if(op2.kind == 4 && op2.type->isSigned)
-*value2 = (double)(double)op2.i64;
-else if(op2.kind == 4)
-*value2 = (double)(double)op2.ui64;
-else if(op2.kind == 23 && op2.type->isSigned)
-*value2 = (double)(double)op2.i64;
-else if(op2.kind == 23)
-*value2 = (double)(double)op2.ui64;
-else if(op2.kind == 22 && op2.type->isSigned)
-*value2 = (double)(double)op2.i64;
-else if(op2.kind == 22)
-*value2 = (double)(double)op2.ui64;
-else if(op2.kind == 2 && op2.type->isSigned)
-*value2 = (double)(double)op2.s;
-else if(op2.kind == 2)
-*value2 = (double)(double)op2.us;
-else if(op2.kind == 1 && op2.type->isSigned)
-*value2 = (double)(double)op2.c;
-else if(op2.kind == 1)
-*value2 = (double)(double)op2.uc;
-else if(op2.kind == 6)
-*value2 = (double)op2.f;
-else if(op2.kind == 7)
-*value2 = (double)op2.d;
-else if(op2.kind == 13)
-*value2 = (double)(double)op2.ui64;
-else
-return 0x0;
-return 0x1;
+return GetOpDouble(&op2, value2);
 }
 
 void ComputeExpression(struct Expression * exp);
@@ -2199,12 +2388,12 @@ struct __ecereNameSpace__ecere__com__BitMember
 {
 struct __ecereNameSpace__ecere__com__BitMember * prev;
 struct __ecereNameSpace__ecere__com__BitMember * next;
-char *  name;
+const char *  name;
 unsigned int isProperty;
 int memberAccess;
 int id;
 struct __ecereNameSpace__ecere__com__Class * _class;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
 struct Type * dataType;
 int type;
@@ -2231,7 +2420,6 @@ struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_cla
 
 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;
 
@@ -2256,7 +2444,7 @@ if(!dataMember->isProperty)
 {
 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
 {
-dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
+dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
 }
 }
 }
@@ -2293,7 +2481,7 @@ else if(dataMember->type == 0 && dataMember->dataType)
 int size;
 int alignment = 0;
 
-if(dataMember->dataType->kind != 8 || ((!dataMember->dataType->_class || !dataMember->dataType->_class->registered || dataMember->dataType->_class->registered != _class || _class->type != 1)))
+if(dataMember->dataType->kind != 8 || ((!dataMember->dataType->__anon1._class || !dataMember->dataType->__anon1._class->__anon1.registered || dataMember->dataType->__anon1._class->__anon1.registered != _class || _class->type != 1)))
 ComputeTypeSize(dataMember->dataType);
 if(dataMember->dataType->bitFieldCount)
 {
@@ -2382,7 +2570,7 @@ else
 {
 int alignment;
 
-ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 0x1);
+ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
 alignment = dataMember->structAlignment;
 if(isMember)
 {
@@ -2498,7 +2686,7 @@ if(deriv->computeSize)
 deriv->offset = _class->structSize;
 deriv->memberOffset = 0;
 deriv->structSize = deriv->offset;
-ComputeClassMembers(deriv, 0x0);
+ComputeClassMembers(deriv, 0);
 }
 }
 }
@@ -2513,7 +2701,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 struct __ecereNameSpace__ecere__com__NameSpace
 {
-char *  name;
+const char *  name;
 struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
 struct __ecereNameSpace__ecere__com__NameSpace *  left;
 struct __ecereNameSpace__ecere__com__NameSpace *  right;
@@ -2536,7 +2724,7 @@ struct __ecereNameSpace__ecere__sys__OldList functions;
 struct __ecereNameSpace__ecere__sys__OldList modules;
 struct __ecereNameSpace__ecere__com__Instance * prev;
 struct __ecereNameSpace__ecere__com__Instance * next;
-char *  name;
+const char *  name;
 void *  library;
 void *  Unload;
 int importType;
@@ -2553,16 +2741,14 @@ struct __ecereNameSpace__ecere__sys__OldLink * subModule;
 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 + structSize_Instance)))->classes.first; _class; _class = _class->next)
-ComputeClassMembers(_class, 0x0);
+ComputeClassMembers(_class, 0);
 }
 
 extern unsigned int inCompiler;
 
-extern void Compiler_Error(char *  format, ...);
+extern void Compiler_Error(const char *  format, ...);
 
-extern char *  __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char *  string, char *  stringAndContext);
-
-extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
+extern const char *  __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char *  string, const char *  stringAndContext);
 
 int ComputeTypeSize(struct Type * type)
 {
@@ -2570,9 +2756,12 @@ unsigned int size = type ? type->size : 0;
 
 if(!size && type && !type->computing)
 {
-type->computing = 0x1;
+type->computing = 1;
 switch(type->kind)
 {
+case 24:
+type->alignment = size = sizeof(char);
+break;
 case 1:
 type->alignment = size = sizeof(char);
 break;
@@ -2602,11 +2791,11 @@ type->alignment = size = sizeof(double);
 break;
 case 8:
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class ? type->_class->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
 
 if(_class && _class->type == 1)
 {
-ComputeClassMembers(_class, 0x0);
+ComputeClassMembers(_class, 0);
 type->alignment = _class->structAlignment;
 size = _class->structSize;
 if(type->alignment && size % type->alignment)
@@ -2615,7 +2804,7 @@ size += type->alignment - (size % type->alignment);
 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 size = type->alignment = ComputeTypeSize(_class->dataType);
 }
 else
@@ -2627,47 +2816,47 @@ case 19:
 size = type->alignment = targetBits / 8;
 break;
 case 12:
-if(type->arraySizeExp)
+if(type->__anon1.__anon4.arraySizeExp)
 {
-ProcessExpressionType(type->arraySizeExp);
-ComputeExpression(type->arraySizeExp);
-if(!type->arraySizeExp->isConstant || (type->arraySizeExp->expType->kind != 3 && type->arraySizeExp->expType->kind != 15 && (type->arraySizeExp->expType->kind != 8 || !type->arraySizeExp->expType->_class->registered || type->arraySizeExp->expType->_class->registered->type != 4)))
+ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
+ComputeExpression(type->__anon1.__anon4.arraySizeExp);
+if(!type->__anon1.__anon4.arraySizeExp->isConstant || (type->__anon1.__anon4.arraySizeExp->expType->kind != 3 && type->__anon1.__anon4.arraySizeExp->expType->kind != 2 && type->__anon1.__anon4.arraySizeExp->expType->kind != 1 && type->__anon1.__anon4.arraySizeExp->expType->kind != 5 && type->__anon1.__anon4.arraySizeExp->expType->kind != 4 && type->__anon1.__anon4.arraySizeExp->expType->kind != 23 && type->__anon1.__anon4.arraySizeExp->expType->kind != 22 && type->__anon1.__anon4.arraySizeExp->expType->kind != 15 && (type->__anon1.__anon4.arraySizeExp->expType->kind != 8 || !type->__anon1.__anon4.arraySizeExp->expType->__anon1._class->__anon1.registered || type->__anon1.__anon4.arraySizeExp->expType->__anon1._class->__anon1.registered->type != 4)))
 {
 struct Location oldLoc = yylloc;
 char expression[10240];
 
 expression[0] = '\0';
-type->arraySizeExp->expType = (((void *)0));
-yylloc = type->arraySizeExp->loc;
+type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
+yylloc = type->__anon1.__anon4.arraySizeExp->loc;
 if(inCompiler)
-PrintExpression(type->arraySizeExp, expression);
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Array size not constant int (%s)\n", (((void *)0))), expression);
+PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
 yylloc = oldLoc;
 }
-GetInt(type->arraySizeExp, &type->arraySize);
+GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
 }
-else if(type->enumClass)
+else if(type->__anon1.__anon4.enumClass)
 {
-if(type->enumClass && type->enumClass->registered && type->enumClass->registered->type == 4)
+if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
 {
-type->arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->enumClass->registered, "enumSize");
+type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
 }
 else
-type->arraySize = 0;
+type->__anon1.__anon4.arraySize = 0;
 }
 else
 {
-type->arraySize = 0;
+type->__anon1.__anon4.arraySize = 0;
 }
-size = ComputeTypeSize(type->type) * type->arraySize;
-if(type->type)
-type->alignment = type->type->alignment;
+size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
+if(type->__anon1.type)
+type->alignment = type->__anon1.type->alignment;
 break;
 case 9:
 {
 struct Type * member;
 
-for(member = type->members.first; member; member = member->next)
+for(member = type->__anon1.__anon1.members.first; member; member = member->next)
 {
 int __simpleStruct0, __simpleStruct1;
 unsigned int addSize = ComputeTypeSize(member);
@@ -2687,7 +2876,7 @@ case 10:
 {
 struct Type * member;
 
-for(member = type->members.first; member; member = member->next)
+for(member = type->__anon1.__anon1.members.first; member; member = member->next)
 {
 int __simpleStruct0, __simpleStruct1;
 unsigned int addSize = ComputeTypeSize(member);
@@ -2705,7 +2894,7 @@ break;
 }
 case 20:
 {
-struct TemplateParameter * param = type->templateParameter;
+struct TemplateParameter * param = type->__anon1.templateParameter;
 struct Type * baseType = ProcessTemplateParameterType(param);
 
 if(baseType)
@@ -2732,14 +2921,14 @@ break;
 }
 }
 type->size = size;
-type->computing = 0x0;
+type->computing = 0;
 }
 return size;
 }
 
 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
 
-extern struct Identifier * MkIdentifier(char *  string);
+extern struct Identifier * MkIdentifier(const char *  string);
 
 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void *  item);
 
@@ -2761,25 +2950,27 @@ extern struct Specifier * MkSpecifier(int specifier);
 
 extern struct Declarator * MkDeclaratorArray(struct Declarator * declarator, struct Expression * exp);
 
-extern struct Expression * MkExpConstant(char *  string);
+extern struct Expression * MkExpConstant(const 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, unsigned int * addedPadding)
 {
 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
 unsigned int totalSize = 0;
 unsigned int maxSize = 0;
-int alignment, size;
+int alignment;
+unsigned int size;
 struct __ecereNameSpace__ecere__com__DataMember * member;
+int anonID = 1;
 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
 
 if(addedPadding)
-*addedPadding = 0x0;
+*addedPadding = 0;
 if(!isMember && _class->base)
 {
 maxSize = _class->structSize;
 {
 if(_class->type == 1 || _class->type == 5)
-AddMembers(declarations, _class->base, 0x0, &totalSize, topClass, (((void *)0)));
+AddMembers(declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
 else
 {
 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
@@ -2813,7 +3004,7 @@ ReplaceThisClassSpecifiers(specs, topClass);
 {
 struct Type * type = ProcessType(specs, decl);
 
-DeclareType(member->dataType, 0x0, 0x0);
+DeclareType(member->dataType, 00);
 FreeType(type);
 }
 ComputeTypeSize(member->dataType);
@@ -2832,11 +3023,13 @@ case 1:
 case 2:
 {
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
+char id[100];
 
+sprintf(id, "__anon%d", anonID++);
 size = 0;
-AddMembers(list, (struct __ecereNameSpace__ecere__com__Class *)member, 0x1, &size, topClass, (((void *)0)));
+AddMembers(list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
-ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, (((void *)0)), (((void *)0)))));
+ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
 alignment = member->structAlignment;
 if(alignment)
 {
@@ -2871,7 +3064,7 @@ char sizeString[50];
 sprintf(sizeString, "%d", maxSize - totalSize);
 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
 if(addedPadding)
-*addedPadding = 0x1;
+*addedPadding = 1;
 }
 }
 if(context)
@@ -2882,12 +3075,11 @@ return topMember ? topMember->memberID : _class->memberID;
 static int DeclareMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
 {
 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
-unsigned int totalSize = 0;
 struct __ecereNameSpace__ecere__com__DataMember * member;
 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
 
 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
-DeclareMembers(_class->base, 0x0);
+DeclareMembers(_class->base, 0);
 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
 {
 if(!member->isProperty)
@@ -2897,15 +3089,15 @@ switch(member->type)
 case 0:
 {
 if(!member->dataType && member->dataTypeString)
-member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
+member->dataType = ProcessTypeString(member->dataTypeString, 0);
 if(member->dataType)
-DeclareType(member->dataType, 0x0, 0x0);
+DeclareType(member->dataType, 00);
 break;
 }
 case 1:
 case 2:
 {
-DeclareMembers((struct __ecereNameSpace__ecere__com__Class *)member, 0x1);
+DeclareMembers((struct __ecereNameSpace__ecere__com__Class *)member, 1);
 break;
 }
 }
@@ -2916,11 +3108,67 @@ FinishTemplatesContext(context);
 return topMember ? topMember->memberID : _class->memberID;
 }
 
-extern struct Symbol * FindClass(char *  name);
+extern struct Identifier * GetDeclId(struct Declarator * decl);
+
+static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
+{
+struct ClassDef * def;
+int anonID = 1;
+
+for(def = (*definitions).first; def; def = def->next)
+{
+if(def->type == 2)
+{
+struct Declaration * decl = def->__anon1.decl;
+
+if(decl && decl->__anon1.__anon1.specifiers)
+{
+struct Specifier * spec;
+unsigned int isStruct = 0;
+
+for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
+{
+if(spec->type == 3 || spec->type == 4)
+{
+if(spec->__anon1.__anon2.definitions)
+IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
+isStruct = 1;
+}
+}
+if(isStruct)
+{
+struct Declarator * d = (((void *)0));
+
+if(decl->__anon1.__anon1.declarators)
+{
+for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
+{
+struct Identifier * idDecl = GetDeclId(d);
+
+if(idDecl)
+break;
+}
+}
+if(!d)
+{
+char id[100];
+
+sprintf(id, "__anon%d", anonID++);
+if(!decl->__anon1.__anon1.declarators)
+decl->__anon1.__anon1.declarators = MkList();
+ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
+}
+}
+}
+}
+}
+}
+
+extern struct Symbol * FindClass(const char *  name);
 
 extern char *  strchr(const char * , int);
 
-extern void FullClassNameCat(char *  output, char *  className, unsigned int includeTemplateParams);
+extern void FullClassNameCat(char *  output, const char *  className, unsigned int includeTemplateParams);
 
 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (*  FreeFunction)(void * ));
 
@@ -2930,53 +3178,58 @@ extern struct External * MkExternalDeclaration(struct Declaration * declaration)
 
 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
 
-extern char *  strcpy(char * , const char * );
-
-extern void MangleClassName(char *  className);
-
-extern void DeclareClass(struct Symbol * classSym, char *  className);
+extern void DeclareClass(struct Symbol * classSym, const char *  className);
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item, void *  prevItem);
 
 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void *  prevItem, void *  item);
 
-void DeclareStruct(char * name, unsigned int skipNoHead)
+void DeclareStruct(const char * name, unsigned int skipNoHead)
 {
 struct External * external = (((void *)0));
 struct Symbol * classSym = FindClass(name);
 
 if(!inCompiler || !classSym)
 return ;
-if(classSym->registered && (classSym->registered->type == 2 || classSym->registered->type == 3 || classSym->registered->type == 4))
+if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
 return ;
-if(classSym->registered && classSym->imported && !classSym->declaredStructSym)
+if(classSym->__anon1.registered && classSym->imported && !classSym->declaredStructSym)
 {
 struct Declaration * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
 char structName[1024];
+struct Specifier * spec = (((void *)0));
 
-external = (classSym->registered && classSym->registered->type == 1) ? classSym->pointerExternal : classSym->structExternal;
+external = (classSym->__anon1.registered && classSym->__anon1.registered->type == 1) ? classSym->__anon2.__anon1.pointerExternal : classSym->__anon2.__anon1.structExternal;
 classSym->declaring++;
 if(strchr(classSym->string, '<'))
 {
-if(classSym->registered->templateClass)
+if(classSym->__anon1.registered->templateClass)
 {
-DeclareStruct(classSym->registered->templateClass->fullName, skipNoHead);
+DeclareStruct(classSym->__anon1.registered->templateClass->fullName, skipNoHead);
 classSym->declaring--;
 }
 return ;
 }
-DeclareMembers(classSym->registered, 0x0);
+DeclareMembers(classSym->__anon1.registered, 0);
 structName[0] = (char)0;
-FullClassNameCat(structName, name, 0x0);
-if(!skipNoHead)
+FullClassNameCat(structName, name, 0);
+if(external && external->__anon1.declaration && external->__anon1.declaration->__anon1.__anon1.specifiers)
+{
+for(spec = (*external->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
+{
+if(spec->type == 3 || spec->type == 4)
+break;
+}
+}
+if(!skipNoHead && (!spec || !spec->__anon1.__anon2.definitions))
 {
-unsigned int addedPadding = 0x0;
+unsigned int addedPadding = 0;
 
-classSym->declaredStructSym = 0x1;
+classSym->declaredStructSym = 1;
 declarations = MkList();
-AddMembers(declarations, classSym->registered, 0x0, (((void *)0)), classSym->registered, &addedPadding);
+AddMembers(declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
 if(!(*declarations).count || ((*declarations).count == 1 && addedPadding))
 {
 FreeList(declarations, FreeClassDef);
@@ -2985,14 +3238,15 @@ declarations = (((void *)0));
 }
 if(skipNoHead || declarations)
 {
-if(external && external->declaration)
+if(spec)
 {
-((struct Specifier *)(*external->declaration->specifiers).first)->definitions = declarations;
+if(declarations)
+spec->__anon1.__anon2.definitions = declarations;
 if(curExternal && curExternal->symbol && curExternal->symbol->idCode < classSym->id)
 {
-if(classSym->structExternal)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->structExternal, curExternal->prev);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->pointerExternal, curExternal->prev);
+if(classSym->__anon2.__anon1.structExternal)
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.structExternal, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.pointerExternal, curExternal->prev);
 classSym->id = curExternal->symbol->idCode;
 classSym->idCode = curExternal->symbol->idCode;
 }
@@ -3004,19 +3258,18 @@ external = MkExternalDeclaration((((void *)0)));
 specifiers = MkList();
 declarators = MkList();
 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
-external->declaration = decl = MkDeclaration(specifiers, declarators);
-if(decl->symbol && !decl->symbol->pointerExternal)
-decl->symbol->pointerExternal = external;
-if(classSym->registered && classSym->registered->type == 1)
+external->__anon1.declaration = decl = MkDeclaration(specifiers, declarators);
+if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
+decl->symbol->__anon2.__anon1.pointerExternal = external;
+if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
 {
 char className[1024];
 
 strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 0x1);
-MangleClassName(className);
+FullClassNameCat(className, classSym->string, 1);
 DeclareClass(classSym, className);
 external->symbol = classSym;
-classSym->pointerExternal = external;
+classSym->__anon2.__anon1.pointerExternal = external;
 classSym->id = (curExternal && curExternal->symbol) ? curExternal->symbol->idCode : 0;
 classSym->idCode = (curExternal && curExternal->symbol) ? curExternal->symbol->idCode : 0;
 }
@@ -3025,9 +3278,8 @@ else
 char className[1024];
 
 strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 0x1);
-MangleClassName(className);
-classSym->structExternal = external;
+FullClassNameCat(className, classSym->string, 1);
+classSym->__anon2.__anon1.structExternal = external;
 DeclareClass(classSym, className);
 external->symbol = classSym;
 }
@@ -3036,32 +3288,42 @@ __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal
 }
 classSym->declaring--;
 }
-else if(curExternal && curExternal->symbol && curExternal->symbol->idCode < classSym->id)
+else
+{
+if(classSym->__anon2.__anon1.structExternal && classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
+{
+struct Specifier * spec;
+
+for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
+{
+IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
+}
+}
+if(curExternal && curExternal->symbol && curExternal->symbol->idCode < classSym->id)
 {
 classSym->declaring++;
 {
-if(classSym->registered)
-DeclareMembers(classSym->registered, 0x0);
+if(classSym->__anon1.registered)
+DeclareMembers(classSym->__anon1.registered, 0);
 }
-if(classSym->registered && (classSym->registered->type == 1 || classSym->registered->type == 5))
+if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 1 || classSym->__anon1.registered->type == 5))
 {
-if(classSym->structExternal)
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->structExternal, curExternal->prev);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->pointerExternal, curExternal->prev);
+if(classSym->__anon2.__anon1.structExternal)
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.structExternal, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.pointerExternal, curExternal->prev);
 classSym->id = curExternal->symbol->idCode;
 classSym->idCode = curExternal->symbol->idCode;
 }
 classSym->declaring--;
 }
 }
-
-extern char *  strcat(char * , const char * );
+}
 
 extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Instance * moduleToFind);
 
 extern struct ModuleImport * mainModule;
 
-extern struct Specifier * MkSpecifierName(char *  name);
+extern struct Specifier * MkSpecifierName(const char *  name);
 
 extern struct Declarator * MkDeclaratorBrackets(struct Declarator * declarator);
 
@@ -3090,29 +3352,21 @@ void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameS
 void DeclareProperty(struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
 {
 struct Symbol * symbol = prop->symbol;
-char propName[1024];
 
 strcpy(setName, "__ecereProp_");
-FullClassNameCat(setName, prop->_class->fullName, 0x0);
+FullClassNameCat(setName, prop->_class->fullName, 0);
 strcat(setName, "_Set_");
-FullClassNameCat(setName, prop->name, 0x1);
+FullClassNameCat(setName, prop->name, 1);
 strcpy(getName, "__ecereProp_");
-FullClassNameCat(getName, prop->_class->fullName, 0x0);
+FullClassNameCat(getName, prop->_class->fullName, 0);
 strcat(getName, "_Get_");
-FullClassNameCat(getName, prop->name, 0x1);
-strcpy(propName, "__ecereProp_");
-FullClassNameCat(propName, prop->_class->fullName, 0x0);
-strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 0x1);
-MangleClassName(getName);
-MangleClassName(setName);
-MangleClassName(propName);
+FullClassNameCat(getName, prop->name, 1);
 if(prop->_class->type == 1)
-DeclareStruct(prop->_class->fullName, 0x0);
+DeclareStruct(prop->_class->fullName, 0);
 if(!symbol || curExternal->symbol->idCode < symbol->id)
 {
-unsigned int imported = 0x0;
-unsigned int dllImport = 0x0;
+unsigned int imported = 0;
+unsigned int dllImport = 0;
 
 if(!symbol || symbol->_import)
 {
@@ -3142,25 +3396,25 @@ symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass
 symbol->_import = (struct ClassImport *)__extension__ ({
 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
 
-__ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0x0, __ecereInstance1->hasSet = prop->Set ? 0x1 : 0x0, __ecereInstance1->hasGet = prop->Get ? 0x1 : 0x0, __ecereInstance1;
+__ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
 });
 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 + structSize_Instance)))->importType != 1)
-dllImport = 0x1;
+imported = 1;
+if((prop->_class->module != privateModule || !strcmp(prop->_class->name, "float") || !strcmp(prop->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)prop->_class->module + structSize_Instance)))->importType != 1)
+dllImport = 1;
 }
 if(!symbol->type)
 {
 struct Context * context = SetupTemplatesContext(prop->_class);
 
-symbol->type = ProcessTypeString(prop->dataTypeString, 0x0);
+symbol->type = ProcessTypeString(prop->dataTypeString, 0);
 FinishTemplatesContext(context);
 }
 if(prop->Get)
 {
-if(!symbol->externalGet || symbol->externalGet->type == 0)
+if(!symbol->__anon2.__anon2.externalGet || symbol->__anon2.__anon2.externalGet->type == 0)
 {
 struct Declaration * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
@@ -3169,7 +3423,7 @@ struct __ecereNameSpace__ecere__sys__OldList * params;
 struct Specifier * spec;
 struct External * external;
 struct Declarator * typeDecl;
-unsigned int simple = 0x0;
+unsigned int simple = 0;
 
 specifiers = MkList();
 declarators = MkList();
@@ -3190,13 +3444,13 @@ if(spec->type == 1)
 {
 if((!typeDecl || typeDecl->type == 1))
 {
-struct Symbol * classSym = spec->symbol;
+struct Symbol * classSym = spec->__anon1.__anon1.symbol;
 
-symbol->_class = classSym->registered;
-if(classSym->registered && classSym->registered->type == 1)
+symbol->_class = classSym->__anon1.registered;
+if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
 {
-DeclareStruct(spec->name, 0x0);
-simple = 0x1;
+DeclareStruct(spec->__anon1.__anon1.name, 0);
+simple = 1;
 }
 }
 }
@@ -3220,19 +3474,19 @@ decl = MkDeclaration(specifiers, declarators);
 external = MkExternalDeclaration(decl);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
 external->symbol = symbol;
-symbol->externalGet = external;
+symbol->__anon2.__anon2.externalGet = external;
 ReplaceThisClassSpecifiers(specifiers, prop->_class);
 if(typeDecl)
 FreeDeclarator(typeDecl);
 }
 else
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->externalGet, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon2.externalGet, curExternal->prev);
 }
 }
 if(prop->Set)
 {
-if(!symbol->externalSet || symbol->externalSet->type == 0)
+if(!symbol->__anon2.__anon2.externalSet || symbol->__anon2.__anon2.externalSet->type == 0)
 {
 struct Declaration * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
@@ -3255,6 +3509,8 @@ struct Context * context = SetupTemplatesContext(prop->_class);
 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
 FinishTemplatesContext(context);
 }
+if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
 ListAdd(params, MkTypeName(specifiers, d));
 d = MkDeclaratorIdentifier(MkIdentifier(setName));
 if(dllImport)
@@ -3266,11 +3522,11 @@ if(spec->type == 1)
 {
 if((!typeDecl || typeDecl->type == 1))
 {
-struct Symbol * classSym = spec->symbol;
+struct Symbol * classSym = spec->__anon1.__anon1.symbol;
 
-symbol->_class = classSym->registered;
-if(classSym->registered && classSym->registered->type == 1)
-DeclareStruct(spec->name, 0x0);
+symbol->_class = classSym->__anon1.registered;
+if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
+DeclareStruct(spec->__anon1.__anon1.name, 0);
 }
 }
 }
@@ -3288,25 +3544,30 @@ decl = MkDeclaration(specifiers, declarators);
 external = MkExternalDeclaration(decl);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
 external->symbol = symbol;
-symbol->externalSet = external;
+symbol->__anon2.__anon2.externalSet = external;
 ReplaceThisClassSpecifiers(specifiers, prop->_class);
 }
 else
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->externalSet, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon2.externalSet, curExternal->prev);
 }
 }
-if(!symbol->externalPtr)
+if(!symbol->__anon2.__anon2.externalPtr)
 {
 struct Declaration * decl;
 struct External * external;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
+char propName[1024];
 
 if(imported)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
 else
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
 ListAdd(specifiers, MkSpecifierName("Property"));
+strcpy(propName, "__ecereProp_");
+FullClassNameCat(propName, prop->_class->fullName, 0);
+strcat(propName, "_");
+FullClassNameCat(propName, prop->name, 1);
 {
 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
 
@@ -3314,10 +3575,9 @@ ListAdd(list, MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((v
 if(!imported)
 {
 strcpy(propName, "__ecerePropM_");
-FullClassNameCat(propName, prop->_class->fullName, 0x0);
+FullClassNameCat(propName, prop->_class->fullName, 0);
 strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 0x1);
-MangleClassName(propName);
+FullClassNameCat(propName, prop->name, 1);
 ListAdd(list, MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(propName))), (((void *)0))));
 }
 decl = MkDeclaration(specifiers, list);
@@ -3325,11 +3585,11 @@ decl = MkDeclaration(specifiers, list);
 external = MkExternalDeclaration(decl);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
 external->symbol = symbol;
-symbol->externalPtr = external;
+symbol->__anon2.__anon2.externalPtr = external;
 }
 else
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->externalPtr, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon2.externalPtr, curExternal->prev);
 }
 symbol->id = curExternal->symbol->idCode;
 }
@@ -3343,10 +3603,10 @@ if(source)
 {
 if(source->kind == 13 || source->kind == 12)
 {
-type = source->type;
-source->type->refCount++;
+type = source->__anon1.type;
+source->__anon1.type->refCount++;
 }
-else if(source->kind == 8 && !strcmp(source->_class->string, "String"))
+else if(source->kind == 8 && !strcmp(source->__anon1._class->string, "String"))
 {
 type = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
@@ -3354,13 +3614,13 @@ struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__e
 __ecereInstance1->kind = 1, __ecereInstance1->refCount = 1, __ecereInstance1;
 });
 }
-else if(source->kind == 8 && source->_class && source->_class->registered && source->_class->registered->type == 5)
+else if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 5)
 {
 type = source;
 source->refCount++;
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot dereference type\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot dereference type\n", (((void *)0))));
 }
 return type;
 }
@@ -3374,7 +3634,7 @@ if(source)
 type = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->kind = 13, __ecereInstance1->type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
+__ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
 });
 source->refCount++;
 }
@@ -3391,21 +3651,21 @@ extern void FreeExpression(struct Expression * exp);
 
 extern void __ecereNameSpace__ecere__sys__ChangeCh(char *  string, char ch1, char ch2);
 
-unsigned int MatchTypes(struct Type * source, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, struct __ecereNameSpace__ecere__com__Class * owningClassSource, struct __ecereNameSpace__ecere__com__Class * owningClassDest, unsigned int doConversion, unsigned int enumBaseType, unsigned int acceptReversedParams, unsigned int isConversionExploration);
+unsigned int MatchTypes(struct Type * source, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, struct __ecereNameSpace__ecere__com__Class * owningClassSource, struct __ecereNameSpace__ecere__com__Class * owningClassDest, unsigned int doConversion, unsigned int enumBaseType, unsigned int acceptReversedParams, unsigned int isConversionExploration, unsigned int warnConst);
 
 static void ProcessInitializer(struct Initializer * init, struct Type * type);
 
-extern struct Type * MkClassType(char *  name);
+extern struct Type * MkClassType(const char *  name);
 
-extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, unsigned int size, unsigned int alignment, int declMode);
+extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
 
 void ProcessMemberInitData(struct MemberInit * member, struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class ** curClass, struct __ecereNameSpace__ecere__com__DataMember ** curMember, struct __ecereNameSpace__ecere__com__DataMember ** subMemberStack, int * subMemberStackPos)
 {
 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
-unsigned int found = 0x0;
+unsigned int found = 0;
 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
-unsigned int freeType = 0x0;
+unsigned int freeType = 0;
 
 yylloc = member->loc;
 if(!ident)
@@ -3415,7 +3675,7 @@ if(curMember)
 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
 if(*curMember)
 {
-found = 0x1;
+found = 1;
 dataMember = *curMember;
 }
 }
@@ -3438,13 +3698,13 @@ if(curMember && thisMember->memberAccess == 1)
 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
 *subMemberStackPos = _subMemberStackPos;
 }
-found = 0x1;
+found = 1;
 }
 else
 {
 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
 if(method && method->type == 1)
-found = 0x1;
+found = 1;
 else
 method = (((void *)0));
 }
@@ -3459,7 +3719,7 @@ if(!dataMember->dataType && dataMember->dataTypeString)
 {
 struct Context * context = SetupTemplatesContext(_class);
 
-dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
+dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
 FinishTemplatesContext(context);
 }
 type = dataMember->dataType;
@@ -3476,9 +3736,9 @@ for(ident = ident->next; ident && type; ident = ident->next)
 {
 if(type->kind == 8)
 {
-dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->_class->registered, ident->string, privateModule);
+dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
 if(!dataMember)
-dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->_class->registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
+dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
 if(dataMember)
 type = dataMember->dataType;
 }
@@ -3486,7 +3746,7 @@ else if(type->kind == 9 || type->kind == 10)
 {
 struct Type * memberType;
 
-for(memberType = type->members.first; memberType; memberType = memberType->next)
+for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
 {
 if(!strcmp(memberType->name, ident->string))
 {
@@ -3497,7 +3757,7 @@ break;
 }
 }
 }
-if(type && type->kind == 20 && type->templateParameter->type == 0 && _class->templateArgs)
+if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
 {
 int id = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
@@ -3510,7 +3770,7 @@ if(sClass->templateClass)
 sClass = sClass->templateClass;
 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
 {
-if(curParam->type == 0 && !strcmp(type->templateParameter->identifier->string, curParam->name))
+if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
 {
 for(sClass = sClass->base; sClass; sClass = sClass->base)
 {
@@ -3529,23 +3789,35 @@ if(curParam)
 {
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
 
-if(arg.dataTypeString)
+if(arg.__anon1.__anon1.dataTypeString)
 {
-type = ProcessTypeString(arg.dataTypeString, 0x0);
-freeType = 0x1;
+unsigned int constant = type->constant;
+
+type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+if(type->kind == 8 && constant)
+type->constant = 1;
+else if(type->kind == 13)
+{
+struct Type * t = type->__anon1.type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+if(constant)
+t->constant = constant;
+}
+freeType = 1;
 if(type && _class->templateClass)
-type->passAsTemplate = 0x1;
+type->passAsTemplate = 1;
 if(type)
 {
 }
 }
 }
 }
-if(type && type->kind == 8 && type->_class && type->_class->registered && strchr(type->_class->registered->fullName, '<'))
+if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
 {
-struct __ecereNameSpace__ecere__com__Class * expClass = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
-int c;
 int paramCount = 0;
 int lastParam = -1;
 char templateString[1024];
@@ -3587,12 +3859,12 @@ p += nextClass->templateParams.count;
 }
 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
 {
-if(cParam->type == 0 && arg.dataTypeString && !strcmp(cParam->name, arg.dataTypeString))
+if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
 {
-if(_class->templateArgs && arg.dataTypeString && (!param->defaultArg.dataTypeString || strcmp(arg.dataTypeString, param->defaultArg.dataTypeString)))
+if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
 {
-arg.dataTypeString = _class->templateArgs[p].dataTypeString;
-arg.dataTypeClass = _class->templateArgs[p].dataTypeClass;
+arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
+arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
 break;
 }
 }
@@ -3608,11 +3880,12 @@ case 2:
 {
 char expString[1024];
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl = SpecDeclFromString(param->dataTypeString, specs, (((void *)0)));
+struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
 struct Expression * exp;
-char * string = PrintHexUInt64(arg.expression.ui64);
+char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
 
 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
+(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
 ProcessExpressionType(exp);
 ComputeExpression(exp);
 expString[0] = '\0';
@@ -3623,13 +3896,13 @@ break;
 }
 case 1:
 {
-strcat(argument, arg.member->name);
+strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
 break;
 }
 case 0:
 {
-if(arg.dataTypeString && (!param->defaultArg.dataTypeString || strcmp(arg.dataTypeString, param->defaultArg.dataTypeString)))
-strcat(argument, arg.dataTypeString);
+if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+strcat(argument, arg.__anon1.__anon1.dataTypeString);
 break;
 }
 }
@@ -3668,29 +3941,29 @@ struct Context * context = SetupTemplatesContext(_class);
 
 if(freeType)
 FreeType(type);
-type = ProcessTypeString(templateString, 0x0);
-freeType = 0x1;
+type = ProcessTypeString(templateString, 0);
+freeType = 1;
 FinishTemplatesContext(context);
 }
 }
-if(method && member->initializer && member->initializer->type == 0 && member->initializer->exp)
+if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
 {
-ProcessExpressionType(member->initializer->exp);
-if(!member->initializer->exp->expType)
+ProcessExpressionType(member->initializer->__anon1.exp);
+if(!member->initializer->__anon1.exp->expType)
 {
 if(inCompiler)
 {
 char expString[10240];
 
 expString[0] = '\0';
-PrintExpression(member->initializer->exp, expString);
+PrintExpression(member->initializer->__anon1.exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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))
+else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible instance method %s\n", (((void *)0))), ident->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
 }
 }
 else if(member->initializer)
@@ -3722,23 +3995,21 @@ if(ident)
 {
 if(method)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
 }
 else if(_class)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
 }
 }
 }
 
-extern struct Identifier * GetDeclId(struct Declarator * decl);
-
 extern struct External * ProcessClassFunction(struct __ecereNameSpace__ecere__com__Class * owningClass, struct ClassFunction * func, struct __ecereNameSpace__ecere__sys__OldList * defs, struct External * after, unsigned int makeStatic);
 
 extern void FreeSpecifier(struct Specifier * spec);
@@ -3766,14 +4037,14 @@ struct MembersInit * members;
 struct Symbol * classSym;
 struct __ecereNameSpace__ecere__com__Class * _class;
 
-classSym = inst->_class->symbol;
-_class = classSym ? classSym->registered : (((void *)0));
+classSym = inst->_class->__anon1.__anon1.symbol;
+_class = classSym ? classSym->__anon1.registered : (((void *)0));
 if(!_class || _class->type != 5)
-DeclareStruct(inst->_class->name, 0x0);
+DeclareStruct(inst->_class->__anon1.__anon1.name, 0);
 afterExternal = afterExternal ? afterExternal : curExternal;
 if(inst->exp)
 ProcessExpressionType(inst->exp);
-inst->isConstant = 0x1;
+inst->isConstant = 1;
 if(inst->members)
 {
 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
@@ -3791,7 +4062,7 @@ char name[1024];
 static unsigned int instMethodID = 0;
 struct External * external = curExternal;
 struct Context * context = curContext;
-struct Declarator * declarator = members->function->declarator;
+struct Declarator * declarator = members->__anon1.function->declarator;
 struct Identifier * nameID = GetDeclId(declarator);
 char * unmangled = nameID ? nameID->string : (((void *)0));
 struct Expression * exp;
@@ -3802,7 +4073,7 @@ if(inCompiler)
 char number[16];
 
 strcpy(name, "__ecereInstMeth_");
-FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0x0);
+FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
 strcat(name, "_");
 strcat(name, nameID->string);
 strcat(name, "_");
@@ -3817,31 +4088,31 @@ struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__
 
 if(method && method->type == 1)
 {
-symbol->method = method;
+symbol->__anon1.method = method;
 ProcessMethodType(method);
-if(!symbol->type->thisClass)
+if(!symbol->type->__anon1.__anon2.thisClass)
 {
-if(method->dataType->thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->thisClass->registered))
+if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
 {
 if(!currentClass->symbol)
 currentClass->symbol = FindClass(currentClass->fullName);
-symbol->type->thisClass = currentClass->symbol;
+symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
 }
 else
 {
 if(!_class->symbol)
 _class->symbol = FindClass(_class->fullName);
-symbol->type->thisClass = _class->symbol;
+symbol->type->__anon1.__anon2.thisClass = _class->symbol;
 }
 }
-DeclareType(symbol->type, 0x1, 0x1);
+DeclareType(symbol->type, 1, 1);
 }
 else if(classSym)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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);
+createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
 if(nameID)
 {
 FreeSpecifier(nameID->_class);
@@ -3849,7 +4120,6 @@ nameID->_class = (((void *)0));
 }
 if(inCompiler)
 {
-struct Type * type = declarator->symbol->type;
 struct External * oldExternal = curExternal;
 
 declarator->symbol->id = declarator->symbol->idCode = curExternal->symbol->idCode;
@@ -3858,49 +4128,49 @@ struct External * externalDecl;
 
 externalDecl = MkExternalDeclaration((((void *)0)));
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), oldExternal->prev, externalDecl);
-if(createdExternal->function)
+if(createdExternal->__anon1.function)
 {
-ProcessFunction(createdExternal->function);
+ProcessFunction(createdExternal->__anon1.function);
 {
-struct Declaration * decl = MkDeclaration(CopyList(createdExternal->function->specifiers, CopySpecifier), MkListOne(MkInitDeclarator(CopyDeclarator(declarator), (((void *)0)))));
+struct Declaration * decl = MkDeclaration(CopyList(createdExternal->__anon1.function->specifiers, CopySpecifier), MkListOne(MkInitDeclarator(CopyDeclarator(declarator), (((void *)0)))));
 
-externalDecl->declaration = decl;
-if(decl->symbol && !decl->symbol->pointerExternal)
-decl->symbol->pointerExternal = externalDecl;
-declarator->symbol->pointerExternal = externalDecl;
+externalDecl->__anon1.declaration = decl;
+if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
+decl->symbol->__anon2.__anon1.pointerExternal = externalDecl;
+declarator->symbol->__anon2.__anon1.pointerExternal = externalDecl;
 }
 }
 }
 }
 else if(declarator)
 {
-curExternal = declarator->symbol->pointerExternal;
-ProcessFunction((struct FunctionDefinition *)members->function);
+curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
+ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
 }
 curExternal = external;
 curContext = context;
 if(inCompiler)
 {
-FreeClassFunction(members->function);
+FreeClassFunction(members->__anon1.function);
 exp = QMkExpId(name);
 members->type = 0;
-members->dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
+members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
 }
 break;
 }
 case 0:
 {
-if(members->dataMembers && classSym)
+if(members->__anon1.dataMembers && classSym)
 {
 struct MemberInit * member;
 struct Location oldyyloc = yylloc;
 
-for(member = (*members->dataMembers).first; member; member = member->next)
+for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
 {
-ProcessMemberInitData(member, classSym->registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
+ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
 if(member->initializer && !member->initializer->isConstant)
-inst->isConstant = 0x0;
+inst->isConstant = 0;
 }
 yylloc = oldyyloc;
 }
@@ -3922,31 +4192,31 @@ struct Type * param;
 
 if(declareParams)
 {
-for(param = type->params.first; param; param = param->next)
-DeclareType(param, declarePointers, 0x1);
+for(param = type->__anon1.__anon2.params.first; param; param = param->next)
+DeclareType(param, declarePointers, 1);
 }
-DeclareType(type->returnType, declarePointers, 0x1);
+DeclareType(type->__anon1.__anon2.returnType, declarePointers, 1);
 }
 else if(type->kind == 13 && declarePointers)
-DeclareType(type->type, declarePointers, 0x0);
+DeclareType(type->__anon1.type, declarePointers, 0);
 else if(type->kind == 8)
 {
-if(type->_class->registered && (type->_class->registered->type == 1 || type->_class->registered->type == 5) && !type->_class->declaring)
-DeclareStruct(type->_class->registered->fullName, type->_class->registered->type == 5);
+if(type->__anon1._class->__anon1.registered && (type->__anon1._class->__anon1.registered->type == 1 || type->__anon1._class->__anon1.registered->type == 5) && !type->__anon1._class->declaring)
+DeclareStruct(type->__anon1._class->__anon1.registered->fullName, type->__anon1._class->__anon1.registered->type == 5);
 }
 else if(type->kind == 9 || type->kind == 10)
 {
 struct Type * member;
 
-for(member = type->members.first; member; member = member->next)
-DeclareType(member, 0x0, 0x0);
+for(member = type->__anon1.__anon1.members.first; member; member = member->next)
+DeclareType(member, 00);
 }
 else if(type->kind == 12)
-DeclareType(type->arrayType, declarePointers, 0x0);
+DeclareType(type->__anon1.__anon4.arrayType, declarePointers, 0);
 }
 }
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char *  name);
+extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
 
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
 {
@@ -3981,7 +4251,7 @@ if(curParam)
 {
 arg = &_class->templateArgs[id];
 if(arg && param->type == 0)
-(*arg).dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).dataTypeString);
+(*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
 }
 return arg;
 }
@@ -4006,7 +4276,7 @@ struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Clas
 {
 struct Context * context = PushContext();
 
-context->templateTypesOnly = 0x1;
+context->templateTypesOnly = 1;
 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
 {
 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
@@ -4041,7 +4311,7 @@ if(!param)
 p->param = param = __extension__ ({
 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
 
-__ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->dataTypeString, __ecereInstance1;
+__ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
 });
 }
 type = __extension__ ({
@@ -4065,7 +4335,7 @@ void FinishTemplatesContext(struct Context * context)
 {
 PopContext(context);
 FreeContext(context);
-((context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor(context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(context)) : 0), context = 0);
+((context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(context)) : 0), context = 0);
 }
 
 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
@@ -4074,15 +4344,15 @@ if(!method->dataType)
 {
 struct Context * context = SetupTemplatesContext(method->_class);
 
-method->dataType = ProcessTypeString(method->dataTypeString, 0x0);
+method->dataType = ProcessTypeString(method->dataTypeString, 0);
 FinishTemplatesContext(context);
 if(method->type != 1 && method->dataType)
 {
-if(!method->dataType->thisClass && !method->dataType->staticMethod)
+if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
 {
 if(!method->_class->symbol)
 method->_class->symbol = FindClass(method->_class->fullName);
-method->dataType->thisClass = method->_class->symbol;
+method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
 }
 }
 }
@@ -4094,7 +4364,7 @@ if(!prop->dataType)
 {
 struct Context * context = SetupTemplatesContext(prop->_class);
 
-prop->dataType = ProcessTypeString(prop->dataTypeString, 0x0);
+prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
 FinishTemplatesContext(context);
 }
 }
@@ -4119,17 +4389,16 @@ unsigned int isVirtual;
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
 
-void DeclareMethod(struct __ecereNameSpace__ecere__com__Method * method, char * name)
+void DeclareMethod(struct __ecereNameSpace__ecere__com__Method * method, const char * name)
 {
 struct Symbol * symbol = method->symbol;
 
-if(!symbol || (!symbol->pointerExternal && method->type == 1) || symbol->id > (curExternal ? curExternal->symbol->idCode : -1))
+if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && method->type == 1) || symbol->id > (curExternal ? curExternal->symbol->idCode : -1))
 {
-unsigned int imported = 0x0;
-unsigned int dllImport = 0x0;
+unsigned int dllImport = 0;
 
 if(!method->dataType)
-method->dataType = ProcessTypeString(method->dataTypeString, 0x0);
+method->dataType = ProcessTypeString(method->dataTypeString, 0);
 if(!symbol || symbol->_import || method->type == 1)
 {
 if(!symbol || method->type == 1)
@@ -4176,14 +4445,13 @@ symbol->type->refCount++;
 }
 if(!method->dataType->dllExport)
 {
-imported = 0x1;
-if(method->_class->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + structSize_Instance)))->importType != 1)
-dllImport = 0x1;
+if((method->_class->module != privateModule || !strcmp(method->_class->name, "float") || !strcmp(method->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + structSize_Instance)))->importType != 1)
+dllImport = 1;
 }
 }
 if(method->type != 1 && method->dataType)
-DeclareType(method->dataType, 0x1, 0x1);
-if(!symbol->pointerExternal || symbol->pointerExternal->type == 0)
+DeclareType(method->dataType, 1, 1);
+if(!symbol->__anon2.__anon1.pointerExternal || symbol->__anon2.__anon1.pointerExternal->type == 0)
 {
 struct Declaration * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
@@ -4228,25 +4496,25 @@ FreeSpecifier(spec);
 }
 }
 }
-if(method->dataType && !method->dataType->staticMethod)
+if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
 {
-if(funcDecl && funcDecl->function.parameters && (*funcDecl->function.parameters).count)
+if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->thisClass ? method->dataType->thisClass->registered : method->_class;
-struct TypeName * thisParam = MkTypeName(MkListOne(MkSpecifierName(method->dataType->thisClass ? method->dataType->thisClass->string : method->_class->fullName)), (_class && _class->type == 1000) ? MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("this"))) : MkDeclaratorIdentifier(MkIdentifier("this")));
-struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->function.parameters).first);
+struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
+struct TypeName * thisParam = MkTypeName(MkListOne(MkSpecifierName(method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->string : method->_class->fullName)), (_class && _class->type == 1000) ? MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("this"))) : MkDeclaratorIdentifier(MkIdentifier("this")));
+struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
 
-if(firstSpec && firstSpec->type == 0 && firstSpec->specifier == VOID && !firstParam->declarator)
+if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
 {
-struct TypeName * param = (*funcDecl->function.parameters).first;
+struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->function.parameters), param);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
 FreeTypeName(param);
 }
-if(!funcDecl->function.parameters)
-funcDecl->function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), thisParam);
+if(!funcDecl->__anon1.function.parameters)
+funcDecl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
 }
 }
@@ -4254,7 +4522,7 @@ ProcessDeclarator(d);
 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
 decl = MkDeclaration(specifiers, declarators);
 ReplaceThisClassSpecifiers(specifiers, method->_class);
-if(symbol->pointerExternal)
+if(symbol->__anon2.__anon1.pointerExternal)
 {
 struct Symbol * functionSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 
@@ -4265,17 +4533,17 @@ if(functionSymbol->type)
 functionSymbol->type->refCount++;
 }
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), functionSymbol);
-symbol->pointerExternal->symbol = functionSymbol;
+symbol->__anon2.__anon1.pointerExternal->symbol = functionSymbol;
 }
 external = MkExternalDeclaration(decl);
 if(curExternal)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal ? curExternal->prev : (((void *)0)), external);
 external->symbol = symbol;
-symbol->pointerExternal = external;
+symbol->__anon2.__anon1.pointerExternal = external;
 }
 else if(ast)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->pointerExternal, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
 }
 symbol->id = curExternal ? curExternal->symbol->idCode : (((int)0x7fffffff));
 }
@@ -4285,7 +4553,7 @@ char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
 {
 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
 {
-unsigned int first = 0x1;
+unsigned int first = 1;
 int p = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
 int lastParam = -1;
@@ -4305,7 +4573,7 @@ strcat(className, param->name);
 strcat(className, " = ");
 }
 strcat(className, param->name);
-first = 0x0;
+first = 0;
 lastParam = p;
 }
 p++;
@@ -4327,9 +4595,11 @@ return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
 
 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
 {
+struct Type * type;
+
 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
 {
-unsigned int first = 0x1;
+unsigned int first = 1;
 int p = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
 int lastParam = -1;
@@ -4349,7 +4619,7 @@ strcat(className, param->name);
 strcat(className, " = ");
 }
 strcat(className, param->name);
-first = 0x0;
+first = 0;
 lastParam = p;
 }
 p++;
@@ -4363,12 +4633,13 @@ className[len++] = ' ';
 className[len++] = '>';
 className[len++] = '\0';
 }
-return MkClassType(className);
+type = MkClassType(className);
 }
 else
 {
-return MkClassType(_class->fullName);
+type = MkClassType(_class->fullName);
 }
+return type;
 }
 
 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
@@ -4379,11 +4650,11 @@ struct Specifier * spec;
 
 for(spec = specs->first; spec; spec = spec->next)
 {
-if(spec->type == 0 && spec->specifier == THISCLASS)
+if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
 {
 spec->type = 1;
-spec->name = ReplaceThisClass(_class);
-spec->symbol = FindClass(spec->name);
+spec->__anon1.__anon1.name = ReplaceThisClass(_class);
+spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
 }
 }
 }
@@ -4395,11 +4666,11 @@ struct __ecereNameSpace__ecere__com__GlobalFunction
 {
 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
-char *  name;
+const char *  name;
 int (*  function)();
 struct __ecereNameSpace__ecere__com__Instance * module;
 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
-char *  dataTypeString;
+const char *  dataTypeString;
 struct Type * dataType;
 void *  symbol;
 } __attribute__ ((gcc_struct));
@@ -4421,14 +4692,14 @@ struct Symbol * symbol = function->symbol;
 
 if(curExternal && (!symbol || symbol->id > curExternal->symbol->idCode))
 {
-unsigned int imported = 0x0;
-unsigned int dllImport = 0x0;
+unsigned int imported = 0;
+unsigned int dllImport = 0;
 
 if(!function->dataType)
 {
-function->dataType = ProcessTypeString(function->dataTypeString, 0x0);
-if(!function->dataType->thisClass)
-function->dataType->staticMethod = 0x1;
+function->dataType = ProcessTypeString(function->dataTypeString, 0);
+if(!function->dataType->__anon1.__anon2.thisClass)
+function->dataType->__anon1.__anon2.staticMethod = 1;
 }
 if(inCompiler)
 {
@@ -4450,19 +4721,19 @@ __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symb
 }
 }
 {
-symbol->type = ProcessTypeString(function->dataTypeString, 0x0);
-if(!symbol->type->thisClass)
-symbol->type->staticMethod = 0x1;
+symbol->type = ProcessTypeString(function->dataTypeString, 0);
+if(!symbol->type->__anon1.__anon2.thisClass)
+symbol->type->__anon1.__anon2.staticMethod = 1;
 }
 }
-imported = symbol->_import ? 0x1 : 0x0;
+imported = symbol->_import ? 1 : 0;
 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1)
-dllImport = 0x1;
+dllImport = 1;
 }
-DeclareType(function->dataType, 0x1, 0x1);
+DeclareType(function->dataType, 1, 1);
 if(inCompiler)
 {
-if(!symbol->pointerExternal || symbol->pointerExternal->type == 0)
+if(!symbol->__anon2.__anon1.pointerExternal || symbol->__anon2.__anon1.pointerExternal->type == 0)
 {
 struct Declaration * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
@@ -4482,7 +4753,7 @@ if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module +
 struct Specifier * spec;
 
 for(spec = (*specifiers).first; spec; spec = spec->next)
-if(spec->type == 5 && spec->extDecl && spec->extDecl->type == 0 && !strcmp(spec->extDecl->s, "dllexport"))
+if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
 FreeSpecifier(spec);
@@ -4490,10 +4761,10 @@ break;
 }
 }
 funcDecl = GetFuncDecl(d);
-if(funcDecl && !funcDecl->function.parameters)
+if(funcDecl && !funcDecl->__anon1.function.parameters)
 {
-funcDecl->function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
+funcDecl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
 }
 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
 {
@@ -4503,7 +4774,7 @@ curContext = globalContext;
 decl = MkDeclaration(specifiers, declarators);
 curContext = oldCtx;
 }
-if(symbol->pointerExternal)
+if(symbol->__anon2.__anon1.pointerExternal)
 {
 struct Symbol * functionSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 
@@ -4514,23 +4785,23 @@ if(functionSymbol->type)
 functionSymbol->type->refCount++;
 }
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), functionSymbol);
-symbol->pointerExternal->symbol = functionSymbol;
+symbol->__anon2.__anon1.pointerExternal->symbol = functionSymbol;
 }
 external = MkExternalDeclaration(decl);
 if(curExternal)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
 external->symbol = symbol;
-symbol->pointerExternal = external;
+symbol->__anon2.__anon1.pointerExternal = external;
 }
 else
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->pointerExternal, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
 }
 if(curExternal)
 symbol->id = curExternal->symbol->idCode;
 }
 }
-return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1) ? 0x1 : 0x0;
+return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1) ? 1 : 0;
 }
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData;
@@ -4561,11 +4832,11 @@ if(!symbol)
 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 }
 if(!data->dataType)
-data->dataType = ProcessTypeString(data->dataTypeString, 0x0);
-DeclareType(data->dataType, 0x1, 0x1);
+data->dataType = ProcessTypeString(data->dataTypeString, 0);
+DeclareType(data->dataType, 1, 1);
 if(inCompiler)
 {
-if(!symbol->pointerExternal)
+if(!symbol->__anon2.__anon1.pointerExternal)
 {
 struct Declaration * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
@@ -4583,11 +4854,11 @@ external = MkExternalDeclaration(decl);
 if(curExternal)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
 external->symbol = symbol;
-symbol->pointerExternal = external;
+symbol->__anon2.__anon1.pointerExternal = external;
 }
 else
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->pointerExternal, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
 }
 if(curExternal)
 symbol->id = curExternal->symbol->idCode;
@@ -4605,101 +4876,133 @@ struct Type * resultType;
 
 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Conversion;
 
-extern void Compiler_Warning(char *  format, ...);
+extern void Compiler_Warning(const char *  format, ...);
+
+static unsigned int CheckConstCompatibility(struct Type * source, struct Type * dest, unsigned int warn)
+{
+unsigned int status = 1;
+
+if(((source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered) || source->kind == 12 || source->kind == 13) && ((dest->kind == 8 && dest->__anon1._class && dest->__anon1._class->__anon1.registered) || dest->kind == 13))
+{
+struct __ecereNameSpace__ecere__com__Class * sourceClass = source->kind == 8 ? source->__anon1._class->__anon1.registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * destClass = dest->kind == 8 ? dest->__anon1._class->__anon1.registered : (((void *)0));
+
+if((!sourceClass || (sourceClass && sourceClass->type == 0 && !sourceClass->structSize)) && (!destClass || (destClass && destClass->type == 0 && !destClass->structSize)))
+{
+struct Type * sourceType = source, * destType = dest;
+
+while((sourceType->kind == 13 || sourceType->kind == 12) && sourceType->__anon1.type)
+sourceType = sourceType->__anon1.type;
+while((destType->kind == 13 || destType->kind == 12) && destType->__anon1.type)
+destType = destType->__anon1.type;
+if(!destType->constant && sourceType->constant)
+{
+status = 0;
+if(warn)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "discarding const qualifier\n", (((void *)0))));
+}
+}
+}
+return status;
+}
+
+extern void CopyTypeInto(struct Type * type, struct Type * src);
 
 void PrintType(struct Type * type, char *  string, unsigned int printName, unsigned int fullName);
 
-unsigned int MatchTypes(struct Type * source, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, struct __ecereNameSpace__ecere__com__Class * owningClassSource, struct __ecereNameSpace__ecere__com__Class * owningClassDest, unsigned int doConversion, unsigned int enumBaseType, unsigned int acceptReversedParams, unsigned int isConversionExploration)
+unsigned int MatchTypes(struct Type * source, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, struct __ecereNameSpace__ecere__com__Class * owningClassSource, struct __ecereNameSpace__ecere__com__Class * owningClassDest, unsigned int doConversion, unsigned int enumBaseType, unsigned int acceptReversedParams, unsigned int isConversionExploration, unsigned int warnConst)
 {
 if(source && dest)
 {
+if(warnConst)
+CheckConstCompatibility(source, dest, 1);
 if(source->kind == 20 && dest->kind != 20)
 {
-struct Type * type = ProcessTemplateParameterType(source->templateParameter);
+struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
 
 if(type)
 source = type;
 }
 if(dest->kind == 20 && source->kind != 20)
 {
-struct Type * type = ProcessTemplateParameterType(dest->templateParameter);
+struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
 
 if(type)
 dest = type;
 }
-if(dest->classObjectType == 2)
+if(dest->classObjectType == 2 && dest->kind != 11)
 {
 if(source->classObjectType != 3)
-return 0x1;
+return 1;
 else
 {
-if((dest->_class && strcmp(dest->_class->string, "class")) || (source->_class && strcmp(source->_class->string, "class")))
+if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
 {
-return 0x1;
+return 1;
 }
 }
 }
 else
 {
-if(source->classObjectType == 3)
-return 0x1;
-if(dest->classObjectType == 3 && source->classObjectType != 2)
-return 0x1;
+if(source->kind != 11 && source->classObjectType == 3)
+return 1;
+if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
+return 1;
 }
 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
 {
-if((dest->enumName && source->enumName && !strcmp(dest->enumName, source->enumName)) || (source->members.first && source->members.first == dest->members.first))
-return 0x1;
+if((dest->__anon1.__anon1.enumName && source->__anon1.__anon1.enumName && !strcmp(dest->__anon1.__anon1.enumName, source->__anon1.__anon1.enumName)) || (source->__anon1.__anon1.members.first && source->__anon1.__anon1.members.first == dest->__anon1.__anon1.members.first))
+return 1;
 }
 if(dest->kind == 14 && source->kind != 0)
-return 0x1;
-if(dest->kind == 13 && dest->type->kind == 0 && ((source->kind == 8 && (!source->_class || !source->_class->registered || source->_class->registered->type == 1 || source->_class->registered->type == 0 || source->_class->registered->type == 5 || source->_class->registered->type == 1000)) || source->kind == 19 || source->kind == 13 || source->kind == 12 || source->kind == 11 || source->kind == 21))
-return 0x1;
-if(!isConversionExploration && source->kind == 13 && source->type->kind == 0 && ((dest->kind == 8 && (!dest->_class || !dest->_class->registered || dest->_class->registered->type == 1 || dest->_class->registered->type == 0 || dest->_class->registered->type == 5 || dest->_class->registered->type == 1000)) || dest->kind == 19 || dest->kind == 13 || dest->kind == 12 || dest->kind == 11 || dest->kind == 21))
-return 0x1;
-if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->_class)
+return 1;
+if(dest->kind == 13 && dest->__anon1.type->kind == 0 && ((source->kind == 8 && (!source->__anon1._class || !source->__anon1._class->__anon1.registered || source->__anon1._class->__anon1.registered->type == 1 || source->__anon1._class->__anon1.registered->type == 0 || source->__anon1._class->__anon1.registered->type == 5 || source->__anon1._class->__anon1.registered->type == 1000)) || source->kind == 19 || source->kind == 13 || source->kind == 12 || source->kind == 11 || source->kind == 21))
+return 1;
+if(!isConversionExploration && source->kind == 13 && source->__anon1.type->kind == 0 && ((dest->kind == 8 && (!dest->__anon1._class || !dest->__anon1._class->__anon1.registered || dest->__anon1._class->__anon1.registered->type == 1 || dest->__anon1._class->__anon1.registered->type == 0 || dest->__anon1._class->__anon1.registered->type == 5 || dest->__anon1._class->__anon1.registered->type == 1000)) || dest->kind == 19 || dest->kind == 13 || dest->kind == 12 || dest->kind == 11 || dest->kind == 21))
+return 1;
+if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
 {
-if(source->_class->registered && source->_class->registered->type == 3)
+if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
 {
 if(conversions != (((void *)0)))
 {
-if(source->_class->registered == dest->_class->registered)
-return 0x1;
+if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
+return 1;
 }
 else
 {
 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
 
-for(sourceBase = source->_class->registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
+for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
 ;
-for(destBase = dest->_class->registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
+for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
 ;
 if(sourceBase == destBase)
-return 0x1;
+return 1;
 }
 }
-else if(source->_class && dest->_class && (dest->classObjectType == source->classObjectType || !dest->classObjectType) && (enumBaseType || (!source->_class->registered || source->_class->registered->type != 4) || (!dest->_class->registered || dest->_class->registered->type != 4)) && __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, dest->_class->registered))
-return 0x1;
+else if(source->__anon1._class && dest->__anon1._class && (dest->classObjectType == source->classObjectType || !dest->classObjectType) && (enumBaseType || (!source->__anon1._class->__anon1.registered || source->__anon1._class->__anon1.registered->type != 4) || (!dest->__anon1._class->__anon1.registered || dest->__anon1._class->__anon1.registered->type != 4)) && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, dest->__anon1._class->__anon1.registered))
+return 1;
 else
 {
-if(enumBaseType && dest->_class && dest->_class->registered && dest->_class->registered->type == 4 && ((source->_class && source->_class->registered && source->_class->registered->type != 4) || source->kind == 8))
+if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4 && ((source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type != 4) || source->kind == 8))
 {
-if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->_class->registered, source->_class->registered))
+if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
 {
-return 0x1;
+return 1;
 }
 }
 }
 }
-if(source->kind == 19 && dest->kind == 8 && dest->_class && !strcmp(dest->_class->string, "ecere::com::Class"))
-return 0x1;
+if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
+return 1;
 if(doConversion)
 {
 if(source->kind == 8)
 {
 struct __ecereNameSpace__ecere__com__Class * _class;
 
-for(_class = source->_class ? source->_class->registered : (((void *)0)); _class; _class = _class->base)
+for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
 {
 struct __ecereNameSpace__ecere__com__Property * convert;
 
@@ -4710,21 +5013,21 @@ if(convert->memberAccess == 1 || _class->module == privateModule)
 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
 
 if(!convert->dataType)
-convert->dataType = ProcessTypeString(convert->dataTypeString, 0x0);
-if(MatchTypes(convert->dataType, dest, conversions, (((void *)0)), (((void *)0)), 0x0, 0x1, 0x0, 0x1))
+convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
+if((!isConversionExploration || convert->dataType->kind == 8 || !strcmp(_class->name, "String")) && MatchTypes(convert->dataType, dest, conversions, (((void *)0)), (((void *)0)), (convert->dataType->kind == 8 && !strcmp(convert->dataTypeString, "String")) ? 1 : 0, convert->dataType->kind == 8, 0, 1, warnConst))
 {
 if(!conversions && !convert->Get)
-return 0x1;
+return 1;
 else if(conversions != (((void *)0)))
 {
-if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->_class && convert->dataType->_class->registered && _class->base == convert->dataType->_class->registered->base && (dest->kind != 8 || dest->_class->registered != _class->base))
-return 0x1;
+if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->__anon1._class && convert->dataType->__anon1._class->__anon1.registered && _class->base == convert->dataType->__anon1._class->__anon1.registered->base && (dest->kind != 8 || dest->__anon1._class->__anon1.registered != _class->base))
+return 1;
 else
 {
-struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 0x1, conv);
+struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
 
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
-return 0x1;
+return 1;
 }
 }
 }
@@ -4736,7 +5039,7 @@ if(dest->kind == 8)
 {
 struct __ecereNameSpace__ecere__com__Class * _class;
 
-for(_class = dest->_class ? dest->_class->registered : (((void *)0)); _class; _class = _class->base)
+for(_class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
 {
 struct __ecereNameSpace__ecere__com__Property * convert;
 
@@ -4744,37 +5047,56 @@ for(convert = _class->conversions.first; convert; convert = convert->next)
 {
 if(convert->memberAccess == 1 || _class->module == privateModule)
 {
+struct Type * constType = (((void *)0));
+unsigned int success = 0;
+
 if(!convert->dataType)
-convert->dataType = ProcessTypeString(convert->dataTypeString, 0x0);
-if(convert->dataType != dest && MatchTypes(source, convert->dataType, conversions, (((void *)0)), (((void *)0)), 0x1, 0x0, 0x0, 0x1))
+convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
+if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
+{
+struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+constType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
+});
+CopyTypeInto(ptrType, convert->dataType->__anon1.type);
+ptrType->constant = 1;
+}
+if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
 {
 if(!conversions && !convert->Set)
-return 0x1;
+success = 1;
 else if(conversions != (((void *)0)))
 {
-if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->_class && convert->dataType->_class->registered && _class->base == convert->dataType->_class->registered->base && (source->kind != 8 || source->_class->registered != _class->base))
-return 0x1;
+if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->__anon1._class && convert->dataType->__anon1._class->__anon1.registered && _class->base == convert->dataType->__anon1._class->__anon1.registered->base && (source->kind != 8 || source->__anon1._class->__anon1.registered != _class->base))
+success = 1;
 else
 {
 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
 
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
-return 0x1;
+success = 1;
 }
 }
 }
+if(constType)
+FreeType(constType);
+if(success)
+return 1;
 }
 }
 }
-if(enumBaseType && dest->_class && dest->_class->registered && dest->_class->registered->type == 4)
+if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
 {
-if(!dest->_class->registered->dataType)
-dest->_class->registered->dataType = ProcessTypeString(dest->_class->registered->dataTypeString, 0x0);
-if(dest->_class->registered->dataType->kind == 8 || source->truth || dest->truth)
+if(!dest->__anon1._class->__anon1.registered->dataType)
+dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
+if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
 {
-if(MatchTypes(source, dest->_class->registered->dataType, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
+if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, dest->__anon1._class->__anon1.registered->dataType->kind == 8, 0, 0, warnConst))
 {
-return 0x1;
+return 1;
 }
 }
 }
@@ -4783,7 +5105,7 @@ if(source->kind == 8)
 {
 struct __ecereNameSpace__ecere__com__Class * _class;
 
-for(_class = source->_class ? source->_class->registered : (((void *)0)); _class; _class = _class->base)
+for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
 {
 struct __ecereNameSpace__ecere__com__Property * convert;
 
@@ -4794,34 +5116,37 @@ if(convert->memberAccess == 1 || _class->module == privateModule)
 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
 
 if(!convert->dataType)
-convert->dataType = ProcessTypeString(convert->dataTypeString, 0x0);
-if(convert->dataType != source && MatchTypes(convert->dataType, dest, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x1))
+convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
+if(convert->dataType != source && (!isConversionExploration || convert->dataType->kind == 8 || !strcmp(_class->name, "String")) && MatchTypes(convert->dataType, dest, conversions, (((void *)0)), (((void *)0)), convert->dataType->kind == 8, convert->dataType->kind == 8, 0, 1, warnConst))
 {
 if(!conversions && !convert->Get)
-return 0x1;
+return 1;
 else if(conversions != (((void *)0)))
 {
-if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->_class && convert->dataType->_class->registered && _class->base == convert->dataType->_class->registered->base && (dest->kind != 8 || dest->_class->registered != _class->base))
-return 0x1;
+if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->__anon1._class && convert->dataType->__anon1._class->__anon1.registered && _class->base == convert->dataType->__anon1._class->__anon1.registered->base && (dest->kind != 8 || dest->__anon1._class->__anon1.registered != _class->base))
+return 1;
 else
 {
-struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 0x1, conv);
+struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
 
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
-return 0x1;
+return 1;
 }
 }
 }
 }
 }
 }
-if(enumBaseType && source->_class && source->_class->registered && source->_class->registered->type == 4)
+if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
 {
-if(!source->_class->registered->dataType)
-source->_class->registered->dataType = ProcessTypeString(source->_class->registered->dataTypeString, 0x0);
-if(MatchTypes(source->_class->registered->dataType, dest, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
+if(!source->__anon1._class->__anon1.registered->dataType)
+source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
+if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
 {
-return 0x1;
+if(MatchTypes(source->__anon1._class->__anon1.registered->dataType, dest, conversions, (((void *)0)), (((void *)0)), source->__anon1._class->__anon1.registered->dataType->kind == 8, source->__anon1._class->__anon1.registered->dataType->kind == 8, 0, 0, warnConst))
+return 1;
+else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
+return 1;
 }
 }
 }
@@ -4829,120 +5154,122 @@ return 0x1;
 if(source->kind == 8 || source->kind == 19)
 ;
 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
-return 0x1;
+return 1;
 else if(dest->kind == 7 && source->kind == 6)
-return 0x1;
-else if(dest->kind == 2 && source->kind == 1)
-return 0x1;
-else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 23))
-return 0x1;
-else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 22 || source->kind == 23))
-return 0x1;
-else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 23 || source->kind == 4))
-return 0x1;
-else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 3 || source->kind == 4 || source->kind == 22))
-return 0x1;
-else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || dest->kind == 5 || dest->kind == 4 || dest->kind == 22 || dest->kind == 23))
-return 0x1;
-else if(dest->kind == 15 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 5 || source->kind == 4 || source->kind == 22 || source->kind == 23))
-return 0x1;
-else if((dest->kind == 11 || (dest->kind == 13 && dest->type->kind == 11) || dest->kind == 16) && ((source->kind == 11 || (source->kind == 13 && source->type->kind == 11) || source->kind == 16)))
+return 1;
+else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
+return 1;
+else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
+return 1;
+else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
+return 1;
+else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
+return 1;
+else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
+return 1;
+else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || source->kind == 24 || dest->kind == 5 || dest->kind == 4 || dest->kind == 22 || dest->kind == 23))
+return 1;
+else if(dest->kind == 15 && !isConversionExploration && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 5 || source->kind == 4 || source->kind == 22 || source->kind == 23))
+return 1;
+else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && ((source->kind == 11 || (source->kind == 13 && source->__anon1.type->kind == 11) || source->kind == 16)))
 {
 struct Type * paramSource, * paramDest;
 
 if(dest->kind == 16)
-owningClassDest = dest->methodClass ? dest->methodClass : dest->method->_class;
+owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
 if(source->kind == 16)
-owningClassSource = source->methodClass ? source->methodClass : source->method->_class;
-if(dest->kind == 13 && dest->type->kind == 11)
-dest = dest->type;
-if(source->kind == 13 && source->type->kind == 11)
-source = source->type;
+owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
+if(dest->kind == 13 && dest->__anon1.type->kind == 11)
+dest = dest->__anon1.type;
+if(source->kind == 13 && source->__anon1.type->kind == 11)
+source = source->__anon1.type;
 if(dest->kind == 16)
-dest = dest->method->dataType;
+dest = dest->__anon1.__anon3.method->dataType;
 if(source->kind == 16)
-source = source->method->dataType;
-paramSource = source->params.first;
+source = source->__anon1.__anon3.method->dataType;
+paramSource = source->__anon1.__anon2.params.first;
 if(paramSource && paramSource->kind == 0)
 paramSource = (((void *)0));
-paramDest = dest->params.first;
+paramDest = dest->__anon1.__anon2.params.first;
 if(paramDest && paramDest->kind == 0)
 paramDest = (((void *)0));
-if((dest->staticMethod || (!dest->thisClass && !owningClassDest)) && !(source->staticMethod || (!source->thisClass && !owningClassSource)))
+if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
 {
-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 == 13 && paramDest->__anon1.type && paramDest->__anon1.type->kind == 0) && (paramDest->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, paramDest->__anon1._class->__anon1.registered))))
 {
 if(paramDest && paramDest->kind == 8)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class must be derived from %s\n", (((void *)0))), paramDest->_class->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class should not take an object\n", (((void *)0))));
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
+return 0;
 }
 paramDest = paramDest->next;
 }
-else if(!dest->staticMethod && (dest->thisClass || owningClassDest))
+else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
 {
-if((source->staticMethod || (!source->thisClass && !owningClassSource)))
+if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
 {
-if(dest->thisClass)
+if(dest->__anon1.__anon2.thisClass)
 {
-if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->_class->registered, dest->thisClass->registered))
+if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class must be derived from %s\n", (((void *)0))), dest->thisClass->string);
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
+return 0;
 }
 }
 else
 {
-if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->_class->registered, owningClassDest)))
+if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
 {
 if(owningClassDest)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "overriding class expected to be derived from method class\n", (((void *)0))));
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
+return 0;
 }
 }
 paramSource = paramSource->next;
 }
 else
 {
-if(dest->thisClass)
+if(dest->__anon1.__anon2.thisClass)
 {
-if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->thisClass ? source->thisClass->registered : owningClassSource, dest->thisClass->registered))
+if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "method class must be derived from %s\n", (((void *)0))), dest->thisClass->string);
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
+return 0;
 }
 }
 else
 {
-if(source->thisClass && source->thisClass->registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->thisClass->registered, owningClassDest))
+if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "%s expected to be derived from method class\n", (((void *)0))), source->thisClass->registered->fullName);
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
+return 0;
 }
 }
 }
 }
-if(!MatchTypes(source->returnType, dest->returnType, (((void *)0)), (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
+if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
 {
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible return type for function\n", (((void *)0))));
-return 0x0;
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
+return 0;
 }
+else
+CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
 for(; paramDest; paramDest = paramDest->next)
 {
 if(!paramSource)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "not enough parameters\n", (((void *)0))));
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
+return 0;
 }
 {
 struct Type * paramDestType = paramDest;
 struct Type * paramSourceType = paramSource;
 struct Type * type = paramDestType;
 
-if(paramDest->kind == 20 && paramDest->templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
+if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
 {
 int id = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
@@ -4955,7 +5282,7 @@ if(sClass->templateClass)
 sClass = sClass->templateClass;
 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
 {
-if(curParam->type == 0 && !strcmp(type->templateParameter->identifier->string, curParam->name))
+if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
 {
 for(sClass = sClass->base; sClass; sClass = sClass->base)
 {
@@ -4974,19 +5301,19 @@ if(curParam)
 {
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
 
-paramDestType = type = ProcessTypeString(arg.dataTypeString, 0x0);
+paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
 }
 }
-if(!MatchTypes(paramDestType, paramSourceType, (((void *)0)), (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0) && (!acceptReversedParams || !MatchTypes(paramSourceType, paramDestType, (((void *)0)), (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0)))
+if(!MatchTypes(paramDestType, paramSourceType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst) && (!acceptReversedParams || !MatchTypes(paramSourceType, paramDestType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst)))
 {
 char type[1024];
 
 type[0] = (char)0;
-PrintType(paramDest, type, 0x0, 0x1);
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
+PrintType(paramDest, type, 01);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
 if(paramDestType != paramDest)
 FreeType(paramDestType);
-return 0x0;
+return 0;
 }
 if(paramDestType != paramDest)
 FreeType(paramDestType);
@@ -4995,22 +5322,22 @@ paramSource = paramSource->next;
 }
 if(paramSource)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "too many parameters\n", (((void *)0))));
-return 0x0;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
+return 0;
 }
-return 0x1;
+return 1;
 }
-else if((dest->kind == 11 || (dest->kind == 13 && dest->type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->type->kind == 0))
+else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
 {
-return 0x1;
+return 1;
 }
 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
 {
-if(MatchTypes(source->type, dest->type, (((void *)0)), (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
-return 0x1;
+if(MatchTypes(source->__anon1.type, dest->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
+return 1;
 }
 }
-return 0x0;
+return 0;
 }
 
 static void FreeConvert(struct Conversion * convert)
@@ -5023,7 +5350,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 
 struct __ecereNameSpace__ecere__com__BTNamedLink
 {
-char *  name;
+const char *  name;
 struct __ecereNameSpace__ecere__com__BTNamedLink * parent;
 struct __ecereNameSpace__ecere__com__BTNamedLink * left;
 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
@@ -5036,17 +5363,17 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 struct __ecereNameSpace__ecere__com__EnumClassData
 {
 struct __ecereNameSpace__ecere__sys__OldList values;
-int largest;
+long long largest;
 } __attribute__ ((gcc_struct));
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
 
-struct __ecereNameSpace__ecere__sys__NamedLink
+struct __ecereNameSpace__ecere__sys__NamedLink64
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * prev;
-struct __ecereNameSpace__ecere__sys__NamedLink * next;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * prev;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * next;
 char *  name;
-void *  data;
+long long data;
 } __attribute__ ((gcc_struct));
 
 extern void FreeExpContents(struct Expression * exp);
@@ -5071,7 +5398,7 @@ struct __ecereNameSpace__ecere__com__Class * _class = link->data;
 
 if(_class->type == 4)
 {
-struct __ecereNameSpace__ecere__sys__OldList converts = 
+struct __ecereNameSpace__ecere__sys__OldList converts =
 {
 0, 0, 0, 0, 0
 };
@@ -5080,10 +5407,10 @@ struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Ty
 type->kind = 8;
 if(!_class->symbol)
 _class->symbol = FindClass(_class->fullName);
-type->_class = _class->symbol;
-if(MatchTypes(type, dest, &converts, (((void *)0)), (((void *)0)), 0x1, 0x0, 0x0, 0x0))
+type->__anon1._class = _class->symbol;
+if(MatchTypes(type, dest, &converts, (((void *)0)), (((void *)0)), 1, 0, 0, 0, 0))
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * value;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
 
 if(enumClass)
@@ -5103,17 +5430,17 @@ if(value)
 {
 FreeExpContents(sourceExp);
 FreeType(sourceExp->expType);
-sourceExp->isConstant = 0x1;
+sourceExp->isConstant = 1;
 sourceExp->expType = MkClassType(baseClass->fullName);
 {
 char constant[256];
 
 sourceExp->type = 2;
-if(!strcmp(baseClass->dataTypeString, "int"))
-sprintf(constant, "%d", (int)value->data);
+if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
+sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
 else
-sprintf(constant, "0x%X", (int)value->data);
-sourceExp->constant = __ecereNameSpace__ecere__sys__CopyString(constant);
+sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
+sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
 }
 while(converts.first)
 {
@@ -5122,21 +5449,21 @@ struct Conversion * convert = converts.first;
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
 }
-((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor(type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
-return 0x1;
+((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+return 1;
 }
 }
 }
 }
 if(converts.first)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, FreeConvert);
-((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor(type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
 }
 }
 for(nameSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->nameSpaces); nameSpace != (((void *)0)); nameSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)nameSpace)))
 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
-return 0x1;
-return 0x0;
+return 1;
+return 0;
 }
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SubModule;
@@ -5154,16 +5481,16 @@ unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * se
 struct __ecereNameSpace__ecere__com__SubModule * subModule;
 
 if(searchFor == searchIn)
-return 0x1;
+return 1;
 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 + structSize_Instance)))->application)
 {
 if(ModuleVisibility(subModule->module, searchFor))
-return 0x1;
+return 1;
 }
 }
-return 0x0;
+return 0;
 }
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
@@ -5171,7 +5498,7 @@ extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpac
 struct __ecereNameSpace__ecere__com__Application
 {
 int argc;
-char * *  argv;
+const char * *  argv;
 int exitCode;
 unsigned int isGUIApp;
 struct __ecereNameSpace__ecere__sys__OldList allModules;
@@ -5184,85 +5511,115 @@ unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance
 struct __ecereNameSpace__ecere__com__Instance * module;
 
 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Module)))->systemNameSpace, sourceExp, dest, string, conversions))
-return 0x1;
+return 1;
 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;
+return 1;
 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;
+return 1;
 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 + structSize_Instance)))->publicNameSpace, sourceExp, dest, string, conversions))
-return 0x1;
+return 1;
 }
-return 0x0;
+return 0;
 }
 
+extern struct Expression * CopyExpression(struct Expression * exp);
+
 extern unsigned long strtoul(const char *  nptr, char * *  endptr, int base);
 
 void ReadString(char *  output, char *  string);
 
 extern struct Specifier * MkEnum(struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * list);
 
-extern struct TypeName * QMkClass(char *  spec, struct Declarator * decl);
+extern struct TypeName * QMkClass(const char *  spec, struct Declarator * decl);
 
 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
 
-unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla)
+unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
 {
-struct Type * source = sourceExp->expType;
+struct Type * source;
 struct Type * realDest = dest;
 struct Type * backupSourceExpType = (((void *)0));
+struct Expression * computedExp = sourceExp;
 
-if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->constant, (((void *)0)), 0))
-return 0x1;
+dest->refCount++;
+if(sourceExp->isConstant && sourceExp->type != 2 && sourceExp->type != 0 && sourceExp->type != 11 && dest->kind == 8 && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
+{
+computedExp = CopyExpression(sourceExp);
+ComputeExpression(computedExp);
+}
+source = sourceExp->expType;
+if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
+{
+if(computedExp != sourceExp)
+{
+FreeExpression(computedExp);
+computedExp = sourceExp;
+}
+FreeType(dest);
+return 1;
+}
 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
 {
-if(source->_class && source->_class->registered && source->_class->registered->type == 3)
+if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
 {
 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
 
-for(sourceBase = source->_class->registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
+for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
 ;
-for(destBase = dest->_class->registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
+for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
 ;
 if(sourceBase == destBase)
-return 0x1;
+{
+if(computedExp != sourceExp)
+{
+FreeExpression(computedExp);
+computedExp = sourceExp;
+}
+FreeType(dest);
+return 1;
+}
 }
 }
 if(source)
 {
 struct __ecereNameSpace__ecere__sys__OldList * specs;
-unsigned int flag = 0x0;
+unsigned int flag = 0;
 long long value = (((int)0x7fffffff));
 
 source->refCount++;
-dest->refCount++;
-if(sourceExp->type == 2)
+if(computedExp->type == 2)
 {
 if(source->isSigned)
-value = strtoll(sourceExp->constant, (((void *)0)), 0);
+value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
 else
-value = strtoull(sourceExp->constant, (((void *)0)), 0);
+value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
 }
-else if(sourceExp->type == 4 && sourceExp->op.op == '-' && !sourceExp->op.exp1 && sourceExp->op.exp2 && sourceExp->op.exp2->type == 2)
+else if(computedExp->type == 4 && sourceExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
 {
 if(source->isSigned)
-value = -strtoll(sourceExp->op.exp2->constant, (((void *)0)), 0);
+value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
 else
-value = -strtoull(sourceExp->op.exp2->constant, (((void *)0)), 0);
+value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
+}
+if(computedExp != sourceExp)
+{
+FreeExpression(computedExp);
+computedExp = sourceExp;
 }
-if(dest->kind != 8 && source->kind == 8 && source->_class && source->_class->registered && !strcmp(source->_class->registered->fullName, "ecere::com::unichar"))
+if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "ecere::com::unichar"))
 {
 FreeType(source);
 source = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0x0, __ecereInstance1->refCount = 1, __ecereInstance1;
+__ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
 });
 }
 if(dest->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = dest->_class ? dest->_class->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
 
 if(_class && _class->type == 3)
 {
@@ -5278,74 +5635,74 @@ tempDest = tempType;
 tempType->kind = 8;
 if(!_class->symbol)
 _class->symbol = FindClass(_class->fullName);
-tempType->_class = _class->symbol;
+tempType->__anon1._class = _class->symbol;
 tempType->truth = dest->truth;
-if(tempType->_class)
-MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0);
+if(tempType->__anon1._class)
+MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
 backupSourceExpType = sourceExp->expType;
 sourceExp->expType = dest;
 dest->refCount++;
-flag = 0x1;
-((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor(tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
+flag = 1;
+((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
 }
 }
 if(_class && _class->type == 2 && source->kind != 8)
 {
-if(!dest->_class->registered->dataType)
-dest->_class->registered->dataType = ProcessTypeString(dest->_class->registered->dataTypeString, 0x0);
-if(MatchTypes(source, dest->_class->registered->dataType, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
+if(!dest->__anon1._class->__anon1.registered->dataType)
+dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
+if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
 {
 FreeType(source);
 FreeType(sourceExp->expType);
-source = sourceExp->expType = MkClassType(dest->_class->string);
+source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
 source->refCount++;
 }
 }
-if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->type && source->type->kind == 1 && sourceExp->type == 3)
+if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
 {
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 struct Declarator * decl;
 char string[1024];
 
-ReadString(string, sourceExp->string);
+ReadString(string, sourceExp->__anon1.__anon2.string);
 decl = SpecDeclFromString(string, specs, (((void *)0)));
 FreeExpContents(sourceExp);
 FreeType(sourceExp->expType);
-sourceExp->type = 26;
-sourceExp->_classExp.specifiers = specs;
-sourceExp->_classExp.decl = decl;
+sourceExp->type = 24;
+sourceExp->__anon1._classExp.specifiers = specs;
+sourceExp->__anon1._classExp.decl = decl;
 sourceExp->expType = dest;
 dest->refCount++;
 FreeType(source);
 FreeType(dest);
 if(backupSourceExpType)
 FreeType(backupSourceExpType);
-return 0x1;
+return 1;
 }
 }
 else if(source->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = source->_class ? source->_class->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
 
-if(_class && (_class->type == 3 || !strcmp(_class->fullName, "bool") || _class->type == 2))
+if(_class && (_class->type == 3 || _class->type == 2))
 {
 if(dest->kind != 8)
 {
 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 struct Type * tempDest, * tempSource;
 
-if(!source->_class->registered->dataType)
-source->_class->registered->dataType = ProcessTypeString(source->_class->registered->dataTypeString, 0x0);
+if(!source->__anon1._class->__anon1.registered->dataType)
+source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
 for(; _class->base->type != 1000; _class = _class->base)
 ;
 tempDest = source;
 tempSource = tempType;
 tempType->kind = 8;
-tempType->_class = FindClass(_class->fullName);
+tempType->__anon1._class = FindClass(_class->fullName);
 tempType->truth = source->truth;
 tempType->classObjectType = source->classObjectType;
-if(tempType->_class)
-MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0);
+if(tempType->__anon1._class)
+MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
 if(conversions->last)
 {
 ((struct Conversion *)conversions->last)->resultType = dest;
@@ -5363,32 +5720,41 @@ if(sourceExp->expType)
 sourceExp->expType->refCount++;
 }
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 FreeType(dest);
-dest = MkClassType(source->_class->string);
+dest = MkClassType(source->__anon1._class->string);
 dest->truth = source->truth;
 dest->classObjectType = source->classObjectType;
 FreeType(source);
 source = _class->dataType;
 source->refCount++;
-((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor(tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
+((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
 }
 }
 }
 if(!flag)
 {
-if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0))
+if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
 {
 FreeType(source);
 FreeType(dest);
-return 0x1;
+return 1;
 }
 }
 if(dest->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = dest->_class ? dest->_class->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
+unsigned int fittingValue = 0;
+
+if(_class && _class->type == 4)
+{
+struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
+struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
 
-if(_class && !dest->truth && (_class->type == 3 || !strcmp(_class->fullName, "bool") || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
+if(c && value >= 0 && value <= c->largest)
+fittingValue = 1;
+}
+if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
 {
 if(_class->type == 0 || _class->type == 5)
 {
@@ -5400,8 +5766,8 @@ sourceExp->destType->refCount++;
 if(sourceExp->expType)
 sourceExp->expType->refCount++;
 sourceExp->type = 11;
-sourceExp->cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
-sourceExp->cast.exp = newExp;
+sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
+sourceExp->__anon1.cast.exp = newExp;
 FreeType(sourceExp->expType);
 sourceExp->expType = (((void *)0));
 ProcessExpressionType(sourceExp);
@@ -5415,44 +5781,44 @@ if(inCompiler)
 FreeType(dest);
 if(backupSourceExpType)
 FreeType(backupSourceExpType);
-return 0x1;
+return 1;
 }
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 FreeType(dest);
 dest = _class->dataType;
 dest->refCount++;
 }
-if(dest->kind == 7 && (source->kind == 7 || source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1))
+if(dest->kind == 7 && (source->kind == 7 || source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24))
 {
 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))
+else if(dest->kind == 6 && (source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 7))
 {
 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))
+else if(dest->kind == 4 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
 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))
+else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
 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))
+else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
 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))
+else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
 {
 specs = MkList();
 if(!dest->isSigned)
@@ -5469,48 +5835,53 @@ if(sourceExp->expType)
 FreeType(sourceExp->expType);
 sourceExp->expType = backupSourceExpType;
 }
-return 0x0;
+return 0;
 }
 }
-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))
+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 == 24 || source->kind == 1))
 {
 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))
+else if(dest->kind == 6 && (source->kind == 6 || source->kind == 15 || source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
 {
 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)))
+else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
+{
+specs = MkList();
+ListAdd(specs, MkSpecifier(BOOL));
+}
+else if(dest->kind == 1 && (source->kind == 24 || 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(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)))))
+else if(dest->kind == 2 && (source->kind == 15 || source->kind == 24 || 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(UNSIGNED));
 ListAdd(specs, MkSpecifier(SHORT));
 }
-else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 1 || source->kind == 3))
+else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
 {
 specs = MkList();
 if(!dest->isSigned)
 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))
+else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
 {
 specs = MkList();
 if(!dest->isSigned)
 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))
+else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
 {
-specs = MkListOne(MkEnum(MkIdentifier(dest->enumName), (((void *)0))));
+specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
 }
 else
 {
@@ -5522,9 +5893,9 @@ if(sourceExp->expType)
 FreeType(sourceExp->expType);
 sourceExp->expType = backupSourceExpType;
 }
-return 0x0;
+return 0;
 }
-if(!flag)
+if(!flag && !sourceExp->opDestType)
 {
 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
 
@@ -5538,17 +5909,17 @@ sourceExp->expType->refCount++;
 sourceExp->type = 11;
 if(realDest->kind == 8)
 {
-sourceExp->cast.typeName = QMkClass(realDest->_class->string, (((void *)0)));
+sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
 FreeList(specs, FreeSpecifier);
 }
 else
-sourceExp->cast.typeName = MkTypeName(specs, (((void *)0)));
+sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
 if(newExp->type == 4)
 {
-sourceExp->cast.exp = MkExpBrackets(MkListOne(newExp));
+sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
 }
 else
-sourceExp->cast.exp = newExp;
+sourceExp->__anon1.cast.exp = newExp;
 FreeType(sourceExp->expType);
 sourceExp->expType = (((void *)0));
 ProcessExpressionType(sourceExp);
@@ -5559,28 +5930,33 @@ FreeType(dest);
 FreeType(source);
 if(backupSourceExpType)
 FreeType(backupSourceExpType);
-return 0x1;
+return 1;
 }
 else
 {
-while((sourceExp->type == 5 || sourceExp->type == 34) && sourceExp->list)
-sourceExp = (*sourceExp->list).last;
+if(computedExp != sourceExp)
+{
+FreeExpression(computedExp);
+computedExp = sourceExp;
+}
+while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
+sourceExp = (*sourceExp->__anon1.list).last;
 if(sourceExp->type == 0)
 {
-struct Identifier * id = sourceExp->identifier;
+struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
 
 if(dest->kind == 8)
 {
-if(dest->_class && dest->_class->registered && dest->_class->registered->type == 4)
+if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = dest->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
 
 if(enumClass)
 {
 for(; _class && _class->type == 4; _class = _class->base)
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * value;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
 
 for(value = e->values.first; value; value = value->next)
@@ -5592,3759 +5968,4771 @@ if(value)
 {
 FreeExpContents(sourceExp);
 FreeType(sourceExp->expType);
-sourceExp->isConstant = 0x1;
+sourceExp->isConstant = 1;
 sourceExp->expType = MkClassType(_class->fullName);
 {
-char constant[256];
-
 sourceExp->type = 2;
-if(_class->dataTypeString && !strcmp(_class->dataTypeString, "int"))
-sprintf(constant, "%d", (int)value->data);
+if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
+sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
 else
-sprintf(constant, "0x%X", (int)value->data);
-sourceExp->constant = __ecereNameSpace__ecere__sys__CopyString(constant);
+sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
 }
-return 0x1;
+FreeType(dest);
+return 1;
 }
 }
 }
 }
 }
 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
-return 0x1;
+{
+FreeType(dest);
+return 1;
+}
 }
+FreeType(dest);
 }
-return 0x0;
+return 0;
 }
 
 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i + value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui + value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s + value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
+}
+
+static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s + value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
 }
 
 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us + value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c + value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc + value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f + value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d + value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i - value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui - value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s - value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us - value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c - value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc - value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f - value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d - value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i * value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui * value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s * value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us * value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c * value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc * value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f * value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d * value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(value2 ? (op1->i / value2) : 0);
+exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i / value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui / value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 / value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(value2 ? (op1->ui / value2) : 0);
+exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 / value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(value2 ? (op1->s / value2) : (short)0);
+exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s / value2) : (short)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(value2 ? (op1->us / value2) : (unsigned short)0);
+exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us / value2) : (unsigned short)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(value2 ? (op1->c / value2) : (char)0);
+exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c / value2) : (char)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(value2 ? (op1->uc / value2) : (unsigned char)0);
+exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc / value2) : (unsigned char)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(value2 ? (op1->f / value2) : 0);
+exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f / value2);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(value2 ? (op1->d / value2) : 0);
+exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d / value2);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(value2 ? (op1->i % value2) : 0);
+exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i % value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui % value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 % value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(value2 ? (op1->ui % value2) : 0);
+exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 % value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(value2 ? (op1->s % value2) : (short)0);
+exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s % value2) : (short)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(value2 ? (op1->us % value2) : (unsigned short)0);
+exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us % value2) : (unsigned short)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(value2 ? (op1->c % value2) : (char)0);
+exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c % value2) : (char)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(value2 ? (op1->uc % value2) : (unsigned char)0);
+exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc % value2) : (unsigned char)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintInt(-op1->i);
+exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUInt(-op1->ui);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
+{
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
+{
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintShort(-op1->s);
+exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUShort(-op1->us);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintChar(-op1->c);
+exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUChar(-op1->uc);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintFloat(-op1->f);
+exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintDouble(-op1->d);
+exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintInt(++op1->i);
+exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUInt(++op1->ui);
+exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
+{
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
+{
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintShort(++op1->s);
+exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUShort(++op1->us);
+exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintChar(++op1->c);
+exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUChar(++op1->uc);
+exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintFloat(++op1->f);
+exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintDouble(++op1->d);
+exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintInt(--op1->i);
+exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUInt(--op1->ui);
+exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
+{
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
+{
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintShort(--op1->s);
+exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUShort(--op1->us);
+exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintChar(--op1->c);
+exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintUChar(--op1->uc);
+exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintFloat(--op1->f);
+exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
 {
 exp->type = 2;
-exp->string = PrintDouble(--op1->d);
+exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i = value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui = value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s = value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us = value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c = value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc = value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f = value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d = value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i += value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui += value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s += value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us += value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c += value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc += value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f += value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d += value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i -= value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui -= value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s -= value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us -= value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c -= value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc -= value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f -= value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d -= value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i *= value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui *= value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s *= value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us *= value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c *= value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc *= value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f *= value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d *= value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintInt(value2 ? (op1->i /= value2) : 0);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUInt(value2 ? (op1->ui /= value2) : 0);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintShort(value2 ? (op1->s /= value2) : (short)0);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUShort(value2 ? (op1->us /= value2) : (unsigned short)0);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintChar(value2 ? (op1->c /= value2) : (char)0);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUChar(value2 ? (op1->uc /= value2) : (unsigned char)0);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintFloat(value2 ? (op1->f /= value2) : 0);
+exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i /= value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintDouble(value2 ? (op1->d /= value2) : 0);
+exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui /= value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintInt(value2 ? (op1->i %= value2) : 0);
+exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 /= value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(value2 ? (op1->ui %= value2) : 0);
+exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 /= value2) : 0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(value2 ? (op1->s %= value2) : (short)0);
+exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s /= value2) : (short)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(value2 ? (op1->us %= value2) : (unsigned short)0);
+exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us /= value2) : (unsigned short)0);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+char value2 = op2->__anon1.c;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c /= value2) : (char)0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned char value2 = op2->__anon1.uc;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc /= value2) : (unsigned char)0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+float value2 = op2->__anon1.f;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f /= value2);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+double value2 = op2->__anon1.d;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d /= value2);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+int value2 = op2->__anon1.i;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i %= value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui %= value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 %= value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 %= value2) : 0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s %= value2) : (short)0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned short value2 = op2->__anon1.us;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us %= value2) : (unsigned short)0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+char value2 = op2->__anon1.c;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c %= value2) : (char)0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned char value2 = op2->__anon1.uc;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc %= value2) : (unsigned char)0);
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+int value2 = op2->__anon1.i;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned short value2 = op2->__anon1.us;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+char value2 = op2->__anon1.c;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned char value2 = op2->__anon1.uc;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc & value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+int value2 = op2->__anon1.i;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned short value2 = op2->__anon1.us;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+char value2 = op2->__anon1.c;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned char value2 = op2->__anon1.uc;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc | value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+int value2 = op2->__anon1.i;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned short value2 = op2->__anon1.us;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+char value2 = op2->__anon1.c;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned char value2 = op2->__anon1.uc;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^ value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+int value2 = op2->__anon1.i;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned short value2 = op2->__anon1.us;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+char value2 = op2->__anon1.c;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned char value2 = op2->__anon1.uc;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc << value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+int value2 = op2->__anon1.i;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned int value2 = op2->__anon1.ui;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+long long value2 = op2->__anon1.i64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+uint64 value2 = op2->__anon1.ui64;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+short value2 = op2->__anon1.s;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >> value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+{
+unsigned short value2 = op2->__anon1.us;
+
+exp->type = 2;
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >> value2));
+if(!exp->expType)
+{
+exp->expType = op1->type;
+if(op1->type)
+op1->type->refCount++;
+}
+return 1;
+}
+
+static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(value2 ? (op1->c %= value2) : (char)0);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >> value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(value2 ? (op1->uc %= value2) : (unsigned char)0);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >> value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
 {
-int value2 = op2->i;
-
 exp->type = 2;
-exp->string = PrintInt(op1->i & value2);
+exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned int value2 = op2->ui;
-
 exp->type = 2;
-exp->string = PrintUInt(op1->ui & value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
 {
-short value2 = op2->s;
-
 exp->type = 2;
-exp->string = PrintShort(op1->s & value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned short value2 = op2->us;
-
 exp->type = 2;
-exp->string = PrintUShort(op1->us & value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
 {
-char value2 = op2->c;
-
 exp->type = 2;
-exp->string = PrintChar(op1->c & value2);
+exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned char value2 = op2->uc;
-
 exp->type = 2;
-exp->string = PrintUChar(op1->uc & value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
 {
-int value2 = op2->i;
-
 exp->type = 2;
-exp->string = PrintInt(op1->i | value2);
+exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned int value2 = op2->ui;
-
 exp->type = 2;
-exp->string = PrintUInt(op1->ui | value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s | value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us | value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c | value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc | value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i ^ value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui ^ value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s ^ value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us ^ value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c ^ value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc ^ value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i << value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui << value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s << value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us << value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c << value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc << value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i >> value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui >> value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s >> value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us >> value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c >> value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc >> value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
+static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+char value2 = op2->__anon1.c;
+
 exp->type = 2;
-exp->string = PrintInt(~op1->i);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
+static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+unsigned char value2 = op2->__anon1.uc;
+
 exp->type = 2;
-exp->string = PrintUInt(~op1->ui);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
+static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+int value2 = op2->__anon1.i;
+
 exp->type = 2;
-exp->string = PrintShort(~op1->s);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
+static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+unsigned int value2 = op2->__anon1.ui;
+
 exp->type = 2;
-exp->string = PrintUShort(~op1->us);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
+static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+long long value2 = op2->__anon1.i64;
+
 exp->type = 2;
-exp->string = PrintChar(~op1->c);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
+static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+uint64 value2 = op2->__anon1.ui64;
+
 exp->type = 2;
-exp->string = PrintUChar(~op1->uc);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i &= value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui &= value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s &= value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us &= value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c &= value2);
+exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc &= value2);
+exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i |= value2);
+exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui |= value2);
+exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s |= value2);
+exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us |= value2);
+exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c |= value2);
+exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc |= value2);
+exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
 {
-int value2 = op2->i;
-
 exp->type = 2;
-exp->string = PrintInt(op1->i ^= value2);
+exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned int value2 = op2->ui;
-
 exp->type = 2;
-exp->string = PrintUInt(op1->ui ^= value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
 {
-short value2 = op2->s;
-
 exp->type = 2;
-exp->string = PrintShort(op1->s ^= value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
 {
-unsigned short value2 = op2->us;
-
 exp->type = 2;
-exp->string = PrintUShort(op1->us ^= value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
 {
-char value2 = op2->c;
-
 exp->type = 2;
-exp->string = PrintChar(op1->c ^= value2);
+exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned char value2 = op2->uc;
-
 exp->type = 2;
-exp->string = PrintUChar(op1->uc ^= value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
 {
-int value2 = op2->i;
-
 exp->type = 2;
-exp->string = PrintInt(op1->i <<= value2);
+exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
 {
-unsigned int value2 = op2->ui;
-
 exp->type = 2;
-exp->string = PrintUInt(op1->ui <<= value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s <<= value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us <<= value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c <<= value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc <<= value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i >>= value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui >>= value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s >>= value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us >>= value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c >>= value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc >>= value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
+static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+int value2 = op2->__anon1.i;
+
 exp->type = 2;
-exp->string = PrintInt(!op1->i);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
+static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+unsigned int value2 = op2->__anon1.ui;
+
 exp->type = 2;
-exp->string = PrintUInt(!op1->ui);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
+static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+long long value2 = op2->__anon1.i64;
+
 exp->type = 2;
-exp->string = PrintShort(!op1->s);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
+static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+uint64 value2 = op2->__anon1.ui64;
+
 exp->type = 2;
-exp->string = PrintUShort(!op1->us);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
+static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+short value2 = op2->__anon1.s;
+
 exp->type = 2;
-exp->string = PrintChar(!op1->c);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
+static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
+unsigned short value2 = op2->__anon1.us;
+
 exp->type = 2;
-exp->string = PrintUChar(!op1->uc);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i == value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui == value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s == value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us == value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c == value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc == value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f == value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d == value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i != value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui != value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s != value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us != value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c != value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc != value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f != value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d != value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i && value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui && value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s && value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us && value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c && value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc && value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f && value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d && value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i || value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui || value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s || value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us || value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c || value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc || value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f || value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d || value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i > value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui > value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s > value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us > value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c > value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc > value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f > value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d > value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i < value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui < value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s < value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us < value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c < value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc < value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f < value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d < value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i >= value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui >= value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s >= value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us >= value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c >= value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc >= value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+int value2 = op2->__anon1.i;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f >= value2);
+exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+unsigned int value2 = op2->__anon1.ui;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d >= value2);
+exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-int value2 = op2->i;
+long long value2 = op2->__anon1.i64;
 
 exp->type = 2;
-exp->string = PrintInt(op1->i <= value2);
+exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
+static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned int value2 = op2->ui;
+uint64 value2 = op2->__anon1.ui64;
 
 exp->type = 2;
-exp->string = PrintUInt(op1->ui <= value2);
+exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-short value2 = op2->s;
+short value2 = op2->__anon1.s;
 
 exp->type = 2;
-exp->string = PrintShort(op1->s <= value2);
+exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned short value2 = op2->us;
+unsigned short value2 = op2->__anon1.us;
 
 exp->type = 2;
-exp->string = PrintUShort(op1->us <= value2);
+exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-char value2 = op2->c;
+char value2 = op2->__anon1.c;
 
 exp->type = 2;
-exp->string = PrintChar(op1->c <= value2);
+exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-unsigned char value2 = op2->uc;
+unsigned char value2 = op2->__anon1.uc;
 
 exp->type = 2;
-exp->string = PrintUChar(op1->uc <= value2);
+exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-float value2 = op2->f;
+float value2 = op2->__anon1.f;
 
 exp->type = 2;
-exp->string = PrintFloat(op1->f <= value2);
+exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
 {
-double value2 = op2->d;
+double value2 = op2->__anon1.d;
 
 exp->type = 2;
-exp->string = PrintDouble(op1->d <= value2);
+exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintInt(op1->i ? op2->i : op3->i);
+exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintUInt(op1->ui ? op2->ui : op3->ui);
+exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
+static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintShort(op1->s ? op2->s : op3->s);
+exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
+static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintUShort(op1->us ? op2->us : op3->us);
+exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
+static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintChar(op1->c ? op2->c : op3->c);
+exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
+static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintUChar(op1->uc ? op2->uc : op3->uc);
+exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int FloatCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
+static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintFloat(op1->f ? op2->f : op3->f);
+exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-static unsigned int DoubleCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
+static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
 {
 exp->type = 2;
-exp->string = PrintDouble(op1->d ? op2->d : op3->d);
+exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
 if(!exp->expType)
 {
 exp->expType = op1->type;
 if(op1->type)
 op1->type->refCount++;
 }
-return 0x1;
+return 1;
 }
 
-struct OpTable intOps = 
+struct OpTable intOps =
 {
 IntAdd, IntSub, IntMul, IntDiv, IntMod, IntNeg, IntInc, IntDec, IntAsign, IntAddAsign, IntSubAsign, IntMulAsign, IntDivAsign, IntModAsign, IntBitAnd, IntBitOr, IntBitXor, IntLShift, IntRShift, IntBitNot, IntAndAsign, IntOrAsign, IntXorAsign, IntLShiftAsign, IntRShiftAsign, IntNot, IntEqu, IntNqu, IntAnd, IntOr, IntGrt, IntSma, IntGrtEqu, IntSmaEqu, IntCond
 };
 
-struct OpTable uintOps = 
+struct OpTable uintOps =
 {
 UIntAdd, UIntSub, UIntMul, UIntDiv, UIntMod, UIntNeg, UIntInc, UIntDec, UIntAsign, UIntAddAsign, UIntSubAsign, UIntMulAsign, UIntDivAsign, UIntModAsign, UIntBitAnd, UIntBitOr, UIntBitXor, UIntLShift, UIntRShift, UIntBitNot, UIntAndAsign, UIntOrAsign, UIntXorAsign, UIntLShiftAsign, UIntRShiftAsign, UIntNot, UIntEqu, UIntNqu, UIntAnd, UIntOr, UIntGrt, UIntSma, UIntGrtEqu, UIntSmaEqu, UIntCond
 };
 
-struct OpTable shortOps = 
+struct OpTable int64Ops =
+{
+Int64Add, Int64Sub, Int64Mul, Int64Div, Int64Mod, Int64Neg, Int64Inc, Int64Dec, Int64Asign, Int64AddAsign, Int64SubAsign, Int64MulAsign, Int64DivAsign, Int64ModAsign, Int64BitAnd, Int64BitOr, Int64BitXor, Int64LShift, Int64RShift, Int64BitNot, Int64AndAsign, Int64OrAsign, Int64XorAsign, Int64LShiftAsign, Int64RShiftAsign, Int64Not, Int64Equ, Int64Nqu, Int64And, Int64Or, Int64Grt, Int64Sma, Int64GrtEqu, Int64SmaEqu, Int64Cond
+};
+
+struct OpTable uint64Ops =
+{
+UInt64Add, UInt64Sub, UInt64Mul, UInt64Div, UInt64Mod, UInt64Neg, UInt64Inc, UInt64Dec, UInt64Asign, UInt64AddAsign, UInt64SubAsign, UInt64MulAsign, UInt64DivAsign, UInt64ModAsign, UInt64BitAnd, UInt64BitOr, UInt64BitXor, UInt64LShift, UInt64RShift, UInt64BitNot, UInt64AndAsign, UInt64OrAsign, UInt64XorAsign, UInt64LShiftAsign, UInt64RShiftAsign, UInt64Not, UInt64Equ, UInt64Nqu, UInt64And, UInt64Or, UInt64Grt, UInt64Sma, UInt64GrtEqu, UInt64SmaEqu, UInt64Cond
+};
+
+struct OpTable shortOps =
 {
 ShortAdd, ShortSub, ShortMul, ShortDiv, ShortMod, ShortNeg, ShortInc, ShortDec, ShortAsign, ShortAddAsign, ShortSubAsign, ShortMulAsign, ShortDivAsign, ShortModAsign, ShortBitAnd, ShortBitOr, ShortBitXor, ShortLShift, ShortRShift, ShortBitNot, ShortAndAsign, ShortOrAsign, ShortXorAsign, ShortLShiftAsign, ShortRShiftAsign, ShortNot, ShortEqu, ShortNqu, ShortAnd, ShortOr, ShortGrt, ShortSma, ShortGrtEqu, ShortSmaEqu, ShortCond
 };
 
-struct OpTable ushortOps = 
+struct OpTable ushortOps =
 {
 UShortAdd, UShortSub, UShortMul, UShortDiv, UShortMod, UShortNeg, UShortInc, UShortDec, UShortAsign, UShortAddAsign, UShortSubAsign, UShortMulAsign, UShortDivAsign, UShortModAsign, UShortBitAnd, UShortBitOr, UShortBitXor, UShortLShift, UShortRShift, UShortBitNot, UShortAndAsign, UShortOrAsign, UShortXorAsign, UShortLShiftAsign, UShortRShiftAsign, UShortNot, UShortEqu, UShortNqu, UShortAnd, UShortOr, UShortGrt, UShortSma, UShortGrtEqu, UShortSmaEqu, UShortCond
 };
 
-struct OpTable floatOps = 
+struct OpTable floatOps =
 {
 FloatAdd, FloatSub, FloatMul, FloatDiv, (((void *)0)), FloatNeg, FloatInc, FloatDec, FloatAsign, FloatAddAsign, FloatSubAsign, FloatMulAsign, FloatDivAsign, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), FloatEqu, FloatNqu, FloatAnd, FloatOr, FloatGrt, FloatSma, FloatGrtEqu, FloatSmaEqu
 };
 
-struct OpTable doubleOps = 
+struct OpTable doubleOps =
 {
 DoubleAdd, DoubleSub, DoubleMul, DoubleDiv, (((void *)0)), DoubleNeg, DoubleInc, DoubleDec, DoubleAsign, DoubleAddAsign, DoubleSubAsign, DoubleMulAsign, DoubleDivAsign, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), DoubleEqu, DoubleNqu, DoubleAnd, DoubleOr, DoubleGrt, DoubleSma, DoubleGrtEqu, DoubleSmaEqu
 };
 
-struct OpTable charOps = 
+struct OpTable charOps =
 {
 CharAdd, CharSub, CharMul, CharDiv, CharMod, CharNeg, CharInc, CharDec, CharAsign, CharAddAsign, CharSubAsign, CharMulAsign, CharDivAsign, CharModAsign, CharBitAnd, CharBitOr, CharBitXor, CharLShift, CharRShift, CharBitNot, CharAndAsign, CharOrAsign, CharXorAsign, CharLShiftAsign, CharRShiftAsign, CharNot, CharEqu, CharNqu, CharAnd, CharOr, CharGrt, CharSma, CharGrtEqu, CharSmaEqu, CharCond
 };
 
-struct OpTable ucharOps = 
+struct OpTable ucharOps =
 {
 UCharAdd, UCharSub, UCharMul, UCharDiv, UCharMod, UCharNeg, UCharInc, UCharDec, UCharAsign, UCharAddAsign, UCharSubAsign, UCharMulAsign, UCharDivAsign, UCharModAsign, UCharBitAnd, UCharBitOr, UCharBitXor, UCharLShift, UCharRShift, UCharBitNot, UCharAndAsign, UCharOrAsign, UCharXorAsign, UCharLShiftAsign, UCharRShiftAsign, UCharNot, UCharEqu, UCharNqu, UCharAnd, UCharOr, UCharGrt, UCharSma, UCharGrtEqu, UCharSmaEqu, UCharCond
 };
@@ -9353,7 +10741,7 @@ void ReadString(char * output, char * string)
 {
 int len = strlen(string);
 int c, d = 0;
-unsigned int quoted = 0x0, escaped = 0x0;
+unsigned int quoted = 0, escaped = 0;
 
 for(c = 0; c < len; c++)
 {
@@ -9390,21 +10778,23 @@ break;
 case '\"':
 output[d] = '\"';
 break;
+case '\'':
+output[d] = '\'';
+break;
 default:
-output[d++] = '\\';
 output[d] = ch;
 }
 d++;
-escaped = 0x0;
+escaped = 0;
 }
 else
 {
 if(ch == '\"')
-quoted ^= 0x1;
+quoted ^= 1;
 else if(quoted)
 {
 if(ch == '\\')
-escaped = 0x1;
+escaped = 1;
 else
 output[d++] = ch;
 }
@@ -9413,17 +10803,98 @@ output[d++] = ch;
 output[d] = '\0';
 }
 
-extern long long __ecereNameSpace__ecere__com___strtoi64(char *  string, char * *  endString, int base);
+int UnescapeString(char * d, char * s, int len)
+{
+int j = 0, k = 0;
+char ch;
+
+while(j < len && (ch = s[j]))
+{
+switch(ch)
+{
+case '\\':
+switch((ch = s[++j]))
+{
+case 'n':
+d[k] = '\n';
+break;
+case 't':
+d[k] = '\t';
+break;
+case 'a':
+d[k] = '\a';
+break;
+case 'b':
+d[k] = '\b';
+break;
+case 'f':
+d[k] = '\f';
+break;
+case 'r':
+d[k] = '\r';
+break;
+case 'v':
+d[k] = '\v';
+break;
+case '\\':
+d[k] = '\\';
+break;
+case '\"':
+d[k] = '\"';
+break;
+case '\'':
+d[k] = '\'';
+break;
+default:
+d[k] = '\\';
+d[k] = ch;
+}
+break;
+default:
+d[k] = ch;
+}
+j++, k++;
+}
+d[k] = '\0';
+return k;
+}
+
+char * OffsetEscapedString(char * s, int len, int offset)
+{
+char ch;
+int j = 0, k = 0;
+
+while(j < len && k < offset && (ch = s[j]))
+{
+if(ch == '\\')
+++j;
+j++, k++;
+}
+return (k == offset) ? s + j : (((void *)0));
+}
+
+extern long long __ecereNameSpace__ecere__com___strtoi64(const char *  string, const char * *  endString, int base);
+
+extern uint64 __ecereNameSpace__ecere__com___strtoui64(const char *  string, const char * *  endString, int base);
+
+extern double strtod(const char * , char * * );
+
+extern float (* __ecereMethod_float_inf)(void);
+
+extern float (* __ecereMethod_float_nan)(void);
 
-extern uint64 __ecereNameSpace__ecere__com___strtoui64(char *  string, char * *  endString, int base);
+extern double (* __ecereMethod_double_inf)(void);
 
-extern double strtod(char * , char * * );
+extern double (* __ecereMethod_double_nan)(void);
 
 struct Operand GetOperand(struct Expression * exp)
 {
-struct Operand op = 
+struct Operand op =
 {
-0, 0, 0, 0, 
+0, 0, 0,
+.__anon1 = {
+.c = 0
+},
 {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 }
@@ -9432,30 +10903,40 @@ struct Type * type = exp->expType;
 
 if(type)
 {
-while(type->kind == 8 && type->_class->registered && (type->_class->registered->type == 2 || type->_class->registered->type == 3 || type->_class->registered->type == 4))
+while(type->kind == 8 && type->__anon1._class->__anon1.registered && (type->__anon1._class->__anon1.registered->type == 2 || type->__anon1._class->__anon1.registered->type == 3 || type->__anon1._class->__anon1.registered->type == 4))
 {
-if(!type->_class->registered->dataType)
-type->_class->registered->dataType = ProcessTypeString(type->_class->registered->dataTypeString, 0x0);
-type = type->_class->registered->dataType;
+if(!type->__anon1._class->__anon1.registered->dataType)
+type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
+type = type->__anon1._class->__anon1.registered->dataType;
 }
-op.kind = type->kind;
-op.type = exp->expType;
-if(exp->isConstant && exp->type == 2)
+if(exp->type == 3 && op.kind == 13)
+{
+op.__anon1.ui64 = (uint64)exp->__anon1.__anon2.string;
+op.kind = 13;
+op.ops = uint64Ops;
+}
+else if(exp->isConstant && exp->type == 2)
 {
+op.kind = type->kind;
+op.type = type;
 switch(op.kind)
 {
+case 24:
 case 1:
 {
-if(exp->constant[0] == '\'')
-op.c = exp->constant[1];
+if(exp->__anon1.__anon1.constant[0] == '\'')
+{
+op.__anon1.c = exp->__anon1.__anon1.constant[1];
+op.ops = charOps;
+}
 else if(type->isSigned)
 {
-op.c = (char)strtol(exp->constant, (((void *)0)), 0);
+op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.ops = charOps;
 }
 else
 {
-op.uc = (unsigned char)strtoul(exp->constant, (((void *)0)), 0);
+op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.ops = ucharOps;
 }
 break;
@@ -9463,12 +10944,12 @@ break;
 case 2:
 if(type->isSigned)
 {
-op.s = (short)strtol(exp->constant, (((void *)0)), 0);
+op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.ops = shortOps;
 }
 else
 {
-op.us = (unsigned short)strtoul(exp->constant, (((void *)0)), 0);
+op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.ops = ushortOps;
 }
 break;
@@ -9476,12 +10957,12 @@ case 3:
 case 5:
 if(type->isSigned)
 {
-op.i = strtol(exp->constant, (((void *)0)), 0);
+op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.ops = intOps;
 }
 else
 {
-op.ui = strtoul(exp->constant, (((void *)0)), 0);
+op.__anon1.ui = strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.ops = uintOps;
 }
 op.kind = 3;
@@ -9489,56 +10970,74 @@ break;
 case 4:
 if(type->isSigned)
 {
-op.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->constant, (((void *)0)), 0);
-op.ops = intOps;
+op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
+op.ops = int64Ops;
 }
 else
 {
-op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
-op.ops = uintOps;
+op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
+op.ops = uint64Ops;
 }
-op.kind = 3;
+op.kind = 4;
 break;
 case 22:
 if(type->isSigned)
 {
-op.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->constant, (((void *)0)), 0);
-op.ops = intOps;
+op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
+op.ops = int64Ops;
 }
 else
 {
-op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
-op.ops = uintOps;
+op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
+op.ops = uint64Ops;
 }
-op.kind = 3;
+op.kind = 4;
 break;
 case 23:
 if(type->isSigned)
 {
-op.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->constant, (((void *)0)), 0);
-op.ops = intOps;
+op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
+op.ops = int64Ops;
 }
 else
 {
-op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
-op.ops = uintOps;
+op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
+op.ops = uint64Ops;
 }
-op.kind = 3;
+op.kind = 4;
 break;
 case 6:
-op.f = (float)strtod(exp->constant, (((void *)0)));
+if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
+op.__anon1.f = __ecereMethod_float_inf();
+else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
+op.__anon1.f = -__ecereMethod_float_inf();
+else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
+op.__anon1.f = __ecereMethod_float_nan();
+else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
+op.__anon1.f = -__ecereMethod_float_nan();
+else
+op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
 op.ops = floatOps;
 break;
 case 7:
-op.d = (double)strtod(exp->constant, (((void *)0)));
+if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
+op.__anon1.d = __ecereMethod_double_inf();
+else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
+op.__anon1.d = -__ecereMethod_double_inf();
+else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
+op.__anon1.d = __ecereMethod_double_nan();
+else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
+op.__anon1.d = -__ecereMethod_double_nan();
+else
+op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
 op.ops = doubleOps;
 break;
 case 12:
 case 13:
 case 8:
-op.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->constant, (((void *)0)), 0);
+op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
 op.kind = 13;
-op.ops = uintOps;
+op.ops = uint64Ops;
 break;
 }
 }
@@ -9546,15 +11045,49 @@ break;
 return op;
 }
 
+static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
+{
+long long v = 0;
+
+switch(_class->typeSize)
+{
+case 8:
+if(!strcmp(_class->dataTypeString, "uint64"))
+v = (long long)*(uint64 *)ptr;
+else
+v = *(long long *)ptr;
+break;
+case 4:
+if(!strcmp(_class->dataTypeString, "uint"))
+v = (long long)*(unsigned int *)ptr;
+else
+v = (long long)*(int *)ptr;
+break;
+case 2:
+if(!strcmp(_class->dataTypeString, "uint16"))
+v = (long long)*(unsigned short *)ptr;
+else
+v = (long long)*(short *)ptr;
+break;
+case 1:
+if(!strcmp(_class->dataTypeString, "byte"))
+v = (long long)*(unsigned char *)ptr;
+else
+v = (long long)*(char *)ptr;
+break;
+}
+return v;
+}
+
 int __ecereVMethodID_class_OnGetString;
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
 
-static void UnusedFunction()
+static __attribute__((unused)) void UnusedFunction()
 {
 int a;
 
-((char *  (*)(struct __ecereNameSpace__ecere__com__Class *, void *, char *  tempString, void *  fieldData, unsigned int *  needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int, &a, 0, 0, 0);
+((const char *  (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char *  tempString, void *  fieldData, unsigned int *  needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int, &a, 0, 0, 0);
 }
 
 extern int __ecereVMethodID_class_OnGetString;
@@ -9578,11 +11111,11 @@ char * result = (((void *)0));
 exp->loc = member->loc = inst->loc;
 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
 if(!dataMember->dataType)
-dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
+dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
 type = dataMember->dataType;
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 4)
 {
@@ -9591,11 +11124,11 @@ struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere
 if(enumClass)
 {
 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
-struct __ecereNameSpace__ecere__sys__NamedLink * item;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
 
 for(item = e->values.first; item; item = item->next)
 {
-if((int)item->data == *(int *)ptr)
+if(item->data == GetEnumValue(_class, ptr))
 {
 result = item->name;
 break;
@@ -9603,7 +11136,7 @@ break;
 }
 if(result)
 {
-exp->identifier = MkIdentifier(result);
+exp->__anon1.__anon1.identifier = MkIdentifier(result);
 exp->type = 0;
 exp->destType = MkClassType(_class->fullName);
 ProcessExpressionType(exp);
@@ -9613,7 +11146,7 @@ ProcessExpressionType(exp);
 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 type = _class->dataType;
 }
 }
@@ -9624,47 +11157,47 @@ switch(type->kind)
 case 6:
 {
 FreeExpContents(exp);
-exp->constant = PrintFloat(*(float *)ptr);
+exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
 exp->type = 2;
 break;
 }
 case 7:
 {
 FreeExpContents(exp);
-exp->constant = PrintDouble(*(double *)ptr);
+exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
 exp->type = 2;
 break;
 }
 case 3:
 {
 FreeExpContents(exp);
-exp->constant = PrintInt(*(int *)ptr);
+exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
 exp->type = 2;
 break;
 }
 case 4:
 {
 FreeExpContents(exp);
-exp->constant = PrintInt64(*(long long *)ptr);
+exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
 exp->type = 2;
 break;
 }
 case 22:
 {
 FreeExpContents(exp);
-exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
+exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
 exp->type = 2;
 break;
 }
 case 23:
 {
 FreeExpContents(exp);
-exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
+exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
 exp->type = 2;
 break;
 }
 default:
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
 }
 }
 ListAdd(memberList, member);
@@ -9678,8 +11211,8 @@ extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sy
 
 void PopulateInstance(struct Instantiation * inst)
 {
-struct Symbol * classSym = inst->_class->symbol;
-struct __ecereNameSpace__ecere__com__Class * _class = classSym->registered;
+struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
+struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
 
@@ -9704,11 +11237,11 @@ char * result = (((void *)0));
 exp->loc = member->loc = inst->loc;
 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
 if(!dataMember->dataType)
-dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
+dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
 type = dataMember->dataType;
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 4)
 {
@@ -9717,11 +11250,11 @@ struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere
 if(enumClass)
 {
 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
-struct __ecereNameSpace__ecere__sys__NamedLink * item;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
 
 for(item = e->values.first; item; item = item->next)
 {
-if((int)item->data == *(int *)ptr)
+if(item->data == GetEnumValue(_class, ptr))
 {
 result = item->name;
 break;
@@ -9730,7 +11263,7 @@ break;
 }
 if(result)
 {
-exp->identifier = MkIdentifier(result);
+exp->__anon1.__anon1.identifier = MkIdentifier(result);
 exp->type = 0;
 exp->destType = MkClassType(_class->fullName);
 ProcessExpressionType(exp);
@@ -9739,7 +11272,7 @@ ProcessExpressionType(exp);
 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 type = _class->dataType;
 }
 }
@@ -9749,36 +11282,36 @@ switch(type->kind)
 {
 case 6:
 {
-exp->constant = PrintFloat(*(float *)ptr);
+exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
 exp->type = 2;
 break;
 }
 case 7:
 {
-exp->constant = PrintDouble(*(double *)ptr);
+exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
 exp->type = 2;
 break;
 }
 case 3:
 {
-exp->constant = PrintInt(*(int *)ptr);
+exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
 exp->type = 2;
 break;
 }
 case 4:
 {
-exp->constant = PrintInt64(*(long long *)ptr);
+exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
 exp->type = 2;
 break;
 }
 case 22:
 {
-exp->constant = PrintInt64((long long)*(intptr_t *)ptr);
+exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
 exp->type = 2;
 break;
 }
 default:
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unhandled type populating instance\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
 }
 }
 ListAdd(memberList, member);
@@ -9787,16 +11320,16 @@ ListAdd(memberList, member);
 }
 }
 
-extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, unsigned int *  offset, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
+extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, unsigned int *  offset, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
 
 extern void FreeInstance(struct Instantiation * inst);
 
 void ComputeInstantiation(struct Expression * exp)
 {
-struct Instantiation * inst = exp->instance;
+struct Instantiation * inst = exp->__anon1.instance;
 struct MembersInit * members;
-struct Symbol * classSym = inst->_class ? inst->_class->symbol : (((void *)0));
-struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->registered : (((void *)0));
+struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
@@ -9808,7 +11341,11 @@ if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
 if(inst->data)
 return ;
 if(_class->type == 0 || _class->type == 5)
+{
 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
+if(_class->type == 0)
+((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
+}
 else
 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
 }
@@ -9820,17 +11357,16 @@ switch(members->type)
 {
 case 0:
 {
-if(members->dataMembers)
+if(members->__anon1.dataMembers)
 {
 struct MemberInit * member;
 
-for(member = (*members->dataMembers).first; member; member = member->next)
+for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
 {
 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
-unsigned int found = 0x0;
+unsigned int found = 0;
 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
-struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
 unsigned int dataMemberOffset;
 
 if(!ident)
@@ -9847,7 +11383,7 @@ __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember-
 if(_class->type == 0)
 dataMemberOffset += _class->base->structSize;
 }
-found = 0x1;
+found = 1;
 }
 }
 else
@@ -9855,7 +11391,7 @@ else
 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
 if(prop)
 {
-found = 0x1;
+found = 1;
 if(prop->memberAccess == 1)
 {
 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
@@ -9870,7 +11406,7 @@ int _subMemberStackPos = 0;
 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
 if(dataMember)
 {
-found = 0x1;
+found = 1;
 if(dataMember->memberAccess == 1)
 {
 curMember = dataMember;
@@ -9883,9 +11419,9 @@ subMemberStackPos = _subMemberStackPos;
 }
 if(found && member->initializer && member->initializer->type == 0)
 {
-struct Expression * value = member->initializer->exp;
+struct Expression * value = member->initializer->__anon1.exp;
 struct Type * type = (((void *)0));
-unsigned int deepMember = 0x0;
+unsigned int deepMember = 0;
 
 if(prop)
 {
@@ -9894,22 +11430,22 @@ type = prop->dataType;
 else if(dataMember)
 {
 if(!dataMember->dataType)
-dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
+dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
 type = dataMember->dataType;
 }
 if(ident && ident->next)
 {
-deepMember = 0x1;
+deepMember = 1;
 for(ident = ident->next; ident && type; ident = ident->next)
 {
 if(type->kind == 8)
 {
-prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->_class->registered, ident->string, privateModule);
+prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
 if(prop)
 type = prop->dataType;
 else
 {
-dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->_class->registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
+dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
 if(dataMember)
 type = dataMember->dataType;
 }
@@ -9918,7 +11454,7 @@ else if(type->kind == 9 || type->kind == 10)
 {
 struct Type * memberType;
 
-for(memberType = type->members.first; memberType; memberType = memberType->next)
+for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
 {
 if(!strcmp(memberType->name, ident->string))
 {
@@ -9941,12 +11477,12 @@ if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _c
 {
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 2 || _class->type == 3 || _class->type == 4)
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 type = _class->dataType;
 }
 }
@@ -9994,30 +11530,30 @@ else if(value->type == 1)
 {
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 1)
 {
 ComputeTypeSize(type);
-if(value->instance->data)
-memcpy(ptr, value->instance->data, type->size);
+if(value->__anon1.instance->data)
+memcpy(ptr, value->__anon1.instance->data, type->size);
 }
 }
 }
 }
 else if(prop)
 {
-if(value->type == 1 && value->instance->data)
+if(value->type == 1 && value->__anon1.instance->data)
 {
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
-if(_class && (_class->type != 0 || __ecereNameSpace__ecere__com__eClass_IsDerived(((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)value->instance->data))->_class, _class)))
+if(_class && (_class->type != 0 || __ecereNameSpace__ecere__com__eClass_IsDerived(((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)value->__anon1.instance->data))->_class, _class)))
 {
 void (* Set)(void *, void *) = (void *)prop->Set;
 
-Set(inst->data, value->instance->data);
+Set(inst->data, value->__anon1.instance->data);
 PopulateInstance(inst);
 }
 }
@@ -10030,42 +11566,42 @@ case 7:
 {
 void (* Set)(void *, double) = (void *)prop->Set;
 
-Set(inst->data, strtod(value->constant, (((void *)0))));
+Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
 break;
 }
 case 6:
 {
 void (* Set)(void *, float) = (void *)prop->Set;
 
-Set(inst->data, (float)(strtod(value->constant, (((void *)0)))));
+Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
 break;
 }
 case 3:
 {
 void (* Set)(void *, int) = (void *)prop->Set;
 
-Set(inst->data, strtol(value->constant, (((void *)0)), 0));
+Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
 break;
 }
 case 4:
 {
 void (* Set)(void *, long long) = (void *)prop->Set;
 
-Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->constant, (((void *)0)), 0));
+Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.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));
+Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
 break;
 }
 case 23:
 {
 void (* Set)(void *, ssize_t) = (void *)prop->Set;
 
-Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->constant, (((void *)0)), 0));
+Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
 break;
 }
 }
@@ -10074,7 +11610,7 @@ else if(value->type == 3)
 {
 char temp[1024];
 
-ReadString(temp, value->string);
+ReadString(temp, value->__anon1.__anon2.string);
 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
 }
 }
@@ -10087,12 +11623,12 @@ if(value->type == 2)
 {
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 3)
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 type = _class->dataType;
 }
 }
@@ -10103,8 +11639,8 @@ case 6:
 float fValue;
 float (* Set)(float) = (void *)prop->Set;
 
-GetFloat(member->initializer->exp, &fValue);
-exp->constant = PrintFloat(Set(fValue));
+GetFloat(member->initializer->__anon1.exp, &fValue);
+exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
 exp->type = 2;
 break;
 }
@@ -10113,8 +11649,8 @@ case 7:
 double dValue;
 double (* Set)(double) = (void *)prop->Set;
 
-GetDouble(member->initializer->exp, &dValue);
-exp->constant = PrintDouble(Set(dValue));
+GetDouble(member->initializer->__anon1.exp, &dValue);
+exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
 exp->type = 2;
 break;
 }
@@ -10126,11 +11662,11 @@ else if(!deepMember && type && _class->type == 2)
 {
 if(prop)
 {
-if(value->type == 1 && value->instance->data)
+if(value->type == 1 && value->__anon1.instance->data)
 {
 unsigned int (* Set)(void *) = (void *)prop->Set;
 
-bits = Set(value->instance->data);
+bits = Set(value->__anon1.instance->data);
 }
 else if(value->type == 2)
 {
@@ -10140,78 +11676,83 @@ else if(dataMember)
 {
 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
 struct Type * type;
-int part = 0;
+uint64 part = 0;
 
-GetInt(value, &part);
 bits = (bits & ~bitMember->mask);
 if(!bitMember->dataType)
-bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0x0);
+bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
 type = bitMember->dataType;
-if(type->kind == 8 && type->_class && type->_class->registered)
+if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
 {
-if(!type->_class->registered->dataType)
-type->_class->registered->dataType = ProcessTypeString(type->_class->registered->dataTypeString, 0x0);
-type = type->_class->registered->dataType;
+if(!type->__anon1._class->__anon1.registered->dataType)
+type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
+type = type->__anon1._class->__anon1.registered->dataType;
 }
 switch(type->kind)
 {
+case 24:
 case 1:
-if(type->isSigned)
-bits |= ((char)part << bitMember->pos);
-else
-bits |= ((unsigned char)part << bitMember->pos);
+{
+unsigned char v;
+
+type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
+part = (uint64)v;
 break;
+}
 case 2:
-if(type->isSigned)
-bits |= ((short)part << bitMember->pos);
-else
-bits |= ((unsigned short)part << bitMember->pos);
+{
+unsigned short v;
+
+type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
+part = (uint64)v;
 break;
+}
 case 3:
 case 5:
-if(type->isSigned)
-bits |= (part << bitMember->pos);
-else
-bits |= ((unsigned int)part << bitMember->pos);
+{
+unsigned int v;
+
+type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
+part = (uint64)v;
 break;
+}
 case 4:
-if(type->isSigned)
-bits |= ((long long)part << bitMember->pos);
-else
-bits |= ((uint64)part << bitMember->pos);
-break;
-case 22:
-if(type->isSigned)
 {
-bits |= ((intptr_t)part << bitMember->pos);
+uint64 v;
+
+type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
+part = v;
+break;
 }
-else
+case 22:
 {
-bits |= ((uintptr_t)part << bitMember->pos);
-}
+uintptr_t v;
+
+type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
+part = (uint64)v;
 break;
-case 23:
-if(type->isSigned)
-{
-bits |= ((ssize_t)part << bitMember->pos);
 }
-else
+case 23:
 {
-bits |= ((size_t)part << bitMember->pos);
-}
+size_t v;
+
+type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
+part = (uint64)v;
 break;
 }
 }
+bits |= part << bitMember->pos;
+}
 }
 }
 else
 {
 if(_class && _class->type == 3)
 {
-ComputeExpression(member->initializer->exp);
-exp->constant = member->initializer->exp->constant;
+ComputeExpression(member->initializer->__anon1.exp);
+exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
 exp->type = 2;
-member->initializer->exp->constant = (((void *)0));
+member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
 }
 }
 }
@@ -10223,7 +11764,7 @@ break;
 }
 if(_class && _class->type == 2)
 {
-exp->constant = PrintHexUInt(bits);
+exp->__anon1.__anon1.constant = PrintHexUInt(bits);
 exp->type = 2;
 }
 if(exp->type != 1)
@@ -10232,30 +11773,77 @@ FreeInstance(inst);
 }
 }
 
+static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
+{
+unsigned int result = 0;
+
+switch(kind)
+{
+case 2:
+if(op->kind == 1 || op->kind == 15 || op->kind == 24)
+result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
+break;
+case 3:
+case 5:
+if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
+result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
+break;
+case 4:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 7 || op->kind == 13 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
+result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
+break;
+case 6:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
+result = GetOpFloat(op, &op->__anon1.f);
+break;
+case 7:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
+result = GetOpDouble(op, &op->__anon1.d);
+break;
+case 13:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 7 || op->kind == 13 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
+result = GetOpUInt64(op, &op->__anon1.ui64);
+break;
+case 15:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 7 || op->kind == 13 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
+result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
+break;
+case 22:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
+result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
+break;
+case 23:
+if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
+result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
+break;
+}
+return result;
+}
+
 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
 {
-if(exp->op.op == SIZEOF)
+if(exp->__anon1.op.op == SIZEOF)
 {
 FreeExpContents(exp);
 exp->type = 2;
-exp->constant = PrintUInt(ComputeTypeSize(op1->type));
+exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
 }
 else
 {
-if(!exp->op.exp1)
+if(!exp->__anon1.op.exp1)
 {
-switch(exp->op.op)
+switch(exp->__anon1.op.op)
 {
 case '+':
 {
-struct Expression * exp2 = exp->op.exp2;
+struct Expression * exp2 = exp->__anon1.op.exp2;
 
-exp->op.exp2 = (((void *)0));
+exp->__anon1.op.exp2 = (((void *)0));
 FreeExpContents(exp);
 FreeType(exp->expType);
 FreeType(exp->destType);
 *exp = *exp2;
-((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
+((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
 break;
 }
 case '-':
@@ -10283,7 +11871,14 @@ break;
 }
 else
 {
-switch(exp->op.op)
+if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
+{
+if(Promote(op2, op1->kind, op1->type->isSigned))
+op2->kind = op1->kind, op2->ops = op1->ops;
+else if(Promote(op1, op2->kind, op2->type->isSigned))
+op1->kind = op2->kind, op1->ops = op2->ops;
+}
+switch(exp->__anon1.op.op)
 {
 case '+':
 if(op1->ops.Add)
@@ -10321,7 +11916,7 @@ op1->ops.Mod(exp, op1, op2);
 }
 break;
 case '&':
-if(exp->op.exp2)
+if(exp->__anon1.op.exp2)
 {
 if(op1->ops.BitAnd)
 {
@@ -10425,9 +12020,6 @@ extern struct Expression * MkExpIdentifier(struct Identifier * id);
 
 void ComputeExpression(struct Expression * exp)
 {
-char expString[10240];
-
-expString[0] = '\0';
 switch(exp->type)
 {
 case 1:
@@ -10438,28 +12030,75 @@ break;
 case 4:
 {
 struct Expression * exp1, * exp2 = (((void *)0));
-struct Operand op1 = 
+struct Operand op1 =
 {
-0, 0, 0, 0, 
+0, 0, 0,
+.__anon1 = {
+.c = 0
+},
 {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 }
 };
-struct Operand op2 = 
+struct Operand op2 =
 {
-0, 0, 0, 0, 
+0, 0, 0,
+.__anon1 = {
+.c = 0
+},
 {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 }
 };
 
-if(exp->op.exp2)
-ComputeExpression(exp->op.exp2);
-if(exp->op.exp1)
+if(exp->__anon1.op.exp2)
+{
+struct Expression * e = exp->__anon1.op.exp2;
+
+while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
+{
+if(e->type == 5 || e->type == 32 || e->type == 23)
+{
+if(e->type == 23)
+e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
+else
+e = (*e->__anon1.list).last;
+}
+}
+if(exp->__anon1.op.op == 261 && e && e->expType)
+{
+if(e->type == 3 && e->__anon1.__anon2.string)
+{
+char * string = e->__anon1.__anon2.string;
+int len = strlen(string);
+char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
+
+len = UnescapeString(tmp, string + 1, len - 2);
+(__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
+FreeExpContents(exp);
+exp->type = 2;
+exp->__anon1.__anon1.constant = PrintUInt(len + 1);
+}
+else
+{
+struct Type * type = e->expType;
+
+type->refCount++;
+FreeExpContents(exp);
+exp->type = 2;
+exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
+FreeType(type);
+}
+break;
+}
+else
+ComputeExpression(exp->__anon1.op.exp2);
+}
+if(exp->__anon1.op.exp1)
 {
-ComputeExpression(exp->op.exp1);
-exp1 = exp->op.exp1;
-exp2 = exp->op.exp2;
+ComputeExpression(exp->__anon1.op.exp1);
+exp1 = exp->__anon1.op.exp1;
+exp2 = exp->__anon1.op.exp2;
 op1 = GetOperand(exp1);
 if(op1.type)
 op1.type->refCount++;
@@ -10472,7 +12111,7 @@ op2.type->refCount++;
 }
 else
 {
-exp1 = exp->op.exp2;
+exp1 = exp->__anon1.op.exp2;
 op1 = GetOperand(exp1);
 if(op1.type)
 op1.type->refCount++;
@@ -10485,22 +12124,26 @@ FreeType(op2.type);
 break;
 }
 case 5:
-case 34:
+case 32:
 {
 struct Expression * e, * n;
 
-for(e = (*exp->list).first; e; e = n)
+for(e = (*exp->__anon1.list).first; e; e = n)
 {
 n = e->next;
 if(!n)
 {
-struct __ecereNameSpace__ecere__sys__OldList * list = exp->list;
+struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
+struct Expression * prev = exp->prev;
+struct Expression * next = exp->next;
 
 ComputeExpression(e);
 FreeType(exp->expType);
 FreeType(exp->destType);
 *exp = *e;
-((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+exp->prev = prev;
+exp->next = next;
+((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
 }
 else
@@ -10512,20 +12155,20 @@ break;
 }
 case 8:
 {
-struct Expression * memberExp = exp->member.exp;
-struct Identifier * memberID = exp->member.member;
+struct Expression * memberExp = exp->__anon1.member.exp;
+struct Identifier * memberID = exp->__anon1.member.member;
 struct Type * type;
 
-ComputeExpression(exp->member.exp);
-type = exp->member.exp->expType;
+ComputeExpression(exp->__anon1.member.exp);
+type = exp->__anon1.member.exp->expType;
 if(type)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = (exp->member.member && exp->member.member->classSym) ? exp->member.member->classSym->registered : (((type->kind == 8 || type->kind == 19) && type->_class) ? type->_class->registered : (((void *)0)));
+struct __ecereNameSpace__ecere__com__Class * _class = (exp->__anon1.member.member && exp->__anon1.member.member->classSym) ? exp->__anon1.member.member->classSym->__anon1.registered : (((type->kind == 8 || type->kind == 19) && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0)));
 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
 
-if(type->kind == 19 && exp->member.exp->type == 26)
+if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
 if(!_class)
 {
@@ -10533,22 +12176,22 @@ char string[256];
 struct Symbol * classSym;
 
 string[0] = '\0';
-PrintTypeNoConst(type, string, 0x0, 0x1);
+PrintTypeNoConst(type, string, 01);
 classSym = FindClass(string);
-_class = classSym ? classSym->registered : (((void *)0));
+_class = classSym ? classSym->__anon1.registered : (((void *)0));
 }
-if(exp->member.member)
+if(exp->__anon1.member.member)
 {
-prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->member.member->string, privateModule);
+prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
 if(!prop)
-member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->member.member->string, privateModule, (((void *)0)), (((void *)0)));
+member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
 }
-if(!prop && !member && _class && exp->member.member)
+if(!prop && !member && _class && exp->__anon1.member.member)
 {
-struct Symbol * classSym = FindClass(exp->member.member->string);
+struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
 
 convertTo = _class;
-_class = classSym ? classSym->registered : (((void *)0));
+_class = classSym ? classSym->__anon1.registered : (((void *)0));
 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
 }
 if(prop)
@@ -10561,12 +12204,12 @@ if(_class->type == 3)
 {
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 3)
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 type = _class->dataType;
 }
 }
@@ -10577,8 +12220,8 @@ case 6:
 float value;
 float (* Get)(float) = (void *)prop->Get;
 
-GetFloat(exp->member.exp, &value);
-exp->constant = PrintFloat(Get ? Get(value) : value);
+GetFloat(exp->__anon1.member.exp, &value);
+exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
 exp->type = 2;
 break;
 }
@@ -10587,12 +12230,12 @@ case 7:
 double value;
 double (* Get)(double);
 
-GetDouble(exp->member.exp, &value);
+GetDouble(exp->__anon1.member.exp, &value);
 if(convertTo)
 Get = (void *)prop->Set;
 else
 Get = (void *)prop->Get;
-exp->constant = PrintDouble(Get ? Get(value) : value);
+exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
 exp->type = 2;
 break;
 }
@@ -10602,7 +12245,7 @@ else
 {
 if(convertTo)
 {
-struct Expression * value = exp->member.exp;
+struct Expression * value = exp->__anon1.member.exp;
 struct Type * type;
 
 if(!prop->dataType)
@@ -10617,19 +12260,19 @@ switch(type->kind)
 {
 case 8:
 {
-struct __ecereNameSpace__ecere__com__Class * propertyClass = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
 
 if(propertyClass->type == 1 && value->type == 1)
 {
 void (* Set)(void *, void *) = (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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
-Set(exp->instance->data, value->instance->data);
-PopulateInstance(exp->instance);
+Set(exp->__anon1.instance->data, value->__anon1.instance->data);
+PopulateInstance(exp->__anon1.instance);
 }
 break;
 }
@@ -10638,14 +12281,14 @@ case 3:
 int intValue;
 void (* Set)(void *, int) = (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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
 GetInt(value, &intValue);
-Set(exp->instance->data, intValue);
-PopulateInstance(exp->instance);
+Set(exp->__anon1.instance->data, intValue);
+PopulateInstance(exp->__anon1.instance);
 break;
 }
 case 4:
@@ -10653,14 +12296,14 @@ case 4:
 long long intValue;
 void (* Set)(void *, long long) = (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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
 GetInt64(value, &intValue);
-Set(exp->instance->data, intValue);
-PopulateInstance(exp->instance);
+Set(exp->__anon1.instance->data, intValue);
+PopulateInstance(exp->__anon1.instance);
 break;
 }
 case 22:
@@ -10668,14 +12311,14 @@ 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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
 GetIntPtr(value, &intValue);
-Set(exp->instance->data, intValue);
-PopulateInstance(exp->instance);
+Set(exp->__anon1.instance->data, intValue);
+PopulateInstance(exp->__anon1.instance);
 break;
 }
 case 23:
@@ -10683,14 +12326,29 @@ case 23:
 ssize_t intValue;
 void (* Set)(void *, ssize_t) = (void *)prop->Set;
 
-exp->instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
-exp->instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
-exp->instance->_class = MkSpecifierName(_class->fullName);
-exp->instance->loc = exp->loc;
+exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
 GetIntSize(value, &intValue);
-Set(exp->instance->data, intValue);
-PopulateInstance(exp->instance);
+Set(exp->__anon1.instance->data, intValue);
+PopulateInstance(exp->__anon1.instance);
+break;
+}
+case 6:
+{
+float floatValue;
+void (* Set)(void *, float) = (void *)prop->Set;
+
+exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
+exp->type = 1;
+GetFloat(value, &floatValue);
+Set(exp->__anon1.instance->data, floatValue);
+PopulateInstance(exp->__anon1.instance);
 break;
 }
 case 7:
@@ -10698,14 +12356,14 @@ case 7:
 double doubleValue;
 void (* Set)(void *, double) = (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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
 GetDouble(value, &doubleValue);
-Set(exp->instance->data, doubleValue);
-PopulateInstance(exp->instance);
+Set(exp->__anon1.instance->data, doubleValue);
+PopulateInstance(exp->__anon1.instance);
 break;
 }
 }
@@ -10716,14 +12374,14 @@ switch(type->kind)
 {
 case 8:
 {
-struct __ecereNameSpace__ecere__com__Class * propertyClass = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
 
-if(propertyClass->type == 1 && value->instance->data)
+if(propertyClass->type == 1 && value->__anon1.instance->data)
 {
 unsigned int (* Set)(void *) = (void *)prop->Set;
-unsigned int bits = Set(value->instance->data);
+unsigned int bits = Set(value->__anon1.instance->data);
 
-exp->constant = PrintHexUInt(bits);
+exp->__anon1.__anon1.constant = PrintHexUInt(bits);
 exp->type = 2;
 break;
 }
@@ -10733,9 +12391,9 @@ unsigned int value;
 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
 unsigned int bits;
 
-GetUInt(exp->member.exp, &value);
+GetUInt(exp->__anon1.member.exp, &value);
 bits = Set(value);
-exp->constant = PrintHexUInt(bits);
+exp->__anon1.__anon1.constant = PrintHexUInt(bits);
 exp->type = 2;
 }
 }
@@ -10748,31 +12406,31 @@ if(_class->type == 2)
 {
 unsigned int value;
 
-GetUInt(exp->member.exp, &value);
+GetUInt(exp->__anon1.member.exp, &value);
 switch(type->kind)
 {
 case 8:
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 1)
 {
 void (* Get)(unsigned int, void *) = (void *)prop->Get;
 
-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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
-Get(value, exp->instance->data);
-PopulateInstance(exp->instance);
+Get(value, exp->__anon1.instance->data);
+PopulateInstance(exp->__anon1.instance);
 }
 else if(_class->type == 2)
 {
 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
 uint64 bits = Get(value);
 
-exp->constant = PrintHexUInt64(bits);
+exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
 exp->type = 2;
 }
 break;
@@ -10781,25 +12439,25 @@ break;
 }
 else if(_class->type == 1)
 {
-char * value = (exp->member.exp->type == 1) ? exp->member.exp->instance->data : (((void *)0));
+unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
 
 switch(type->kind)
 {
 case 8:
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class->type == 1 && value)
 {
 void (* Get)(void *, void *) = (void *)prop->Get;
 
-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->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
+exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
+exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
+exp->__anon1.instance->loc = exp->loc;
 exp->type = 1;
-Get(value, exp->instance->data);
-PopulateInstance(exp->instance);
+Get(value, exp->__anon1.instance->data);
+PopulateInstance(exp->__anon1.instance);
 }
 break;
 }
@@ -10810,7 +12468,7 @@ break;
 }
 else
 {
-exp->isConstant = 0x0;
+exp->isConstant = 0;
 }
 }
 else if(member)
@@ -10826,24 +12484,24 @@ break;
 }
 case 10:
 {
-struct Type * type = ProcessType(exp->typeName->qualifiers, exp->typeName->declarator);
+struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
 
 FreeExpContents(exp);
-exp->constant = PrintUInt(ComputeTypeSize(type));
+exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
 exp->type = 2;
 FreeType(type);
 break;
 }
 case 15:
 {
-struct Symbol * classSym = exp->_class->symbol;
+struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
 
-if(classSym && classSym->registered)
+if(classSym && classSym->__anon1.registered)
 {
-if(classSym->registered->fixed)
+if(classSym->__anon1.registered->fixed)
 {
-FreeSpecifier(exp->_class);
-exp->constant = PrintUInt(classSym->registered->templateClass ? classSym->registered->templateClass->structSize : classSym->registered->structSize);
+FreeSpecifier(exp->__anon1._class);
+exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
 exp->type = 2;
 }
 else
@@ -10851,12 +12509,12 @@ else
 char className[1024];
 
 strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 0x1);
-MangleClassName(className);
+FullClassNameCat(className, classSym->string, 1);
+DeclareClass(classSym, className);
 FreeExpContents(exp);
 exp->type = 9;
-exp->member.exp = MkExpIdentifier(MkIdentifier(className));
-exp->member.member = MkIdentifier("structSize");
+exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
+exp->__anon1.member.member = MkIdentifier("structSize");
 }
 }
 break;
@@ -10868,164 +12526,193 @@ struct Expression * e = exp;
 
 if(exp->type == 11)
 {
-if(exp->cast.exp)
-ComputeExpression(exp->cast.exp);
-e = exp->cast.exp;
+if(exp->__anon1.cast.exp)
+ComputeExpression(exp->__anon1.cast.exp);
+e = exp->__anon1.cast.exp;
 }
 if(e && exp->expType)
 {
 type = exp->expType;
 if(type->kind == 8)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = type->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
 
 if(_class && (_class->type == 3 || _class->type == 2))
 {
 if(!_class->dataType)
-_class->dataType = ProcessTypeString(_class->dataTypeString, 0x0);
+_class->dataType = ProcessTypeString(_class->dataTypeString, 0);
 type = _class->dataType;
 }
 }
 switch(type->kind)
 {
+case 24:
 case 1:
 if(type->isSigned)
 {
-char value;
+char value = (char)0;
 
-GetChar(e, &value);
+if(GetChar(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintChar(value);
+exp->__anon1.__anon1.constant = PrintChar(value);
 exp->type = 2;
 }
+}
 else
 {
-unsigned char value;
+unsigned char value = (unsigned char)0;
 
-GetUChar(e, &value);
+if(GetUChar(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintUChar(value);
+exp->__anon1.__anon1.constant = PrintUChar(value);
 exp->type = 2;
 }
+}
 break;
 case 2:
 if(type->isSigned)
 {
-short value;
+short value = (short)0;
 
-GetShort(e, &value);
+if(GetShort(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintShort(value);
+exp->__anon1.__anon1.constant = PrintShort(value);
 exp->type = 2;
 }
+}
 else
 {
-unsigned short value;
+unsigned short value = (unsigned short)0;
 
-GetUShort(e, &value);
+if(GetUShort(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintUShort(value);
+exp->__anon1.__anon1.constant = PrintUShort(value);
 exp->type = 2;
 }
+}
 break;
 case 3:
 if(type->isSigned)
 {
-int value;
+int value = 0;
 
-GetInt(e, &value);
+if(GetInt(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintInt(value);
+exp->__anon1.__anon1.constant = PrintInt(value);
 exp->type = 2;
 }
+}
 else
 {
-unsigned int value;
+unsigned int value = 0;
 
-GetUInt(e, &value);
+if(GetUInt(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintUInt(value);
+exp->__anon1.__anon1.constant = PrintUInt(value);
 exp->type = 2;
 }
+}
 break;
 case 4:
 if(type->isSigned)
 {
-long long value;
+long long value = 0;
 
-GetInt64(e, &value);
+if(GetInt64(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintInt64(value);
+exp->__anon1.__anon1.constant = PrintInt64(value);
 exp->type = 2;
 }
+}
 else
 {
-uint64 value;
+uint64 value = 0;
 
-GetUInt64(e, &value);
+if(GetUInt64(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintUInt64(value);
+exp->__anon1.__anon1.constant = PrintUInt64(value);
 exp->type = 2;
 }
+}
 break;
 case 22:
 if(type->isSigned)
 {
-intptr_t value;
+intptr_t value = 0;
 
-GetIntPtr(e, &value);
+if(GetIntPtr(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintInt64((long long)value);
+exp->__anon1.__anon1.constant = PrintInt64((long long)value);
 exp->type = 2;
 }
+}
 else
 {
-uintptr_t value;
+uintptr_t value = 0;
 
-GetUIntPtr(e, &value);
+if(GetUIntPtr(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintUInt64((uint64)value);
+exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
 exp->type = 2;
 }
+}
 break;
 case 23:
 if(type->isSigned)
 {
-ssize_t value;
+ssize_t value = 0;
 
-GetIntSize(e, &value);
+if(GetIntSize(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintInt64((long long)value);
+exp->__anon1.__anon1.constant = PrintInt64((long long)value);
 exp->type = 2;
 }
+}
 else
 {
-size_t value;
+size_t value = 0;
 
-GetUIntSize(e, &value);
+if(GetUIntSize(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintUInt64((uint64)value);
+exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
 exp->type = 2;
 }
+}
 break;
 case 6:
 {
-float value;
+float value = 0;
 
-GetFloat(e, &value);
+if(GetFloat(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintFloat(value);
+exp->__anon1.__anon1.constant = PrintFloat(value);
 exp->type = 2;
+}
 break;
 }
 case 7:
 {
-double value;
+double value = 0;
 
-GetDouble(e, &value);
+if(GetDouble(e, &value))
+{
 FreeExpContents(exp);
-exp->constant = PrintDouble(value);
+exp->__anon1.__anon1.constant = PrintDouble(value);
 exp->type = 2;
+}
 break;
 }
 }
@@ -11034,41 +12721,50 @@ break;
 }
 case 12:
 {
-struct Operand op1 = 
+struct Operand op1 =
 {
-0, 0, 0, 0, 
+0, 0, 0,
+.__anon1 = {
+.c = 0
+},
 {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 }
 };
-struct Operand op2 = 
+struct Operand op2 =
 {
-0, 0, 0, 0, 
+0, 0, 0,
+.__anon1 = {
+.c = 0
+},
 {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 }
 };
-struct Operand op3 = 
+struct Operand op3 =
 {
-0, 0, 0, 0, 
+0, 0, 0,
+.__anon1 = {
+.c = 0
+},
 {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 }
 };
 
-if(exp->cond.exp)
-ComputeExpression((*exp->cond.exp).last);
-if(exp->cond.elseExp)
-ComputeExpression(exp->cond.elseExp);
-if(exp->cond.cond)
-ComputeExpression(exp->cond.cond);
-op1 = GetOperand(exp->cond.cond);
+if(exp->__anon1.cond.exp)
+ComputeExpression((*exp->__anon1.cond.exp).last);
+if(exp->__anon1.cond.elseExp)
+ComputeExpression(exp->__anon1.cond.elseExp);
+if(exp->__anon1.cond.cond)
+ComputeExpression(exp->__anon1.cond.cond);
+op1 = GetOperand(exp->__anon1.cond.cond);
 if(op1.type)
 op1.type->refCount++;
-op2 = GetOperand((*exp->cond.exp).last);
+op2 = GetOperand((*exp->__anon1.cond.exp).last);
 if(op2.type)
 op2.type->refCount++;
-op3 = GetOperand(exp->cond.elseExp);
+op3 = GetOperand(exp->__anon1.cond.elseExp);
 if(op3.type)
 op3.type->refCount++;
 if(op1.ops.Cond)
@@ -11089,24 +12785,22 @@ break;
 
 void ApplyAnyObjectLogic(struct Expression * e);
 
-extern void CopyTypeInto(struct Type * type, struct Type * src);
-
-static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla)
+static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
 {
-unsigned int result = 0x1;
+unsigned int result = 1;
 
 if(destType)
 {
-struct __ecereNameSpace__ecere__sys__OldList converts = 
+struct __ecereNameSpace__ecere__sys__OldList converts =
 {
 0, 0, 0, 0, 0
 };
 struct Conversion * convert;
 
 if(destType->kind == 0)
-return 0x0;
-if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla))
-result = 0x0;
+return 0;
+if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
+result = 0;
 if(converts.count)
 {
 for(convert = converts.first; convert; convert = convert->next)
@@ -11119,47 +12813,49 @@ struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecere
 int objectType = exp->expType ? exp->expType->classObjectType : 0;
 
 *newExp = *exp;
+newExp->prev = (((void *)0));
+newExp->next = (((void *)0));
 newExp->destType = (((void *)0));
 if(convert->isGet)
 {
 exp->type = 8;
-exp->addedThis = 0x1;
-exp->member.exp = newExp;
-FreeType(exp->member.exp->expType);
-exp->member.exp->expType = MkClassType(convert->convert->_class->fullName);
-exp->member.exp->expType->classObjectType = objectType;
-exp->member.member = MkIdentifier(convert->convert->dataTypeString);
-exp->member.memberType = 1;
+exp->addedThis = 1;
+exp->__anon1.member.exp = newExp;
+FreeType(exp->__anon1.member.exp->expType);
+exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
+exp->__anon1.member.exp->expType->classObjectType = objectType;
+exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
+exp->__anon1.member.memberType = 1;
 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
-exp->needCast = 0x1;
+exp->needCast = 1;
 if(exp->expType)
 exp->expType->refCount++;
-ApplyAnyObjectLogic(exp->member.exp);
+ApplyAnyObjectLogic(exp->__anon1.member.exp);
 }
 else
 {
 {
 exp->type = 8;
-exp->addedThis = 0x1;
-exp->member.exp = newExp;
-if(newExp->expType && newExp->expType->kind == 8 && newExp->expType->_class && newExp->expType->_class->registered && newExp->expType->_class->registered->type == 5)
+exp->addedThis = 1;
+exp->__anon1.member.exp = newExp;
+if(newExp->expType && newExp->expType->kind == 8 && newExp->expType->__anon1._class && newExp->expType->__anon1._class->__anon1.registered && newExp->expType->__anon1._class->__anon1.registered->type == 5)
 {
-newExp->byReference = 0x1;
+newExp->byReference = 1;
 }
-FreeType(exp->member.exp->expType);
-exp->member.exp->expType = (((void *)0));
+FreeType(exp->__anon1.member.exp->expType);
+exp->__anon1.member.exp->expType = (((void *)0));
 if(convert->convert->dataType)
 {
-exp->member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
-CopyTypeInto(exp->member.exp->expType, convert->convert->dataType);
-exp->member.exp->expType->refCount = 1;
-exp->member.exp->expType->classObjectType = objectType;
-ApplyAnyObjectLogic(exp->member.exp);
+exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
+exp->__anon1.member.exp->expType->refCount = 1;
+exp->__anon1.member.exp->expType->classObjectType = objectType;
+ApplyAnyObjectLogic(exp->__anon1.member.exp);
 }
-exp->member.member = MkIdentifier(convert->convert->_class->fullName);
-exp->member.memberType = 4;
+exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
+exp->__anon1.member.memberType = 4;
 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
-exp->needCast = 0x1;
+exp->needCast = 1;
 if(convert->resultType)
 convert->resultType->refCount++;
 }
@@ -11171,14 +12867,16 @@ FreeType(exp->expType);
 if(convert->isGet)
 {
 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
-exp->needCast = 0x1;
+if(exp->destType->casted)
+exp->needCast = 1;
 if(exp->expType)
 exp->expType->refCount++;
 }
 else
 {
 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
-exp->needCast = 0x1;
+if(exp->destType->casted)
+exp->needCast = 1;
 if(convert->resultType)
 convert->resultType->refCount++;
 }
@@ -11190,17 +12888,19 @@ __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, FreeConvert)
 }
 if(!result && exp->expType && converts.count)
 {
-result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 0x1, 0x1, 0x0, 0x0);
+result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
 }
 if(!result && exp->expType && exp->destType)
 {
-if((exp->destType->kind == 8 && exp->expType->kind == 13 && exp->expType->type->kind == 8 && exp->expType->type->_class == exp->destType->_class && exp->destType->_class->registered && exp->destType->_class->registered->type == 1) || (exp->expType->kind == 8 && exp->destType->kind == 13 && exp->destType->type->kind == 8 && exp->destType->type->_class == exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->type == 1))
-result = 0x1;
+if((exp->destType->kind == 8 && exp->expType->kind == 13 && exp->expType->__anon1.type->kind == 8 && exp->expType->__anon1.type->__anon1._class == exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered->type == 1) || (exp->expType->kind == 8 && exp->destType->kind == 13 && exp->destType->__anon1.type->kind == 8 && exp->destType->__anon1.type->__anon1._class == exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1))
+result = 1;
 }
 }
 return result;
 }
 
+extern struct Expression * GetNonBracketsExp(struct Expression * exp);
+
 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);
@@ -11209,10 +12909,11 @@ extern struct Expression * MkExpMember(struct Expression * expression, struct Id
 
 void CheckTemplateTypes(struct Expression * exp)
 {
-if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate)
+struct Expression * nbExp = GetNonBracketsExp(exp);
+
+if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
 {
 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
-struct Statement * compound;
 struct Context * context;
 
 *newExp = *exp;
@@ -11231,7 +12932,7 @@ 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);
+((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
 }
 else
 {
@@ -11243,25 +12944,25 @@ context = PushContext();
 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);
+exp->type = 23;
+exp->__anon1.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;
+exp->__anon1.compound->__anon1.compound.context = context;
 PopContext(context);
 }
 break;
 default:
 exp->type = 11;
-exp->cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
-exp->cast.exp = MkExpBrackets(MkListOne(newExp));
+exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
+exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
+exp->needCast = 1;
 break;
 }
 }
 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
 {
 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
-struct Statement * compound;
 struct Context * context;
 
 *newExp = *exp;
@@ -11280,7 +12981,7 @@ 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);
+((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
 }
 else
 {
@@ -11292,29 +12993,31 @@ context = PushContext();
 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);
+exp->type = 23;
+exp->__anon1.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;
+exp->__anon1.compound->__anon1.compound.context = context;
 PopContext(context);
 }
 break;
 case 8:
 {
-if(exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->type == 1)
+if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
 {
 exp->type = 5;
-exp->list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->_class->string)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), newExp)));
-ProcessExpressionType((*exp->list).first);
+exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), newExp)));
+ProcessExpressionType((*exp->__anon1.list).first);
 break;
 }
 else
 {
 exp->type = 5;
-exp->list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->_class->string)), (((void *)0))), newExp));
-newExp->needCast = 0x1;
-ProcessExpressionType((*exp->list).first);
+exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
+exp->needTemplateCast = 2;
+newExp->needCast = 1;
+newExp->needTemplateCast = 2;
+ProcessExpressionType((*exp->__anon1.list).first);
 break;
 }
 }
@@ -11322,22 +13025,22 @@ default:
 {
 if(exp->expType->kind == 20)
 {
-struct Type * type = ProcessTemplateParameterType(exp->expType->templateParameter);
+struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
 
 if(type)
 {
 FreeType(exp->destType);
 FreeType(exp->expType);
-((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
 break;
 }
 }
-if(newExp->type == 8 && newExp->member.memberType == 3)
+if(newExp->type == 8 && newExp->__anon1.member.memberType == 3)
 {
 exp->type = 4;
-exp->op.op = '*';
-exp->op.exp1 = (((void *)0));
-exp->op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '&', newExp))));
+exp->__anon1.op.op = '*';
+exp->__anon1.op.exp1 = (((void *)0));
+exp->__anon1.op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '&', newExp))));
 }
 else
 {
@@ -11346,12 +13049,12 @@ struct Declarator * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
 typeString[0] = '\0';
-PrintType(exp->expType, typeString, 0x0, 0x0);
+PrintType(exp->expType, typeString, 00);
 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
 exp->type = 11;
-exp->cast.typeName = MkTypeName(specs, decl);
-exp->cast.exp = MkExpBrackets(MkListOne(newExp));
-exp->cast.exp->needCast = 0x1;
+exp->__anon1.cast.typeName = MkTypeName(specs, decl);
+exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
+exp->__anon1.cast.exp->needCast = 1;
 }
 break;
 }
@@ -11361,9 +13064,9 @@ break;
 
 extern int strncmp(const char * , const char * , size_t n);
 
-struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  key);
+struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char *  key);
 
-static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, char * nameSpace, char * name)
+static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
 {
 int nsLen = strlen(nameSpace);
 struct Symbol * symbol;
@@ -11392,18 +13095,18 @@ break;
 return (((void *)0));
 }
 
-static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, char * name)
+static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
 {
 int c;
 char nameSpace[1024];
-char * namePart;
-unsigned int gotColon = 0x0;
+const char * namePart;
+unsigned int gotColon = 0;
 
 nameSpace[0] = '\0';
 for(c = strlen(name) - 1; c >= 0; c--)
 if(name[c] == ':')
 {
-gotColon = 0x1;
+gotColon = 1;
 break;
 }
 namePart = name + c + 1;
@@ -11438,7 +13141,7 @@ return (((void *)0));
 
 static void ProcessDeclaration(struct Declaration * decl);
 
-struct Symbol * FindSymbol(char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
+struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
 {
 struct Context * ctx;
 struct Symbol * symbol = (((void *)0));
@@ -11465,24 +13168,24 @@ symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree
 if(symbol || ctx == endContext)
 break;
 }
-if(inCompiler && curExternal && symbol && ctx == globalContext && curExternal->symbol && symbol->id > curExternal->symbol->idCode && symbol->pointerExternal)
+if(inCompiler && curExternal && symbol && ctx == globalContext && curExternal->symbol && symbol->id > curExternal->symbol->idCode && symbol->__anon2.__anon1.pointerExternal)
 {
-if(symbol->pointerExternal->type == 0)
+if(symbol->__anon2.__anon1.pointerExternal->type == 0)
 {
-struct FunctionDefinition * function = symbol->pointerExternal->function;
+struct FunctionDefinition * function = symbol->__anon2.__anon1.pointerExternal->__anon1.function;
 struct Context * tmpContext = curContext;
 
 curContext = (((void *)0));
-symbol->pointerExternal = MkExternalDeclaration(MkDeclaration(CopyList(function->specifiers, CopySpecifier), MkListOne(MkInitDeclarator(CopyDeclarator(function->declarator), (((void *)0))))));
+symbol->__anon2.__anon1.pointerExternal = MkExternalDeclaration(MkDeclaration(CopyList(function->specifiers, CopySpecifier), MkListOne(MkInitDeclarator(CopyDeclarator(function->declarator), (((void *)0))))));
 curContext = tmpContext;
-symbol->pointerExternal->symbol = symbol;
-DeclareType(symbol->type, 0x1, 0x1);
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, symbol->pointerExternal);
+symbol->__anon2.__anon1.pointerExternal->symbol = symbol;
+DeclareType(symbol->type, 1, 1);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, symbol->__anon2.__anon1.pointerExternal);
 symbol->id = curExternal->symbol->idCode;
 }
-else if(symbol->pointerExternal->type == 1 && curExternal->symbol->idCode < symbol->pointerExternal->symbol->id)
+else if(symbol->__anon2.__anon1.pointerExternal->type == 1 && curExternal->symbol->idCode < symbol->__anon2.__anon1.pointerExternal->symbol->id)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->pointerExternal, curExternal->prev);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
 symbol->id = curExternal->symbol->idCode;
 }
 }
@@ -11497,11 +13200,11 @@ switch(type->kind)
 {
 case 8:
 {
-if(type->_class->registered)
+if(type->__anon1._class->__anon1.registered)
 {
-if(!type->_class->registered->dataType)
-type->_class->registered->dataType = ProcessTypeString(type->_class->registered->dataTypeString, 0x0);
-GetTypeSpecs(type->_class->registered->dataType, specs);
+if(!type->__anon1._class->__anon1.registered->dataType)
+type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
+GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
 }
 break;
 }
@@ -11514,6 +13217,9 @@ break;
 case 1:
 ListAdd(specs, MkSpecifier(CHAR));
 break;
+case 24:
+ListAdd(specs, MkSpecifier(_BOOL));
+break;
 case 2:
 ListAdd(specs, MkSpecifier(SHORT));
 break;
@@ -11539,10 +13245,10 @@ char size[256];
 
 size[0] = '\0';
 strcat(size, "[");
-if(arrayType->enumClass)
-strcat(size, arrayType->enumClass->string);
-else if(arrayType->arraySizeExp)
-PrintExpression(arrayType->arraySizeExp, size);
+if(arrayType->__anon1.__anon4.enumClass)
+strcat(size, arrayType->__anon1.__anon4.enumClass->string);
+else if(arrayType->__anon1.__anon4.arraySizeExp)
+PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
 strcat(size, "]");
 strcat(string, size);
 }
@@ -11557,7 +13263,7 @@ switch(type->kind)
 {
 case 8:
 {
-struct Symbol * c = type->_class;
+struct Symbol * c = type->__anon1._class;
 
 if(type->classObjectType == 2)
 strcat(string, "typed_object");
@@ -11566,7 +13272,7 @@ strcat(string, "any_object");
 else
 {
 if(c && c->string)
-strcat(string, (fullName || !c->registered) ? c->string : c->registered->name);
+strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
 }
 if(type->byReference)
 strcat(string, " &");
@@ -11590,6 +13296,9 @@ break;
 case 1:
 strcat(string, type->isSigned ? "char" : "byte");
 break;
+case 24:
+strcat(string, "_Bool");
+break;
 case 2:
 strcat(string, type->isSigned ? "short" : "uint16");
 break;
@@ -11600,10 +13309,10 @@ case 7:
 strcat(string, "double");
 break;
 case 9:
-if(type->enumName)
+if(type->__anon1.__anon1.enumName)
 {
 strcat(string, "struct ");
-strcat(string, type->enumName);
+strcat(string, type->__anon1.__anon1.enumName);
 }
 else if(type->typeName)
 strcat(string, type->typeName);
@@ -11612,19 +13321,19 @@ else
 struct Type * member;
 
 strcat(string, "struct { ");
-for(member = type->members.first; member; member = member->next)
+for(member = type->__anon1.__anon1.members.first; member; member = member->next)
 {
-PrintType(member, string, 0x1, fullName);
+PrintType(member, string, 1, fullName);
 strcat(string, "; ");
 }
 strcat(string, "}");
 }
 break;
 case 10:
-if(type->enumName)
+if(type->__anon1.__anon1.enumName)
 {
 strcat(string, "union ");
-strcat(string, type->enumName);
+strcat(string, type->__anon1.__anon1.enumName);
 }
 else if(type->typeName)
 strcat(string, type->typeName);
@@ -11635,10 +13344,10 @@ strcat(string, "(unnamed)");
 }
 break;
 case 15:
-if(type->enumName)
+if(type->__anon1.__anon1.enumName)
 {
 strcat(string, "enum ");
-strcat(string, type->enumName);
+strcat(string, type->__anon1.__anon1.enumName);
 }
 else if(type->typeName)
 strcat(string, type->typeName);
@@ -11650,11 +13359,11 @@ strcat(string, "...");
 break;
 case 19:
 strcat(string, "subclass(");
-strcat(string, type->_class ? type->_class->string : "int");
+strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
 strcat(string, ")");
 break;
 case 20:
-strcat(string, type->templateParameter->identifier->string);
+strcat(string, type->__anon1.templateParameter->identifier->string);
 break;
 case 21:
 strcat(string, "thisclass");
@@ -11666,7 +13375,7 @@ break;
 }
 }
 
-extern char *  __ecereNameSpace__ecere__sys__RSearchString(char *  buffer, char *  subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
+extern char *  __ecereNameSpace__ecere__sys__RSearchString(const char *  buffer, const char *  subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
 
 static void PrintName(struct Type * type, char * string, unsigned int fullName)
 {
@@ -11676,7 +13385,7 @@ if(fullName)
 strcat(string, type->name);
 else
 {
-char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 0x1, 0x0);
+char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
 
 if(name)
 name += 2;
@@ -11702,23 +13411,21 @@ static void PrePrintType(struct Type * type, char * string, unsigned int fullNam
 {
 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
 {
-struct Type * attrType = (((void *)0));
-
 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
 PrintAttribs(type, string);
 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
 strcat(string, " const");
-PrePrintType(type->kind == 16 ? type->method->dataType : type->type, string, fullName, type, printConst);
-if(type->kind == 13 && (type->type->kind == 12 || type->type->kind == 11 || type->type->kind == 16))
+PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
+if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
 strcat(string, " (");
 if(type->kind == 13)
 {
-if(type->type->kind == 11 || type->type->kind == 16)
-PrintAttribs(type->type, string);
+if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
+PrintAttribs(type->__anon1.type, string);
 }
 if(type->kind == 13)
 {
-if(type->type->kind == 11 || type->type->kind == 16 || type->type->kind == 12)
+if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
 strcat(string, "*");
 else
 strcat(string, " *");
@@ -11732,7 +13439,7 @@ PrintTypeSpecs(type, string, fullName, printConst);
 
 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
 {
-if(type->kind == 13 && (type->type->kind == 12 || type->type->kind == 11 || type->type->kind == 16))
+if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
 strcat(string, ")");
 if(type->kind == 12)
 PrintArraySize(type, string);
@@ -11741,26 +13448,26 @@ else if(type->kind == 11)
 struct Type * param;
 
 strcat(string, "(");
-for(param = type->params.first; param; param = param->next)
+for(param = type->__anon1.__anon2.params.first; param; param = param->next)
 {
-PrintType(param, string, 0x1, fullName);
+PrintType(param, string, 1, fullName);
 if(param->next)
 strcat(string, ", ");
 }
 strcat(string, ")");
 }
 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
-PostPrintType(type->kind == 16 ? type->method->dataType : type->type, string, fullName);
+PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
 }
 
 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
 {
 PrePrintType(type, string, fullName, (((void *)0)), printConst);
-if(type->thisClass || (printName && type->name && type->name[0]))
+if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
 strcat(string, " ");
-if((type->thisClass || type->staticMethod))
+if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
 {
-struct Symbol * _class = type->thisClass;
+struct Symbol * _class = type->__anon1.__anon2.thisClass;
 
 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
 {
@@ -11777,7 +13484,7 @@ if(fullName)
 strcat(string, s);
 else
 {
-char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 0x1, 0x0);
+char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
 
 if(name)
 name += 2;
@@ -11802,19 +13509,19 @@ strcat(string, count);
 
 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
 {
-_PrintType(type, string, printName, fullName, 0x1);
+_PrintType(type, string, printName, fullName, 1);
 }
 
 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
 {
-_PrintType(type, string, printName, fullName, 0x0);
+_PrintType(type, string, printName, fullName, 0);
 }
 
 static struct Type * FindMember(struct Type * type, char * string)
 {
 struct Type * memberType;
 
-for(memberType = type->members.first; memberType; memberType = memberType->next)
+for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
 {
 if(!memberType->name)
 {
@@ -11833,7 +13540,7 @@ struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned in
 {
 struct Type * memberType;
 
-for(memberType = type->members.first; memberType; memberType = memberType->next)
+for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
 {
 if(!memberType->name)
 {
@@ -11854,16 +13561,34 @@ return memberType;
 return (((void *)0));
 }
 
+extern unsigned int parseError;
+
+unsigned int GetParseError()
+{
+return parseError;
+}
+
 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
 
 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
 
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
+
 struct Expression * ParseExpressionString(char * expression)
 {
+parseError = 0;
 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
-((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))fileInput->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))fileInput->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
-echoOn = 0x0;
+((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
+echoOn = 0;
 parsedExpression = (((void *)0));
 resetScanner();
 expression_yyparse();
@@ -11871,11 +13596,11 @@ expression_yyparse();
 return parsedExpression;
 }
 
-extern char *  QMkString(char *  source);
+extern char *  QMkString(const char *  source);
 
 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
 {
-struct Identifier * id = exp->identifier;
+struct Identifier * id = exp->__anon1.__anon1.identifier;
 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
@@ -11883,7 +13608,7 @@ struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
 
 if(_class && _class->type == 4)
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * value = (((void *)0));
+struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
 
 if(enumClass)
@@ -11905,19 +13630,19 @@ char constant[256];
 
 FreeExpContents(exp);
 exp->type = 2;
-exp->isConstant = 0x1;
-if(!strcmp(baseClass->dataTypeString, "int"))
-sprintf(constant, "%d", (int)value->data);
+exp->isConstant = 1;
+if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
+sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
 else
-sprintf(constant, "0x%X", (int)value->data);
-exp->constant = __ecereNameSpace__ecere__sys__CopyString(constant);
+sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
+exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
 exp->expType = MkClassType(baseClass->fullName);
 break;
 }
 }
 }
 if(value)
-return 0x1;
+return 1;
 }
 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
 {
@@ -11925,9 +13650,9 @@ ProcessMethodType(method);
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->method = method, __ecereInstance1->methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
 });
-return 0x1;
+return 1;
 }
 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
 {
@@ -11936,29 +13661,29 @@ ProcessPropertyType(prop);
 exp->expType = prop->dataType;
 if(prop->dataType)
 prop->dataType->refCount++;
-return 0x1;
+return 1;
 }
 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
 {
 if(!member->dataType)
-member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
+member->dataType = ProcessTypeString(member->dataTypeString, 0);
 exp->expType = member->dataType;
 if(member->dataType)
 member->dataType->refCount++;
-return 0x1;
+return 1;
 }
 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
 {
 if(!classProp->dataType)
-classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0x0);
+classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
 if(classProp->constant)
 {
 FreeExpContents(exp);
-exp->isConstant = 0x1;
-if(classProp->dataType->kind == 13 && classProp->dataType->type->kind == 1)
+exp->isConstant = 1;
+if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
 {
 exp->type = 3;
-exp->constant = QMkString((char *)classProp->Get(_class));
+exp->__anon1.__anon1.constant = QMkString((char *)classProp->Get(_class));
 }
 else
 {
@@ -11966,7 +13691,7 @@ char constant[256];
 
 exp->type = 2;
 sprintf(constant, "%d", (int)classProp->Get(_class));
-exp->constant = __ecereNameSpace__ecere__sys__CopyString(constant);
+exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
 }
 }
 else
@@ -11975,9 +13700,9 @@ else
 exp->expType = classProp->dataType;
 if(classProp->dataType)
 classProp->dataType->refCount++;
-return 0x1;
+return 1;
 }
-return 0x0;
+return 0;
 }
 
 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
@@ -12046,14 +13771,14 @@ FreeExpContents(checkedExp);
 FreeType(checkedExp->expType);
 FreeType(checkedExp->destType);
 *checkedExp = *newExp;
-((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
 checkedExp->prev = prev;
 checkedExp->next = next;
 }
 
 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
 
-extern int printf(char * , ...);
+extern int printf(const char * , ...);
 
 void __ecereMethod_Expression_Clear();
 
@@ -12068,48 +13793,48 @@ if(e && e->expType)
 struct Type * type = e->expType;
 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
 
-if(type->kind == 8 && type->_class && type->_class->registered)
+if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
 {
-_class = type->_class->registered;
+_class = type->__anon1._class->__anon1.registered;
 }
 else if(type->kind == 19)
 {
-_class = FindClass("ecere::com::Class")->registered;
+_class = FindClass("ecere::com::Class")->__anon1.registered;
 }
 else
 {
 char string[1024] = "";
 struct Symbol * classSym;
 
-PrintTypeNoConst(type, string, 0x0, 0x1);
+PrintTypeNoConst(type, string, 01);
 classSym = FindClass(string);
 if(classSym)
-_class = classSym->registered;
+_class = classSym->__anon1.registered;
 }
-if((_class && (_class->type == 4 || _class->type == 3 || _class->type == 2 || _class->type == 1000) && strcmp(_class->fullName, "class") && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr")) || (!e->expType->classObjectType && (((type->kind != 13 && type->kind != 22 && type->kind != 19 && (type->kind != 8 || !type->_class || !type->_class->registered || type->_class->registered->type == 1))) || destType->byReference)))
+if((_class && (_class->type == 4 || _class->type == 3 || _class->type == 2 || _class->type == 1000) && strcmp(_class->fullName, "class") && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr")) || (!e->expType->classObjectType && (((type->kind != 13 && type->kind != 22 && type->kind != 19 && (type->kind != 8 || !type->__anon1._class || !type->__anon1._class->__anon1.registered || type->__anon1._class->__anon1.registered->type == 1))) || destType->byReference)))
 {
 if(!_class || strcmp(_class->fullName, "char *"))
 {
 struct Expression * checkedExp = e, * newExp;
 
-while(((checkedExp->type == 5 || checkedExp->type == 34 || checkedExp->type == 25) && checkedExp->list) || checkedExp->type == 11)
+while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
 {
-if(checkedExp->type == 5 || checkedExp->type == 34 || checkedExp->type == 25)
+if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
 {
-if(checkedExp->type == 25)
+if(checkedExp->type == 23)
 {
-checkedExp = (*((struct Statement *)(*checkedExp->compound->compound.statements).last)->expressions).last;
+checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
 }
 else
-checkedExp = (*checkedExp->list).last;
+checkedExp = (*checkedExp->__anon1.list).last;
 }
 else if(checkedExp->type == 11)
-checkedExp = checkedExp->cast.exp;
+checkedExp = checkedExp->__anon1.cast.exp;
 }
-if(checkedExp && checkedExp->type == 4 && checkedExp->op.op == '*' && !checkedExp->op.exp1)
+if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
 {
-newExp = checkedExp->op.exp2;
-checkedExp->op.exp2 = (((void *)0));
+newExp = checkedExp->__anon1.op.exp2;
+checkedExp->__anon1.op.exp2 = (((void *)0));
 FreeExpContents(checkedExp);
 if(e->expType && e->expType->passAsTemplate)
 {
@@ -12120,14 +13845,14 @@ sprintf(size, "%d", e->expType->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;
+e->byReference = 1;
 }
 else if(!e->byReference || (_class && _class->type == 5))
 {
-struct Expression * checkedExp, * newExp;
+struct Expression * checkedExp;
 
 {
-unsigned int hasAddress = e->type == 0 || (e->type == 8 && e->member.memberType == 3) || (e->type == 9 && e->member.memberType == 3) || (e->type == 4 && !e->op.exp1 && e->op.op == '*') || e->type == 6;
+unsigned int hasAddress = e->type == 0 || (e->type == 8 && e->__anon1.member.memberType == 3) || (e->type == 9 && e->__anon1.member.memberType == 3) || (e->type == 4 && !e->__anon1.op.exp1 && e->__anon1.op.op == '*') || e->type == 6;
 
 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
 {
@@ -12142,7 +13867,7 @@ typeString[0] = '\0';
 newExp->prev = (((void *)0));
 newExp->next = (((void *)0));
 newExp->expType = (((void *)0));
-PrintTypeNoConst(e->expType, typeString, 0x0, 0x1);
+PrintTypeNoConst(e->expType, typeString, 01);
 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
 newExp->destType = ProcessType(specs, decl);
 curContext = context;
@@ -12151,14 +13876,14 @@ if(curCompound)
 char name[100];
 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
 
-e->type = 25;
+e->type = 23;
 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))))));
+if(!curCompound->__anon1.compound.declarations)
+curCompound->__anon1.compound.declarations = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.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);
+e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
 }
 else
 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
@@ -12171,37 +13896,38 @@ e->destType->refCount = 1;
 e->destType->classObjectType = 0;
 FreeType(type);
 }
-e->compound->compound.context = context;
+e->__anon1.compound->__anon1.compound.context = context;
 PopContext(context);
 curContext = context->parent;
 }
 }
 checkedExp = e;
-while(((checkedExp->type == 5 || checkedExp->type == 34 || checkedExp->type == 25) && checkedExp->list) || checkedExp->type == 11)
+while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
 {
-if(checkedExp->type == 5 || checkedExp->type == 34 || checkedExp->type == 25)
+if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
 {
-if(checkedExp->type == 25)
+if(checkedExp->type == 23)
 {
-checkedExp = (*((struct Statement *)(*checkedExp->compound->compound.statements).last)->expressions).last;
+checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
 }
 else
-checkedExp = (*checkedExp->list).last;
+checkedExp = (*checkedExp->__anon1.list).last;
 }
 else if(checkedExp->type == 11)
-checkedExp = checkedExp->cast.exp;
+checkedExp = checkedExp->__anon1.cast.exp;
 }
 {
 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
 
 *operand = *checkedExp;
-checkedExp->destType = (((void *)0));
-checkedExp->expType = (((void *)0));
 __ecereMethod_Expression_Clear(checkedExp);
+checkedExp->destType = ProcessTypeString("void *", 0);
+checkedExp->expType = checkedExp->destType;
+checkedExp->destType->refCount++;
 checkedExp->type = 4;
-checkedExp->op.op = '&';
-checkedExp->op.exp1 = (((void *)0));
-checkedExp->op.exp2 = operand;
+checkedExp->__anon1.op.op = '&';
+checkedExp->__anon1.op.exp1 = (((void *)0));
+checkedExp->__anon1.op.exp2 = operand;
 }
 }
 }
@@ -12210,7 +13936,7 @@ checkedExp->op.exp2 = operand;
 }
 {
 }
-if((!destType || destType->kind == 14 || destType->kind == 0) && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && (e->expType->byReference || (e->expType->kind == 8 && e->expType->_class && e->expType->_class->registered && (e->expType->_class->registered->type == 2 || e->expType->_class->registered->type == 4 || e->expType->_class->registered->type == 3))))
+if((!destType || destType->kind == 14 || destType->kind == 0) && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && (e->expType->byReference || (e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && (e->expType->__anon1._class->__anon1.registered->type == 2 || e->expType->__anon1._class->__anon1.registered->type == 4 || e->expType->__anon1._class->__anon1.registered->type == 3))))
 {
 if(e->expType->classObjectType && destType && destType->classObjectType)
 {
@@ -12225,15 +13951,15 @@ thisExp->prev = (((void *)0));
 thisExp->next = (((void *)0));
 __ecereMethod_Expression_Clear(e);
 e->type = 5;
-e->list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
-if(thisExp->expType->kind == 8 && thisExp->expType->_class && thisExp->expType->_class->registered && thisExp->expType->_class->registered->type == 5)
-((struct Expression *)(*e->list).first)->byReference = 0x1;
+e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
+if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
+((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
 {
 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 CopyTypeInto(e->expType, thisExp->expType);
-e->expType->byReference = 0x0;
+e->expType->byReference = 0;
 e->expType->refCount = 1;
-if(e->expType->kind == 8 && e->expType->_class && e->expType->_class->registered && (e->expType->_class->registered->type == 2 || e->expType->_class->registered->type == 4 || e->expType->_class->registered->type == 3))
+if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && (e->expType->__anon1._class->__anon1.registered->type == 2 || e->expType->__anon1._class->__anon1.registered->type == 4 || e->expType->__anon1._class->__anon1.registered->type == 3))
 {
 e->expType->classObjectType = 0;
 }
@@ -12244,9 +13970,9 @@ else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expTyp
 {
 if(destType->kind == 14)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Unspecified type\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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))
+else if(!(destType->truth && e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && e->expType->__anon1._class->__anon1.registered->type == 1))
 {
 unsigned int byReference = e->expType->byReference;
 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
@@ -12257,16 +13983,16 @@ struct Type * type;
 int backupClassObjectType;
 unsigned int backupByReference;
 
-if(e->expType->kind == 8 && e->expType->_class && e->expType->_class->registered && strcmp(e->expType->_class->registered->name, "class"))
+if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
 type = e->expType;
 else
 type = destType;
 backupClassObjectType = type->classObjectType;
 backupByReference = type->byReference;
 type->classObjectType = 0;
-type->byReference = 0x0;
+type->byReference = 0;
 typeString[0] = '\0';
-PrintType(type, typeString, 0x0, 0x1);
+PrintType(type, typeString, 01);
 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
 type->classObjectType = backupClassObjectType;
 type->byReference = backupByReference;
@@ -12274,28 +14000,105 @@ type->byReference = backupByReference;
 thisExp->prev = (((void *)0));
 thisExp->next = (((void *)0));
 __ecereMethod_Expression_Clear(e);
-if((type->kind == 8 && type->_class && type->_class->registered && (type->_class->registered->type == 1000 || type->_class->registered->type == 2 || type->_class->registered->type == 4 || type->_class->registered->type == 3)) || (type->kind != 13 && type->kind != 22 && type->kind != 12 && type->kind != 8) || (!destType->byReference && byReference && (destType->kind != 13 || type->kind != 13)))
+if((type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && (type->__anon1._class->__anon1.registered->type == 1000 || type->__anon1._class->__anon1.registered->type == 2 || type->__anon1._class->__anon1.registered->type == 4 || type->__anon1._class->__anon1.registered->type == 3)) || (type->kind != 13 && type->kind != 22 && type->kind != 12 && type->kind != 8) || (!destType->byReference && byReference && (destType->kind != 13 || type->kind != 13)))
 {
 e->type = 4;
-e->op.op = '*';
-e->op.exp1 = (((void *)0));
-e->op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
+e->__anon1.op.op = '*';
+e->__anon1.op.exp1 = (((void *)0));
+e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
+e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+CopyTypeInto(e->expType, type);
+e->expType->byReference = 0;
+e->expType->refCount = 1;
 }
 else
 {
 e->type = 11;
-e->cast.typeName = MkTypeName(specs, decl);
-e->cast.exp = thisExp;
-e->byReference = 0x1;
-}
+e->__anon1.cast.typeName = MkTypeName(specs, decl);
+e->__anon1.cast.exp = thisExp;
+e->byReference = 1;
 e->expType = type;
-e->destType = destType;
 type->refCount++;
+}
+e->destType = destType;
 destType->refCount++;
 }
 }
 }
 
+void ApplyLocation(struct Expression * exp, struct Location * loc)
+{
+exp->loc = *loc;
+switch(exp->type)
+{
+case 4:
+if(exp->__anon1.op.exp1)
+ApplyLocation(exp->__anon1.op.exp1, loc);
+if(exp->__anon1.op.exp2)
+ApplyLocation(exp->__anon1.op.exp2, loc);
+break;
+case 5:
+if(exp->__anon1.list)
+{
+struct Expression * e;
+
+for(e = (*exp->__anon1.list).first; e; e = e->next)
+ApplyLocation(e, loc);
+}
+break;
+case 6:
+if(exp->__anon1.index.index)
+{
+struct Expression * e;
+
+for(e = (*exp->__anon1.index.index).first; e; e = e->next)
+ApplyLocation(e, loc);
+}
+if(exp->__anon1.index.exp)
+ApplyLocation(exp->__anon1.index.exp, loc);
+break;
+case 7:
+if(exp->__anon1.call.arguments)
+{
+struct Expression * arg;
+
+for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
+ApplyLocation(arg, loc);
+}
+if(exp->__anon1.call.exp)
+ApplyLocation(exp->__anon1.call.exp, loc);
+break;
+case 8:
+case 9:
+if(exp->__anon1.member.exp)
+ApplyLocation(exp->__anon1.member.exp, loc);
+break;
+case 11:
+if(exp->__anon1.cast.exp)
+ApplyLocation(exp->__anon1.cast.exp, loc);
+break;
+case 12:
+if(exp->__anon1.cond.exp)
+{
+struct Expression * e;
+
+for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
+ApplyLocation(e, loc);
+}
+if(exp->__anon1.cond.cond)
+ApplyLocation(exp->__anon1.cond.cond, loc);
+if(exp->__anon1.cond.elseExp)
+ApplyLocation(exp->__anon1.cond.elseExp, loc);
+break;
+case 34:
+if(exp->__anon1.vaArg.exp)
+ApplyLocation(exp->__anon1.vaArg.exp, loc);
+break;
+default:
+break;
+}
+}
+
 extern char *  strstr(const char * , const char * );
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
@@ -12304,25 +14107,21 @@ struct __ecereNameSpace__ecere__com__DefinedExpression
 {
 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
-char *  name;
-char *  value;
+const char *  name;
+const 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);
+extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
 
-extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, char *  name);
+extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
 
-extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(char *  string, int *  numBytes);
+extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(const char *  string, int *  numBytes);
 
 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
 
 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
 
-extern struct Expression * CopyExpression(struct Expression * exp);
-
-extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
-
 extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldList *  specifiers, struct Declarator * decl);
 
 static void ProcessStatement(struct Statement * stmt);
@@ -12331,17 +14130,21 @@ extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName,
 
 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
 
-extern char *  __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, void * object, ...);
+extern char *  __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
+
+extern const char *  sourceFile;
 
-extern char *  sourceFile;
+unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp_Type_specConst;
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
 
 void ProcessExpressionType(struct Expression * exp)
 {
-unsigned int unresolved = 0x0;
+unsigned int unresolved = 0;
 struct Location oldyylloc = yylloc;
-unsigned int notByReference = 0x0;
+unsigned int notByReference = 0;
 
 if(!exp || exp->expType)
 return ;
@@ -12350,20 +14153,25 @@ switch(exp->type)
 {
 case 0:
 {
-struct Identifier * id = exp->identifier;
+struct Identifier * id = exp->__anon1.__anon1.identifier;
 
-if(!id)
+if(!id || !topContext)
 return ;
-if(id->_class && id->_class->name)
+if(id->_class && id->_class->__anon1.__anon1.name)
+{
+id->classSym = id->_class->__anon1.__anon1.symbol;
+}
+if(!strcmp(id->string, "__runtimePlatform"))
 {
-id->classSym = id->_class->symbol;
+exp->expType = ProcessTypeString("ecere::com::Platform", 1);
+break;
 }
-if(strstr(id->string, "__ecereClass") == id->string)
+else if(strstr(id->string, "__ecereClass") == id->string)
 {
-exp->expType = ProcessTypeString("ecere::com::Class", 0x1);
+exp->expType = ProcessTypeString("ecere::com::Class", 1);
 break;
 }
-else if(id->_class && (id->classSym || (id->_class->name && !strcmp(id->_class->name, "property"))))
+else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
 {
 ReplaceClassMembers(exp, thisClass);
 if(exp->type != 0)
@@ -12371,16 +14179,16 @@ if(exp->type != 0)
 ProcessExpressionType(exp);
 break;
 }
-if(id->classSym && ResolveIdWithClass(exp, id->classSym->registered, 0x0))
+if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
 break;
 }
 else
 {
-struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0x0, id->_class && id->_class->name == (((void *)0)));
+struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
 
 if(!symbol)
 {
-if(exp->destType && CheckExpressionType(exp, exp->destType, 0x0))
+if(exp->destType && CheckExpressionType(exp, exp->destType, 00))
 break;
 else
 {
@@ -12395,16 +14203,16 @@ break;
 }
 else if(currentClass && !id->_class)
 {
-if(ResolveIdWithClass(exp, currentClass, 0x1))
+if(ResolveIdWithClass(exp, currentClass, 1))
 break;
 }
-symbol = FindSymbol(id->string, topContext->parent, globalContext, 0x0, id->_class && id->_class->name == (((void *)0)));
+symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
 }
 }
 if(symbol)
 {
 struct Type * type = symbol->type;
-struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->_class) ? type->_class->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
 
 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
 {
@@ -12423,29 +14231,29 @@ id->classSym = (((void *)0));
 exp->expType = type;
 if(type)
 type->refCount++;
-if(type && (type->kind == 15 || (_class && _class->type == 4)))
-exp->isConstant = 0x1;
+if(type && (type->kind == 15))
+exp->isConstant = 1;
 if(symbol->isParam || !strcmp(id->string, "this"))
 {
 if(_class && _class->type == 1 && !type->declaredWithStruct)
-exp->byReference = 0x1;
+exp->byReference = 1;
 }
 if(symbol->isIterator)
 {
 if(symbol->isIterator == 3)
 {
 exp->type = 5;
-exp->list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->identifier)));
-((struct Expression *)(*exp->list).first)->op.exp2->expType = exp->expType;
+exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
+((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
 exp->expType = (((void *)0));
 ProcessExpressionType(exp);
 }
 else if(symbol->isIterator != 4)
 {
 exp->type = 8;
-exp->member.exp = MkExpIdentifier(exp->identifier);
-exp->member.exp->expType = exp->expType;
-exp->member.member = MkIdentifier("data");
+exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
+exp->__anon1.member.exp->expType = exp->expType;
+exp->__anon1.member.member = MkIdentifier("data");
 exp->expType = (((void *)0));
 ProcessExpressionType(exp);
 }
@@ -12456,7 +14264,7 @@ else
 {
 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
 
-if(thisNameSpace && !(id->_class && !id->_class->name))
+if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
 {
 char name[1024];
 
@@ -12474,26 +14282,37 @@ int c;
 for(c = 0; c < definedExpStackPos; c++)
 if(definedExpStack[c] == definedExp)
 break;
-if(c == definedExpStackPos && c < sizeof definedExpStack / sizeof(void *))
+if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
 {
 struct Location backupYylloc = yylloc;
+struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
 
 definedExpStack[definedExpStackPos++] = definedExp;
 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
-((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))fileInput->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))fileInput->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
-echoOn = 0x0;
+((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
+struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
+
+__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
+})[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
+echoOn = 0;
 parsedExpression = (((void *)0));
 resetScanner();
 expression_yyparse();
 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
+if(backInput)
+fileInput = backInput;
 yylloc = backupYylloc;
 if(parsedExpression)
 {
 FreeIdentifier(id);
 exp->type = 5;
-exp->list = MkListOne(parsedExpression);
-parsedExpression->loc = yylloc;
+exp->__anon1.list = MkListOne(parsedExpression);
+ApplyLocation(parsedExpression, &yylloc);
 ProcessExpressionType(exp);
 definedExpStackPos--;
 return ;
@@ -12504,7 +14323,7 @@ else
 {
 if(inCompiler)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Recursion in defined expression %s\n", (((void *)0))), id->string);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
 }
 }
 }
@@ -12512,7 +14331,7 @@ else
 {
 struct GlobalData * data = (((void *)0));
 
-if(thisNameSpace && !(id->_class && !id->_class->name))
+if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
 {
 char name[1024];
 
@@ -12539,7 +14358,7 @@ else
 {
 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
 
-if(thisNameSpace && !(id->_class && !id->_class->name))
+if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
 {
 char name[1024];
 
@@ -12559,7 +14378,7 @@ id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
 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, id->string, 0x0);
+FullClassNameCat(name, id->string, 0);
 if(DeclareFunction(function, name))
 {
 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
@@ -12576,25 +14395,23 @@ break;
 }
 }
 }
-unresolved = 0x1;
+unresolved = 1;
 break;
 }
 case 1:
 {
-struct __ecereNameSpace__ecere__com__Class * _class;
-
-if(!exp->instance->_class)
+if(!exp->__anon1.instance->_class)
 {
-if(exp->destType && exp->destType->kind == 8 && exp->destType->_class)
+if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
 {
-exp->instance->_class = MkSpecifierName(exp->destType->_class->string);
+exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
 }
 }
-ProcessInstantiationType(exp->instance);
-exp->isConstant = exp->instance->isConstant;
-if(exp->instance->_class)
+ProcessInstantiationType(exp->__anon1.instance);
+exp->isConstant = exp->__anon1.instance->isConstant;
+if(exp->__anon1.instance->_class)
 {
-exp->expType = MkClassType(exp->instance->_class->name);
+exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
 }
 break;
 }
@@ -12602,53 +14419,89 @@ case 2:
 {
 if(!exp->expType)
 {
-struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 0x1, type);
+char * constant = exp->__anon1.__anon1.constant;
+struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
 
 exp->expType = type;
-if(exp->constant[0] == '\'')
+if(constant[0] == '\'')
 {
-if((int)((unsigned char *)exp->constant)[1] > 127)
+if((int)((unsigned char *)constant)[1] > 127)
 {
 int nb;
-unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(exp->constant + 1, &nb);
+unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
 
 if(nb < 2)
-ch = exp->constant[1];
-(__ecereNameSpace__ecere__com__eSystem_Delete(exp->constant), exp->constant = 0);
-exp->constant = PrintUInt(ch);
+ch = constant[1];
+(__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
+exp->__anon1.__anon1.constant = PrintUInt(ch);
 type->kind = 8;
-type->_class = FindClass("unichar");
-type->isSigned = 0x0;
+type->__anon1._class = FindClass("unichar");
+type->isSigned = 0;
 }
 else
 {
 type->kind = 1;
-type->isSigned = 0x1;
+type->isSigned = 1;
 }
 }
-else if(strchr(exp->constant, '.'))
+else
 {
-char ch = exp->constant[strlen(exp->constant) - 1];
+char * dot = strchr(constant, '.');
+unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
+char * exponent;
 
-if(ch == 'f')
+if(isHex)
+{
+exponent = strchr(constant, 'p');
+if(!exponent)
+exponent = strchr(constant, 'P');
+}
+else
+{
+exponent = strchr(constant, 'e');
+if(!exponent)
+exponent = strchr(constant, 'E');
+}
+if(dot || exponent)
+{
+if(strchr(constant, 'f') || strchr(constant, 'F'))
 type->kind = 6;
 else
 type->kind = 7;
-type->isSigned = 0x1;
+type->isSigned = 1;
 }
 else
 {
-if(exp->constant[0] == '0' && exp->constant[1])
-type->isSigned = 0x0;
-else if(strchr(exp->constant, 'L') || strchr(exp->constant, 'l'))
-type->isSigned = 0x0;
-else if(strtoll(exp->constant, (((void *)0)), 0) > (((int)0x7fffffff)))
-type->isSigned = 0x0;
+unsigned int isSigned = constant[0] == '-';
+char * endP = (((void *)0));
+long long i64 = strtoll(constant, &endP, 0);
+uint64 ui64 = strtoull(constant, &endP, 0);
+unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll"));
+
+if(isSigned)
+{
+if(i64 < (((int)0x80000000)))
+is64Bit = 1;
+}
 else
-type->isSigned = 0x1;
-type->kind = 3;
+{
+if(ui64 > (((int)0x7fffffff)))
+{
+if(ui64 > (0xffffffff))
+{
+is64Bit = 1;
+if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
+isSigned = 1;
+}
 }
-exp->isConstant = 0x1;
+else if(constant[0] != '0' || !constant[1])
+isSigned = 1;
+}
+type->kind = is64Bit ? 4 : 3;
+type->isSigned = isSigned;
+}
+}
+exp->isConstant = 1;
 if(exp->destType && exp->destType->kind == 7)
 type->kind = 7;
 else if(exp->destType && exp->destType->kind == 6)
@@ -12660,49 +14513,50 @@ break;
 }
 case 3:
 {
-exp->isConstant = 0x1;
+exp->isConstant = 1;
 exp->expType = __extension__ ({
 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->type = __extension__ ({
+__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 1, __ecereInstance1->constant = 0x1, __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = 1, __ecereInstance1;
 }), __ecereInstance2;
 });
 break;
 }
 case 13:
-case 28:
-ProcessExpressionType(exp->_new.size);
+case 26:
+ProcessExpressionType(exp->__anon1._new.size);
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->type = ProcessType(exp->_new.typeName->qualifiers, exp->_new.typeName->declarator), __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
 });
-DeclareType(exp->expType->type, 0x0, 0x0);
+DeclareType(exp->expType->__anon1.type, 0, 0);
 break;
 case 14:
-case 29:
-ProcessExpressionType(exp->_renew.size);
-ProcessExpressionType(exp->_renew.exp);
+case 27:
+ProcessExpressionType(exp->__anon1._renew.size);
+ProcessExpressionType(exp->__anon1._renew.exp);
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->type = ProcessType(exp->_renew.typeName->qualifiers, exp->_renew.typeName->declarator), __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
 });
-DeclareType(exp->expType->type, 0x0, 0x0);
+DeclareType(exp->expType->__anon1.type, 0, 0);
 break;
 case 4:
 {
-unsigned int assign = 0x0, boolResult = 0x0, boolOps = 0x0;
+unsigned int assign = 0, boolResult = 0, boolOps = 0;
 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
-unsigned int useDestType = 0x0, useSideType = 0x0;
+unsigned int useDestType = 0, useSideType = 0;
 struct Location oldyylloc = yylloc;
-unsigned int useSideUnit = 0x0;
+unsigned int useSideUnit = 0;
+struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
 
-switch(exp->op.op)
+switch(exp->__anon1.op.op)
 {
 case '=':
 case MUL_ASSIGN:
@@ -12715,14 +14569,14 @@ case RIGHT_ASSIGN:
 case AND_ASSIGN:
 case XOR_ASSIGN:
 case OR_ASSIGN:
-assign = 0x1;
+assign = 1;
 break;
 case '!':
 break;
 case AND_OP:
 case OR_OP:
-boolOps = 0x1;
-boolResult = 0x1;
+boolOps = 1;
+boolResult = 1;
 break;
 case EQ_OP:
 case '<':
@@ -12730,39 +14584,53 @@ case '>':
 case LE_OP:
 case GE_OP:
 case NE_OP:
-boolResult = 0x1;
-useSideType = 0x1;
+boolResult = 1;
+useSideType = 1;
 break;
 case '+':
 case '-':
-useSideUnit = 0x1;
+useSideUnit = 1;
+useSideType = 1;
+useDestType = 1;
+break;
+case LEFT_OP:
+case RIGHT_OP:
+useSideType = 1;
+useDestType = 1;
+break;
 case '|':
-case '&':
 case '^':
+useSideType = 1;
+useDestType = 1;
+break;
 case '/':
 case '%':
+useSideType = 1;
+useDestType = 1;
+break;
+case '&':
 case '*':
-if(exp->op.op != '*' || exp->op.exp1)
+if(exp->__anon1.op.exp1)
 {
-useSideType = 0x1;
-useDestType = 0x1;
+useSideType = 1;
+useDestType = 1;
 }
 break;
 }
-if(exp->op.op == '&')
+if(exp->__anon1.op.op == '&')
 {
-if(!exp->op.exp1 && exp->op.exp2 && exp->op.exp2->type == 0 && exp->op.exp2->identifier)
+if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
 {
-struct Identifier * id = exp->op.exp2->identifier;
-struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0x0, id->_class && id->_class->name == (((void *)0)));
+struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
+struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
 
 if(symbol && symbol->isIterator == 2)
 {
 exp->type = 8;
-exp->member.exp = exp->op.exp2;
-exp->member.member = MkIdentifier("key");
+exp->__anon1.member.exp = exp->__anon1.op.exp2;
+exp->__anon1.member.member = MkIdentifier("key");
 exp->expType = (((void *)0));
-exp->op.exp2->expType = symbol->type;
+exp->__anon1.op.exp2->expType = symbol->type;
 symbol->type->refCount++;
 ProcessExpressionType(exp);
 FreeType(dummy);
@@ -12770,51 +14638,63 @@ break;
 }
 }
 }
-if(exp->op.exp1)
+if(exp->__anon1.op.exp1)
 {
-if(exp->destType && exp->destType->kind == 8 && exp->destType->_class && exp->destType->_class->registered && useDestType && ((exp->destType->_class->registered->type == 3 && useSideUnit) || exp->destType->_class->registered->type == 4 || exp->destType->_class->registered->type == 2))
+if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
+useDestType = 0;
+if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
 {
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = exp->destType;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = exp->destType;
+exp->__anon1.op.exp1->opDestType = 1;
 if(exp->destType)
 exp->destType->refCount++;
 }
 else if(!assign)
 {
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = dummy;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = dummy;
 dummy->refCount++;
 }
-if(exp->op.exp1->destType && exp->op.op != '=')
-exp->op.exp1->destType->count++;
-ProcessExpressionType(exp->op.exp1);
-if(exp->op.exp1->destType && exp->op.op != '=')
-exp->op.exp1->destType->count--;
-if(exp->op.exp1->destType == dummy)
+if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp1->destType->count++;
+ProcessExpressionType(exp->__anon1.op.exp1);
+if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp1->destType->count--;
+exp->__anon1.op.exp1->opDestType = 0;
+if(!exp->__anon1.op.exp2 && (exp->__anon1.op.op == INC_OP || exp->__anon1.op.op == DEC_OP) && exp->__anon1.op.exp1->expType && exp->__anon1.op.exp1->expType->kind == 8 && exp->__anon1.op.exp1->expType->__anon1._class && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered->type == 3)
+{
+exp->__anon1.op.exp2 = MkExpConstant("1");
+exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
+assign = 1;
+}
+if(exp->__anon1.op.exp1->destType == dummy)
 {
 FreeType(dummy);
-exp->op.exp1->destType = (((void *)0));
+exp->__anon1.op.exp1->destType = (((void *)0));
 }
-type1 = exp->op.exp1->expType;
+type1 = exp->__anon1.op.exp1->expType;
 }
-if(exp->op.exp2)
+if(exp->__anon1.op.exp2)
 {
 char expString[10240];
 
 expString[0] = '\0';
-if(exp->op.exp2->type == 1 && !exp->op.exp2->instance->_class)
+if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
 {
-if(exp->op.exp1)
+if(exp->__anon1.op.exp1)
 {
-exp->op.exp2->destType = exp->op.exp1->expType;
-if(exp->op.exp1->expType)
-exp->op.exp1->expType->refCount++;
+exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
 }
 else
 {
-exp->op.exp2->destType = exp->destType;
+exp->__anon1.op.exp2->destType = exp->destType;
+if(!exp->__anon1.op.exp1 || exp->__anon1.op.op != '&')
+exp->__anon1.op.exp2->opDestType = 1;
 if(exp->destType)
 exp->destType->refCount++;
 }
@@ -12825,29 +14705,29 @@ exp->expType = type1;
 else if(assign)
 {
 if(inCompiler)
-PrintExpression(exp->op.exp2, expString);
+PrintExpression(exp->__anon1.op.exp2, expString);
 if(type1 && type1->kind == 13)
 {
-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->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN || exp->__anon1.op.op == AND_ASSIGN || exp->__anon1.op.op == OR_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
+else if(exp->__anon1.op.op == '=')
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
 if(type1)
 type1->refCount++;
 }
 }
 else
 {
-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)
+if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN)
 ;
 else
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
 if(type1)
 type1->refCount++;
 }
@@ -12856,48 +14736,68 @@ if(type1)
 type1->refCount++;
 exp->expType = type1;
 }
-else if(exp->destType && exp->destType->kind == 8 && exp->destType->_class && exp->destType->_class->registered && ((exp->destType->_class->registered->type == 3 && useDestType && useSideUnit) || (exp->destType->_class->registered->type == 4 && useDestType)))
+else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = exp->destType;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = exp->destType;
+if(exp->__anon1.op.op != '&')
+exp->__anon1.op.exp2->opDestType = 1;
 if(exp->destType)
 exp->destType->refCount++;
 }
 else
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = dummy;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = dummy;
 dummy->refCount++;
 }
-if(type1 && boolResult && useSideType && type1->kind == 8 && type1->_class && type1->_class->registered && (type1->_class->registered->type == 2 || type1->_class->registered->type == 4))
+if(type1 && boolResult && useSideType && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && (type1->__anon1._class->__anon1.registered->type == 2 || type1->__anon1._class->__anon1.registered->type == 4))
 {
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1;
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
 type1->refCount++;
 }
-if(exp->op.exp2->destType && exp->op.op != '=')
-exp->op.exp2->destType->count++;
-ProcessExpressionType(exp->op.exp2);
-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->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp2->destType->count++;
+if(exp->__anon1.op.op == SIZEOF)
+{
+struct Expression * e = exp->__anon1.op.exp2;
+
+while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
+{
+if(e->type == 5 || e->type == 32 || e->type == 23)
+{
+if(e->type == 23)
+e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
+else
+e = (*e->__anon1.list).last;
+}
+}
+if(e->type == 11 && e->__anon1.cast.exp)
+e->__anon1.cast.exp->needCast = 1;
+}
+ProcessExpressionType(exp->__anon1.op.exp2);
+exp->__anon1.op.exp2->opDestType = 0;
+if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
+exp->__anon1.op.exp2->destType->count--;
+if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
 {
-if(exp->op.exp2->expType->kind == 23 || exp->op.exp2->expType->kind == 22 || exp->op.exp2->expType->kind == 4 || exp->op.exp2->expType->kind == 3 || exp->op.exp2->expType->kind == 2 || exp->op.exp2->expType->kind == 1)
+if(exp->__anon1.op.exp2->expType->kind == 23 || exp->__anon1.op.exp2->expType->kind == 22 || exp->__anon1.op.exp2->expType->kind == 4 || exp->__anon1.op.exp2->expType->kind == 3 || exp->__anon1.op.exp2->expType->kind == 2 || exp->__anon1.op.exp2->expType->kind == 1)
 {
-if(exp->op.op != '=' && type1->type->kind == 0)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
+if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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)))
+else if(exp->__anon1.op.exp2->expType->kind == 13 || exp->__anon1.op.exp2->expType->kind == 12 || exp->__anon1.op.exp2->expType->kind == 11 || exp->__anon1.op.exp2->expType->kind == 16 || (type1->__anon1.type->kind == 0 && exp->__anon1.op.exp2->expType->kind == 8 && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && (exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 0 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 5)))
 {
-if(exp->op.op == ADD_ASSIGN)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot add two pointers\n", (((void *)0))));
+if(exp->__anon1.op.op == ADD_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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))
+else if((exp->__anon1.op.exp2->expType->kind == 8 && type1->kind == 13 && type1->__anon1.type->kind == 8 && type1->__anon1.type->__anon1._class == exp->__anon1.op.exp2->expType->__anon1._class && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1))
 {
-if(exp->op.op == ADD_ASSIGN)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot add two pointers\n", (((void *)0))));
+if(exp->__anon1.op.op == ADD_ASSIGN)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
 }
 else if(inCompiler)
 {
@@ -12906,145 +14806,192 @@ char type2String[1024];
 
 type1String[0] = '\0';
 type2String[0] = '\0';
-PrintType(exp->op.exp2->expType, type1String, 0x0, 0x1);
-PrintType(type1, type2String, 0x0, 0x1);
+PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
+PrintType(type1, type2String, 01);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
 }
 }
-if(exp->op.exp2->destType == dummy)
+if(exp->__anon1.op.exp2->destType == dummy)
 {
 FreeType(dummy);
-exp->op.exp2->destType = (((void *)0));
+exp->__anon1.op.exp2->destType = (((void *)0));
+}
+if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
+{
+type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+type2->refCount = 1;
+CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
+type2->isSigned = 1;
+}
+else if(exp->__anon1.op.op == '~' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && (!exp->__anon1.op.exp2->expType->isSigned || exp->__anon1.op.exp2->expType->kind != 3))
+{
+type2 = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->kind = 3, __ecereInstance1;
+});
+type2->refCount = 1;
+type2->isSigned = 1;
+}
+else
+{
+type2 = exp->__anon1.op.exp2->expType;
+if(type2)
+type2->refCount++;
 }
-type2 = exp->op.exp2->expType;
 }
 dummy->kind = 0;
-if(exp->op.op == SIZEOF)
+if(exp->__anon1.op.op == SIZEOF)
 {
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
 });
-exp->isConstant = 0x1;
+exp->isConstant = 1;
 }
-else if(exp->op.op == '*' && !exp->op.exp1)
+else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
 {
 exp->expType = Dereference(type2);
 if(type2 && type2->kind == 8)
-notByReference = 0x1;
+notByReference = 1;
 }
-else if(exp->op.op == '&' && !exp->op.exp1)
+else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
 exp->expType = Reference(type2);
 else if(!assign)
 {
 if(boolOps)
 {
-if(exp->op.exp1)
+if(exp->__anon1.op.exp1)
 {
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = MkClassType("bool");
-exp->op.exp1->destType->truth = 0x1;
-if(!exp->op.exp1->expType)
-ProcessExpressionType(exp->op.exp1);
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = MkClassType("bool");
+exp->__anon1.op.exp1->destType->truth = 1;
+if(!exp->__anon1.op.exp1->expType)
+ProcessExpressionType(exp->__anon1.op.exp1);
 else
-CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0);
-FreeType(exp->op.exp1->expType);
-exp->op.exp1->expType = MkClassType("bool");
-exp->op.exp1->expType->truth = 0x1;
-}
-if(exp->op.exp2)
-{
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = MkClassType("bool");
-exp->op.exp2->destType->truth = 0x1;
-if(!exp->op.exp2->expType)
-ProcessExpressionType(exp->op.exp2);
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
+FreeType(exp->__anon1.op.exp1->expType);
+exp->__anon1.op.exp1->expType = MkClassType("bool");
+exp->__anon1.op.exp1->expType->truth = 1;
+}
+if(exp->__anon1.op.exp2)
+{
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = MkClassType("bool");
+exp->__anon1.op.exp2->destType->truth = 1;
+if(!exp->__anon1.op.exp2->expType)
+ProcessExpressionType(exp->__anon1.op.exp2);
 else
-CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0);
-FreeType(exp->op.exp2->expType);
-exp->op.exp2->expType = MkClassType("bool");
-exp->op.exp2->expType->truth = 0x1;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
+FreeType(exp->__anon1.op.exp2->expType);
+exp->__anon1.op.exp2->expType = MkClassType("bool");
+exp->__anon1.op.exp2->expType->truth = 1;
 }
 }
-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")))))
+else if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((useSideType) || ((!type1 || type1->kind != 8 || !strcmp(type1->__anon1._class->string, "String")) && (!type2 || type2->kind != 8 || !strcmp(type2->__anon1._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(type1 && type2 && ((type1->kind == 8 && type1->__anon1._class && strcmp(type1->__anon1._class->string, "String")) == (type2->kind == 8 && type2->__anon1._class && strcmp(type2->__anon1._class->string, "String"))))
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1;
+if(exp->__anon1.op.op == '-' && ((type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4) || (type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)))
+{
+struct Type * intType;
+
+if(!type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
+if(!type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
+intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp1->destType = intType;
+exp->__anon1.op.exp2->destType = intType;
+intType->refCount++;
+}
+else
+{
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
 type1->refCount++;
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = type2;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.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(__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)
+}
+if(!boolResult && type1->kind == 8 && (!exp->destType || exp->destType->kind != 8) && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1->__anon1._class->__anon1.registered != type2->__anon1._class->__anon1.registered)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "operating on %s and %s with an untyped result, assuming %s\n", (((void *)0))), type1->__anon1._class->string, type2->__anon1._class->string, type1->__anon1._class->string);
+if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
 {
-struct Expression * argExp = GetTemplateArgExp(type1->type->templateParameter, thisClass, 0x1);
+struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
 
 if(argExp)
 {
 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
 
-exp->op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->op.exp1)));
-ProcessExpressionType(exp->op.exp1);
+exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
+ProcessExpressionType(exp->__anon1.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")), 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);
+exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
+if(!exp->__anon1.op.exp2->expType)
+{
+if(type2)
+FreeType(type2);
+type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
+type2->refCount++;
+}
+ProcessExpressionType(exp->__anon1.op.exp2);
 }
 }
 }
-if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->_class->string, "String"))) && (type2->kind == 23 || type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
+if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->__anon1._class->string, "String"))) && (type2->kind == 23 || type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
 {
-if(type1->kind != 8 && type1->type->kind == 0)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
+if(type1->kind != 8 && type1->__anon1.type->kind == 0)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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 == 23 || type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
+else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->__anon1._class->string, "String"))) && (type1->kind == 23 || type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
 {
-if(type2->kind != 8 && type2->type->kind == 0)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "void *: unknown size\n", (((void *)0))));
+if(type2->kind != 8 && type2->__anon1.type->kind == 0)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "different levels of indirection\n", (((void *)0))));
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
 }
 else
 {
-unsigned int success = 0x0;
+unsigned int success = 0;
 
 if(type1->kind == 13 && type2->kind == 13)
 {
-if(exp->op.op == '+')
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "cannot add two pointers\n", (((void *)0))));
-else if(exp->op.op == '-')
+if(exp->__anon1.op.op == '+')
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
+else if(exp->__anon1.op.op == '-')
 {
-if(MatchTypes(type1->type, type2->type, (((void *)0)), (((void *)0)), (((void *)0)), 0x0, 0x0, 0x0, 0x0))
+if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
 {
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
 });
-success = 0x1;
-if(type1->type->kind == 20)
+success = 1;
+if(type1->__anon1.type->kind == 20)
 {
-struct Expression * argExp = GetTemplateArgExp(type1->type->templateParameter, thisClass, 0x1);
+struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
 
 if(argExp)
 {
@@ -13052,8 +14999,8 @@ 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")), 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);
+exp->__anon1.list = MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp1))), exp->__anon1.op.op, MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2)))))), '/', MkExpMember(classExp, MkIdentifier("typeSize"))));
+ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
 FreeType(dummy);
 return ;
 }
@@ -13061,46 +15008,46 @@ return ;
 }
 }
 }
-if(!success && exp->op.exp1->type == 2)
+if(!success && exp->__anon1.op.exp1->type == 2)
 {
-if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp1->destType;
-if(exp->op.exp1->destType)
-exp->op.exp1->destType->refCount++;
-success = 0x1;
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
+success = 1;
 }
-else if(CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0))
+else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp2->destType;
-if(exp->op.exp2->destType)
-exp->op.exp2->destType->refCount++;
-success = 0x1;
+exp->expType = exp->__anon1.op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+exp->__anon1.op.exp2->destType->refCount++;
+success = 1;
 }
 }
 else if(!success)
 {
-if(CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0))
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp2->destType;
-if(exp->op.exp2->destType)
-exp->op.exp2->destType->refCount++;
-success = 0x1;
+exp->expType = exp->__anon1.op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+exp->__anon1.op.exp2->destType->refCount++;
+success = 1;
 }
-else if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
+else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp1->destType;
-if(exp->op.exp1->destType)
-exp->op.exp1->destType->refCount++;
-success = 0x1;
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
+success = 1;
 }
 }
 if(!success)
@@ -13116,111 +15063,165 @@ type1[0] = '\0';
 type2[0] = '\0';
 if(inCompiler)
 {
-PrintExpression(exp->op.exp1, expString1);
+PrintExpression(exp->__anon1.op.exp1, expString1);
 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
-PrintExpression(exp->op.exp2, expString2);
+PrintExpression(exp->__anon1.op.exp2, expString2);
 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
-PrintType(exp->op.exp1->expType, type1, 0x0, 0x1);
-PrintType(exp->op.exp2->expType, type2, 0x0, 0x1);
+PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
+PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
 }
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
 }
 }
 }
-else if(!boolResult && (!useSideUnit) && type2 && type1 && type2->kind == 8 && type1->kind != 8 && type2->_class && type2->_class->registered && type2->_class->registered->type == 3)
+else if(!boolResult && (!useSideUnit) && type2 && type1 && type2->kind == 8 && type1->kind != 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
 {
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = type2->_class->registered->dataType;
-if(type2->_class->registered->dataType)
-type2->_class->registered->dataType->refCount++;
-CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0);
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
+if(type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
 exp->expType = type2;
 if(type2)
 type2->refCount++;
 }
-else if(!boolResult && (!useSideUnit) && type1 && type2 && type1->kind == 8 && type2->kind != 8 && type1->_class && type1->_class->registered && type1->_class->registered->type == 3)
+else if(!boolResult && (!useSideUnit) && type1 && type2 && type1->kind == 8 && type2->kind != 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1->_class->registered->dataType;
-if(type1->_class->registered->dataType)
-type1->_class->registered->dataType->refCount++;
-CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0);
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
+if(type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
 exp->expType = type1;
 if(type1)
 type1->refCount++;
 }
 else if(type1)
 {
-unsigned int valid = 0x0;
+unsigned int valid = 0;
 
-if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->_class->registered && type1->_class->registered->type == 3 && type2 && type2->kind != 8)
+if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-if(!type1->_class->registered->dataType)
-type1->_class->registered->dataType = ProcessTypeString(type1->_class->registered->dataTypeString, 0x0);
-exp->op.exp2->destType = type1->_class->registered->dataType;
-exp->op.exp2->destType->refCount++;
-CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0);
-type2 = exp->op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+if(!type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
+exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
+exp->__anon1.op.exp2->destType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
+if(type2)
+FreeType(type2);
+type2 = exp->__anon1.op.exp2->destType;
+if(type2)
+type2->refCount++;
 exp->expType = type2;
 type2->refCount++;
 }
-if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->_class->registered && type2->_class->registered->type == 3 && type1 && type1->kind != 8)
+if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
 {
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-if(!type2->_class->registered->dataType)
-type2->_class->registered->dataType = ProcessTypeString(type2->_class->registered->dataTypeString, 0x0);
-exp->op.exp1->destType = type2->_class->registered->dataType;
-exp->op.exp1->destType->refCount++;
-CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0);
-type1 = exp->op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+if(!type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
+exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
+exp->__anon1.op.exp1->destType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
+type1 = exp->__anon1.op.exp1->destType;
 exp->expType = type1;
 type1->refCount++;
 }
-if(!boolResult || exp->op.op == '>' || exp->op.op == '<')
+if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
+{
+unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
+unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
+
+if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
+{
+if(op1IsEnum && exp->__anon1.op.exp2->expType)
+{
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
+{
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp2->expType;
+if(exp->__anon1.op.exp2->expType)
+exp->__anon1.op.exp2->expType->refCount++;
+valid = 1;
+}
+}
+else if(op2IsEnum && exp->__anon1.op.exp1->expType)
+{
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
+{
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
+valid = 1;
+}
+}
+}
+else
 {
-if(type1->kind == 8 && type1->_class && type1->_class->registered && type1->_class->registered->type == 4 && exp->op.exp2->expType)
+if(op1IsEnum && exp->__anon1.op.exp2->expType)
 {
-if(CheckExpressionType(exp->op.exp1, exp->op.exp2->expType, 0x0))
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp1->expType;
-if(exp->op.exp2->expType)
-exp->op.exp1->expType->refCount++;
-valid = 0x1;
+exp->expType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
+valid = 1;
 }
 }
-else if(type2 && (type2->kind == 8 && type2->_class && type2->_class->registered && type2->_class->registered->type == 4 && exp->op.exp1->expType))
+else if(op2IsEnum && exp->__anon1.op.exp1->expType)
 {
-if(CheckExpressionType(exp->op.exp2, exp->op.exp1->expType, 0x0))
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp2->expType;
-if(exp->op.exp2->expType)
-exp->op.exp2->expType->refCount++;
-valid = 0x1;
+exp->expType = exp->__anon1.op.exp2->expType;
+if(exp->__anon1.op.exp2->expType)
+exp->__anon1.op.exp2->expType->refCount++;
+valid = 1;
+}
 }
 }
 }
 if(!valid)
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1;
+if(type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && (type1->kind != 8 || !type1->__anon1._class || !type1->__anon1._class->__anon1.registered || type1->__anon1._class->__anon1.registered->type != 3))
+{
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2;
+type2->refCount++;
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
+{
+if(exp->expType)
+FreeType(exp->expType);
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
+}
+}
+else
+{
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1;
 type1->refCount++;
-if(CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0))
+if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp2->destType;
-if(exp->op.exp2->destType)
-exp->op.exp2->destType->refCount++;
+exp->expType = exp->__anon1.op.exp2->destType;
+if(exp->__anon1.op.exp2->destType)
+exp->__anon1.op.exp2->destType->refCount++;
 }
 else if(type1 && type2)
 {
@@ -13235,70 +15236,71 @@ type1String[0] = '\0';
 type2String[0] = '\0';
 if(inCompiler)
 {
-PrintExpression(exp->op.exp1, expString1);
+PrintExpression(exp->__anon1.op.exp1, expString1);
 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
-PrintExpression(exp->op.exp2, expString2);
+PrintExpression(exp->__anon1.op.exp2, expString2);
 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
-PrintType(exp->op.exp1->expType, type1String, 0x0, 0x1);
-PrintType(exp->op.exp2->expType, type2String, 0x0, 0x1);
+PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
+PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
 }
-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)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
+if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
 {
-exp->expType = exp->op.exp1->expType;
-if(exp->op.exp1->expType)
-exp->op.exp1->expType->refCount++;
+exp->expType = exp->__anon1.op.exp1->expType;
+if(exp->__anon1.op.exp1->expType)
+exp->__anon1.op.exp1->expType->refCount++;
 }
-else if(type2->kind == 8 && type2->_class && type2->_class->registered && type2->_class->registered->type == 4)
+else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
 {
-exp->expType = exp->op.exp2->expType;
-if(exp->op.exp2->expType)
-exp->op.exp2->expType->refCount++;
+exp->expType = exp->__anon1.op.exp2->expType;
+if(exp->__anon1.op.exp2->expType)
+exp->__anon1.op.exp2->expType->refCount++;
+}
 }
 }
 }
 }
 else if(type2)
 {
-if(type2->kind == 8 && type2->_class && type2->_class->registered && type2->_class->registered->type == 4)
+if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
 {
-struct Type * oldType = exp->op.exp1->expType;
+struct Type * oldType = exp->__anon1.op.exp1->expType;
 
-exp->op.exp1->expType = (((void *)0));
-if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
+exp->__anon1.op.exp1->expType = (((void *)0));
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 FreeType(oldType);
 else
-exp->op.exp1->expType = oldType;
+exp->__anon1.op.exp1->expType = oldType;
 }
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = type2;
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2;
 type2->refCount++;
-if(CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0))
+if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
 {
 if(exp->expType)
 FreeType(exp->expType);
-exp->expType = exp->op.exp1->destType;
-if(exp->op.exp1->destType)
-exp->op.exp1->destType->refCount++;
+exp->expType = exp->__anon1.op.exp1->destType;
+if(exp->__anon1.op.exp1->destType)
+exp->__anon1.op.exp1->destType->refCount++;
 }
 }
 }
 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
 {
-if(type1 && type2->_class && type2->_class->registered && type2->_class->registered->type == 3)
+if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
 {
-if(exp->op.exp1->destType)
-FreeType(exp->op.exp1->destType);
-exp->op.exp1->destType = type2->_class->registered->dataType;
-if(type2->_class->registered->dataType)
-type2->_class->registered->dataType->refCount++;
-CheckExpressionType(exp->op.exp1, exp->op.exp1->destType, 0x0);
+if(exp->__anon1.op.exp1->destType)
+FreeType(exp->__anon1.op.exp1->destType);
+exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
+if(type2->__anon1._class->__anon1.registered->dataType)
+type2->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
 }
-if(exp->op.op == '!')
+if(exp->__anon1.op.op == '!')
 {
 exp->expType = MkClassType("bool");
-exp->expType->truth = 0x1;
+exp->expType->truth = 1;
 }
 else
 {
@@ -13309,14 +15311,14 @@ type2->refCount++;
 }
 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
 {
-if(type2 && type1->_class && type1->_class->registered && type1->_class->registered->type == 3)
+if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
 {
-if(exp->op.exp2->destType)
-FreeType(exp->op.exp2->destType);
-exp->op.exp2->destType = type1->_class->registered->dataType;
-if(type1->_class->registered->dataType)
-type1->_class->registered->dataType->refCount++;
-CheckExpressionType(exp->op.exp2, exp->op.exp2->destType, 0x0);
+if(exp->__anon1.op.exp2->destType)
+FreeType(exp->__anon1.op.exp2->destType);
+exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
+if(type1->__anon1._class->__anon1.registered->dataType)
+type1->__anon1._class->__anon1.registered->dataType->refCount++;
+CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
 }
 exp->expType = type1;
 if(type1)
@@ -13324,67 +15326,72 @@ type1->refCount++;
 }
 }
 yylloc = exp->loc;
-if(exp->op.exp1 && !exp->op.exp1->expType)
+if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
 {
 char expString[10000];
 
 expString[0] = '\0';
 if(inCompiler)
 {
-PrintExpression(exp->op.exp1, expString);
+PrintExpression(exp->__anon1.op.exp1, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(expString[0])
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
-if(exp->op.exp2 && !exp->op.exp2->expType)
+if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
 {
 char expString[10240];
 
 expString[0] = '\0';
 if(inCompiler)
 {
-PrintExpression(exp->op.exp2, expString);
+PrintExpression(exp->__anon1.op.exp2, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(expString[0])
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 if(boolResult)
 {
 FreeType(exp->expType);
 exp->expType = MkClassType("bool");
-exp->expType->truth = 0x1;
+exp->expType->truth = 1;
 }
-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 == SIZEOF && exp->op.exp2->expType)
+if(exp->__anon1.op.op != SIZEOF)
+exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
+if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
 {
-DeclareType(exp->op.exp2->expType, 0x0, 0x0);
+DeclareType(exp->__anon1.op.exp2->expType, 0, 0);
 }
+if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
 yylloc = oldyylloc;
 FreeType(dummy);
+if(type2)
+FreeType(type2);
 break;
 }
 case 5:
-case 34:
+case 32:
 {
 struct Expression * e;
 
-exp->isConstant = 0x1;
-for(e = (*exp->list).first; e; e = e->next)
+exp->isConstant = 1;
+for(e = (*exp->__anon1.list).first; e; e = e->next)
 {
-unsigned int inced = 0x0;
+unsigned int inced = 0;
 
 if(!e->next)
 {
 FreeType(e->destType);
+e->opDestType = exp->opDestType;
 e->destType = exp->destType;
 if(e->destType)
 {
 exp->destType->refCount++;
 e->destType->count++;
-inced = 0x1;
+inced = 1;
 }
 }
 ProcessExpressionType(e);
@@ -13397,20 +15404,20 @@ if(e->expType)
 e->expType->refCount++;
 }
 if(!e->isConstant)
-exp->isConstant = 0x0;
+exp->isConstant = 0;
 }
-e = (*exp->list).first;
+e = (*exp->__anon1.list).first;
 if(!e->next && e->type == 8)
 {
 struct Expression * next = exp->next, * prev = exp->prev;
 
 FreeType(exp->expType);
 FreeType(exp->destType);
-(__ecereNameSpace__ecere__com__eSystem_Delete(exp->list), exp->list = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
 *exp = *e;
 exp->prev = prev;
 exp->next = next;
-((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
 ProcessExpressionType(exp);
 }
 break;
@@ -13419,44 +15426,60 @@ case 6:
 {
 struct Expression * e;
 
-exp->isConstant = 0x1;
-ProcessExpressionType(exp->index.exp);
-if(!exp->index.exp->isConstant)
-exp->isConstant = 0x0;
-if(exp->index.exp->expType)
+exp->isConstant = 1;
+ProcessExpressionType(exp->__anon1.index.exp);
+if(!exp->__anon1.index.exp->isConstant)
+exp->isConstant = 0;
+if(exp->__anon1.index.exp->expType)
+{
+struct Type * source = exp->__anon1.index.exp->expType;
+
+if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
 {
-struct Type * source = exp->index.exp->expType;
+struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
+struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
 
-if(source->kind == 8 && source->_class && source->_class->registered && source->_class->registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, containerClass) && source->_class->registered->templateArgs)
+if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
+{
+exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
+if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
 {
-struct __ecereNameSpace__ecere__com__Class * _class = source->_class->registered;
+struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
 
-exp->expType = ProcessTypeString(_class->templateArgs[2].dataTypeString, 0x0);
-if(exp->index.index && (*exp->index.index).last)
+if(type->kind == 8)
+type->constant = 1;
+else if(type->kind == 13)
 {
-((struct Expression *)(*exp->index.index).last)->destType = ProcessTypeString(_class->templateArgs[1].dataTypeString, 0x0);
+struct Type * t = type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+t->constant = 1;
+}
+((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
 }
 }
 }
-for(e = (*exp->index.index).first; e; e = e->next)
+}
+for(e = (*exp->__anon1.index.index).first; e; e = e->next)
 {
-if(!e->next && exp->index.exp->expType && exp->index.exp->expType->kind == 12 && exp->index.exp->expType->enumClass)
+if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
 {
 if(e->destType)
 FreeType(e->destType);
-e->destType = MkClassType(exp->index.exp->expType->enumClass->string);
+e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
 }
 ProcessExpressionType(e);
 if(!e->next)
 {
 }
 if(!e->isConstant)
-exp->isConstant = 0x0;
+exp->isConstant = 0;
 }
 if(!exp->expType)
-exp->expType = Dereference(exp->index.exp->expType);
+exp->expType = Dereference(exp->__anon1.index.exp->expType);
 if(exp->expType)
-DeclareType(exp->expType, 0x0, 0x0);
+DeclareType(exp->expType, 00);
 break;
 }
 case 7:
@@ -13469,29 +15492,29 @@ char name[1024];
 name[0] = '\0';
 if(inCompiler)
 {
-PrintExpression(exp->call.exp, name);
-if(exp->call.exp->expType && !exp->call.exp->expType->returnType)
+PrintExpression(exp->__anon1.call.exp, name);
+if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
 {
-PrintExpression(exp->call.exp, name);
+PrintExpression(exp->__anon1.call.exp, name);
 }
 }
-if(exp->call.exp->type == 0)
+if(exp->__anon1.call.exp->type == 0)
 {
-struct Expression * idExp = exp->call.exp;
-struct Identifier * id = idExp->identifier;
+struct Expression * idExp = exp->__anon1.call.exp;
+struct Identifier * id = idExp->__anon1.__anon1.identifier;
 
 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);
+exp->expType = ProcessTypeString("void *", 1);
+if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
+ProcessExpressionType((*exp->__anon1.call.arguments).first);
 break;
 }
 else if(!strcmp(id->string, "__ENDIAN_PAD"))
 {
-exp->expType = ProcessTypeString("int", 0x1);
-if(exp->call.arguments && (*exp->call.arguments).first)
-ProcessExpressionType((*exp->call.arguments).first);
+exp->expType = ProcessTypeString("int", 1);
+if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
+ProcessExpressionType((*exp->__anon1.call.arguments).first);
 break;
 }
 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
@@ -13500,28 +15523,28 @@ struct Expression * a = (((void *)0));
 struct Expression * b = (((void *)0));
 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
 
-if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->call.arguments).count == 2)
+if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
 {
-a = (*exp->call.arguments).first;
-b = (*exp->call.arguments).last;
+a = (*exp->__anon1.call.arguments).first;
+b = (*exp->__anon1.call.arguments).last;
 tempExp1 = a;
 tempExp2 = b;
 }
-else if((*exp->call.arguments).count == 1)
+else if((*exp->__anon1.call.arguments).count == 1)
 {
-a = (*exp->call.arguments).first;
+a = (*exp->__anon1.call.arguments).first;
 tempExp1 = a;
 }
 if(a)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->call.arguments));
-idExp->identifier = (((void *)0));
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
+idExp->__anon1.__anon1.identifier = (((void *)0));
 FreeExpContents(exp);
 ProcessExpressionType(a);
 if(b)
 ProcessExpressionType(b);
 exp->type = 5;
-exp->list = MkList();
+exp->__anon1.list = MkList();
 if(a->expType && (!b || b->expType))
 {
 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
@@ -13542,7 +15565,7 @@ tempExp1 = QMkExpId(temp1);
 tempExp1->expType = a->expType;
 if(a->expType)
 a->expType->refCount++;
-ListAdd(exp->list, MkExpOp(CopyExpression(tempExp1), '=', a));
+ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
 }
 if(b && !b->isConstant && b->type != 0)
 {
@@ -13552,12 +15575,12 @@ tempExp2 = QMkExpId(temp2);
 tempExp2->expType = b->expType;
 if(b->expType)
 b->expType->refCount++;
-ListAdd(exp->list, MkExpOp(CopyExpression(tempExp2), '=', b));
+ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
 }
 decl = MkDeclaration(specs, decls);
-if(!curCompound->compound.declarations)
-curCompound->compound.declarations = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->compound.declarations), (((void *)0)), decl);
+if(!curCompound->__anon1.compound.declarations)
+curCompound->__anon1.compound.declarations = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
 }
 }
 }
@@ -13565,22 +15588,22 @@ if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
 {
 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
 
-ListAdd(exp->list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
+ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
 exp->expType = a->expType;
 if(a->expType)
 a->expType->refCount++;
 }
 else if(!strcmp(id->string, "Abs"))
 {
-ListAdd(exp->list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
+ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
 exp->expType = a->expType;
 if(a->expType)
 a->expType->refCount++;
 }
 else if(!strcmp(id->string, "Sgn"))
 {
-ListAdd(exp->list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '!', CopyExpression(tempExp1)))), MkListOne(MkExpConstant("0")), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpConstant("-1")), MkExpConstant("1"))))));
-exp->expType = ProcessTypeString("int", 0x0);
+ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '!', CopyExpression(tempExp1)))), MkListOne(MkExpConstant("0")), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpConstant("-1")), MkExpConstant("1"))))));
+exp->expType = ProcessTypeString("int", 0);
 }
 FreeExpression(tempExp1);
 if(tempExp2)
@@ -13593,35 +15616,35 @@ break;
 {
 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
 
-if(!exp->call.exp->destType)
+if(!exp->__anon1.call.exp->destType)
 {
-exp->call.exp->destType = dummy;
+exp->__anon1.call.exp->destType = dummy;
 dummy->refCount++;
 }
-ProcessExpressionType(exp->call.exp);
-if(exp->call.exp->destType == dummy)
+ProcessExpressionType(exp->__anon1.call.exp);
+if(exp->__anon1.call.exp->destType == dummy)
 {
 FreeType(dummy);
-exp->call.exp->destType = (((void *)0));
+exp->__anon1.call.exp->destType = (((void *)0));
 }
 FreeType(dummy);
 }
-functionType = exp->call.exp->expType;
+functionType = exp->__anon1.call.exp->expType;
 if(functionType && functionType->kind == 16)
 {
 methodType = functionType;
-functionType = methodType->method->dataType;
-if(exp->call.exp->expType->usedClass)
+functionType = methodType->__anon1.__anon3.method->dataType;
+if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
 {
 char typeString[1024];
 
 typeString[0] = '\0';
 {
-struct Symbol * back = functionType->thisClass;
+struct Symbol * back = functionType->__anon1.__anon2.thisClass;
 
-functionType->thisClass = (((void *)0));
-PrintType(functionType, typeString, 0x1, 0x1);
-functionType->thisClass = back;
+functionType->__anon1.__anon2.thisClass = (((void *)0));
+PrintType(functionType, typeString, 1, 1);
+functionType->__anon1.__anon2.thisClass = back;
 }
 if(strstr(typeString, "thisclass"))
 {
@@ -13629,20 +15652,20 @@ struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 struct Declarator * decl;
 
 {
-struct Context * context = SetupTemplatesContext(exp->call.exp->expType->usedClass);
+struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
 
 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
-if(thisClass != (exp->call.exp->expType->usedClass->templateClass ? exp->call.exp->expType->usedClass->templateClass : exp->call.exp->expType->usedClass))
-thisClassParams = 0x0;
-ReplaceThisClassSpecifiers(specs, exp->call.exp->expType->usedClass);
+if(thisClass != (exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass ? exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass : exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass))
+thisClassParams = 0;
+ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
 {
 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
 
-thisClass = exp->call.exp->expType->usedClass;
+thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
 ProcessDeclarator(decl);
 thisClass = backupThisClass;
 }
-thisClassParams = 0x1;
+thisClassParams = 1;
 functionType = ProcessType(specs, decl);
 functionType->refCount = 0;
 FinishTemplatesContext(context);
@@ -13652,59 +15675,63 @@ FreeDeclarator(decl);
 }
 }
 }
-if(functionType && functionType->kind == 13 && functionType->type && functionType->type->kind == 11)
+if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
 {
-struct Type * type = functionType->type;
+struct Type * type = functionType->__anon1.type;
 
 if(!functionType->refCount)
 {
-functionType->type = (((void *)0));
+functionType->__anon1.type = (((void *)0));
 FreeType(functionType);
 }
 functionType = type;
 }
 if(functionType && functionType->kind != 11)
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "called object %s is not a function\n", (((void *)0))), name);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
 }
 else if(functionType)
 {
-unsigned int emptyParams = 0x0, noParams = 0x0;
-struct Expression * e = exp->call.arguments ? (*exp->call.arguments).first : (((void *)0));
-struct Type * type = functionType->params.first;
-struct Expression * memberExp = (exp->call.exp->type == 8) ? exp->call.exp : (((void *)0));
+unsigned int emptyParams = 0, noParams = 0;
+struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
+struct Type * type = functionType->__anon1.__anon2.params.first;
+struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
 int extra = 0;
 struct Location oldyylloc = yylloc;
 
 if(!type)
-emptyParams = 0x1;
-if(functionType->extraParam && e && functionType->thisClass)
+emptyParams = 1;
+if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
 {
-e->destType = MkClassType(functionType->thisClass->string);
+e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
 e = e->next;
 }
-if(!functionType->staticMethod)
+if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
 {
-if(memberExp && memberExp->member.exp && memberExp->member.exp->expType && memberExp->member.exp->expType->kind == 19 && memberExp->member.exp->expType->_class)
+if(memberExp && memberExp->__anon1.member.exp && memberExp->__anon1.member.exp->expType && memberExp->__anon1.member.exp->expType->kind == 19 && memberExp->__anon1.member.exp->expType->__anon1._class)
 {
-type = MkClassType(memberExp->member.exp->expType->_class->string);
+type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
 if(e)
 {
 e->destType = type;
 e = e->next;
-type = functionType->params.first;
+type = functionType->__anon1.__anon2.params.first;
 }
 else
 type->refCount = 0;
 }
-else if(!memberExp && (functionType->thisClass || (methodType && methodType->methodClass)))
+else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
 {
-type = MkClassType(functionType->thisClass ? functionType->thisClass->string : (methodType ? methodType->methodClass->fullName : (((void *)0))));
+type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
+type->byReference = functionType->byReference;
+type->typedByReference = functionType->typedByReference;
 if(e)
 {
+if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
+e = e->next;
 e->destType = type;
 e = e->next;
-type = functionType->params.first;
+type = functionType->__anon1.__anon2.params.first;
 }
 else
 type->refCount = 0;
@@ -13712,7 +15739,7 @@ type->refCount = 0;
 }
 if(type && type->kind == 0)
 {
-noParams = 0x1;
+noParams = 1;
 if(!type->refCount)
 FreeType(type);
 type = (((void *)0));
@@ -13722,16 +15749,16 @@ for(; e; e = e->next)
 if(!type && !emptyParams)
 {
 yylloc = e->loc;
-if(methodType && methodType->methodClass)
-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);
+if(methodType && methodType->__anon1.__anon3.methodClass)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
 else
-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);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
 break;
 }
-if(methodType && type && type->kind == 20 && type->templateParameter->type == 0)
+if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
 {
 struct Type * templatedType = (((void *)0));
-struct __ecereNameSpace__ecere__com__Class * _class = methodType->usedClass;
+struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
 int id = 0;
 
@@ -13746,7 +15773,7 @@ sClass = sClass->templateClass;
 id = 0;
 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
 {
-if(curParam->type == 0 && !strcmp(type->templateParameter->identifier->string, curParam->name))
+if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
 {
 struct __ecereNameSpace__ecere__com__Class * nextClass;
 
@@ -13764,20 +15791,32 @@ if(curParam)
 break;
 }
 }
-if(curParam && _class->templateArgs[id].dataTypeString)
+if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
 {
+unsigned int constant = type->constant;
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
 
 {
 struct Context * context = SetupTemplatesContext(_class);
 
-templatedType = ProcessTypeString(arg.dataTypeString, 0x0);
+templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
 FinishTemplatesContext(context);
 }
+if(templatedType->kind == 8 && constant)
+templatedType->constant = 1;
+else if(templatedType->kind == 13)
+{
+struct Type * t = templatedType->__anon1.type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+if(constant)
+t->constant = constant;
+}
 e->destType = templatedType;
 if(templatedType)
 {
-templatedType->passAsTemplate = 0x1;
+templatedType->passAsTemplate = 1;
 }
 }
 else
@@ -13812,10 +15851,10 @@ type = next;
 }
 if(type && type->kind != 14)
 {
-if(methodType && methodType->methodClass)
-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);
+if(methodType && methodType->__anon1.__anon3.methodClass)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
 else
-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);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
 }
 yylloc = oldyylloc;
 if(type && !type->refCount)
@@ -13828,45 +15867,45 @@ struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__e
 
 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
 });
-if(exp->call.exp->type == 0)
+if(exp->__anon1.call.exp->type == 0)
 {
-char * string = exp->call.exp->identifier->string;
+char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
 
 if(inCompiler)
 {
 struct Symbol * symbol;
 struct Location oldyylloc = yylloc;
 
-yylloc = exp->call.exp->identifier->loc;
+yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
 if(strstr(string, "__builtin_") == string)
 {
 if(exp->destType)
 {
-functionType->returnType = exp->destType;
+functionType->__anon1.__anon2.returnType = exp->destType;
 exp->destType->refCount++;
 }
 }
 else
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "%s undefined; assuming extern returning int\n", (((void *)0))), string);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
 symbol = __extension__ ({
 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 
-__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 0x1), __ecereInstance1;
+__ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
 });
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
 if(strstr(symbol->string, "::"))
-globalContext->hasNameSpace = 0x1;
+globalContext->hasNameSpace = 1;
 yylloc = oldyylloc;
 }
 }
-else if(exp->call.exp->type == 8)
+else if(exp->__anon1.call.exp->type == 8)
 {
 }
 else
-Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "callable object undefined; extern assuming returning int\n", (((void *)0))));
-if(!functionType->returnType)
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
+if(!functionType->__anon1.__anon2.returnType)
 {
-functionType->returnType = __extension__ ({
+functionType->__anon1.__anon2.returnType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
@@ -13875,42 +15914,49 @@ __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
 }
 if(functionType && functionType->kind == 11)
 {
-exp->expType = functionType->returnType;
-if(functionType->returnType)
-functionType->returnType->refCount++;
+exp->expType = functionType->__anon1.__anon2.returnType;
+if(functionType->__anon1.__anon2.returnType)
+functionType->__anon1.__anon2.returnType->refCount++;
 if(!functionType->refCount)
 FreeType(functionType);
 }
-if(exp->call.arguments)
-{
-for(e = (*exp->call.arguments).first; e; e = e->next)
+if(exp->__anon1.call.arguments)
 {
-struct Type * destType = e->destType;
-
+for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
 ProcessExpressionType(e);
 }
-}
 break;
 }
 case 8:
 {
 struct Type * type;
 struct Location oldyylloc = yylloc;
-unsigned int thisPtr = (exp->member.exp && exp->member.exp->type == 0 && !strcmp(exp->member.exp->identifier->string, "this"));
+unsigned int thisPtr;
+struct Expression * checkExp = exp->__anon1.member.exp;
 
+while(checkExp)
+{
+if(checkExp->type == 11)
+checkExp = checkExp->__anon1.cast.exp;
+else if(checkExp->type == 5)
+checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
+else
+break;
+}
+thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
 exp->thisPtr = thisPtr;
-if(exp->member.member && exp->member.member->_class && exp->member.member->_class->name)
+if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
 {
-exp->member.member->classSym = exp->member.member->_class->symbol;
+exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
 }
-ProcessExpressionType(exp->member.exp);
-if(exp->member.exp->expType && exp->member.exp->expType->kind == 8 && exp->member.exp->expType->_class && exp->member.exp->expType->_class->registered && exp->member.exp->expType->_class->registered->type == 0)
+ProcessExpressionType(exp->__anon1.member.exp);
+if(exp->__anon1.member.exp->expType && exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered->type == 0)
 {
-exp->isConstant = 0x0;
+exp->isConstant = 0;
 }
 else
-exp->isConstant = exp->member.exp->isConstant;
-type = exp->member.exp->expType;
+exp->isConstant = exp->__anon1.member.exp->isConstant;
+type = exp->__anon1.member.exp->expType;
 yylloc = exp->loc;
 if(type && (type->kind == 20))
 {
@@ -13921,44 +15967,40 @@ if(_class)
 {
 for(param = _class->templateParams.first; param; param = param->next)
 {
-if(param->type == 1 && exp->member.member && exp->member.member->string && !strcmp(param->name, exp->member.member->string))
+if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
 break;
 }
 }
-if(param && param->defaultArg.member)
+if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
 {
 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
 
 if(argExp)
 {
-struct Expression * expMember = exp->member.exp;
+struct Expression * expMember = exp->__anon1.member.exp;
 struct Declarator * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 char thisClassTypeString[1024];
 
-FreeIdentifier(exp->member.member);
+FreeIdentifier(exp->__anon1.member.member);
 ProcessExpressionType(argExp);
 {
-char * colon = strstr(param->defaultArg.memberString, "::");
+char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
 
 if(colon)
 {
-char className[1024];
-struct __ecereNameSpace__ecere__com__Class * sClass;
-
-memcpy(thisClassTypeString, param->defaultArg.memberString, colon - param->defaultArg.memberString);
-thisClassTypeString[colon - param->defaultArg.memberString] = '\0';
+memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
+thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
 }
 else
 strcpy(thisClassTypeString, _class->fullName);
 }
-decl = SpecDeclFromString(param->defaultArg.member->dataTypeString, specs, (((void *)0)));
+decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
 exp->expType = ProcessType(specs, decl);
-if(exp->expType->kind == 8 && exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->templateClass)
+if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
 {
-struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
-int c;
 int paramCount = 0;
 int lastParam = -1;
 char templateString[1024];
@@ -13988,12 +16030,12 @@ for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
 p += nextClass->templateParams.count;
 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
 {
-if(cParam->type == 0 && arg.dataTypeString && !strcmp(cParam->name, arg.dataTypeString))
+if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
 {
-if(_class->templateArgs && arg.dataTypeString && (!param->defaultArg.dataTypeString || strcmp(arg.dataTypeString, param->defaultArg.dataTypeString)))
+if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
 {
-arg.dataTypeString = _class->templateArgs[p].dataTypeString;
-arg.dataTypeClass = _class->templateArgs[p].dataTypeClass;
+arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
+arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
 break;
 }
 }
@@ -14009,11 +16051,12 @@ case 2:
 {
 char expString[1024];
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl = SpecDeclFromString(param->dataTypeString, specs, (((void *)0)));
+struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
 struct Expression * exp;
-char * string = PrintHexUInt64(arg.expression.ui64);
+char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
 
 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
+(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
 ProcessExpressionType(exp);
 ComputeExpression(exp);
 expString[0] = '\0';
@@ -14024,17 +16067,17 @@ break;
 }
 case 1:
 {
-strcat(argument, arg.member->name);
+strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
 break;
 }
 case 0:
 {
-if(arg.dataTypeString && (!param->defaultArg.dataTypeString || strcmp(arg.dataTypeString, param->defaultArg.dataTypeString)))
+if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
 {
-if(!strcmp(arg.dataTypeString, "thisclass"))
+if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
 strcat(argument, thisClassTypeString);
 else
-strcat(argument, arg.dataTypeString);
+strcat(argument, arg.__anon1.__anon1.dataTypeString);
 }
 break;
 }
@@ -14068,28 +16111,28 @@ templateString[len++] = '\0';
 struct Context * context = SetupTemplatesContext(_class);
 
 FreeType(exp->expType);
-exp->expType = ProcessTypeString(templateString, 0x0);
+exp->expType = ProcessTypeString(templateString, 0);
 FinishTemplatesContext(context);
 }
 }
 exp->type = 5;
-exp->list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), expMember))), '+', MkExpOp(MkExpMember(MkExpMember(argExp, MkIdentifier("member")), MkIdentifier("offset")), '+', MkExpMember(MkExpMember(MkExpMember(CopyExpression(argExp), MkIdentifier("member")), MkIdentifier("_class")), MkIdentifier("offset")))))))));
+exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), expMember))), '+', MkExpOp(MkExpMember(MkExpMember(argExp, MkIdentifier("member")), MkIdentifier("offset")), '+', MkExpMember(MkExpMember(MkExpMember(CopyExpression(argExp), MkIdentifier("member")), MkIdentifier("_class")), MkIdentifier("offset")))))))));
 }
 }
-else if(type->templateParameter && type->templateParameter->type == 0 && (type->templateParameter->dataType || type->templateParameter->dataTypeString))
+else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
 {
-type = ProcessTemplateParameterType(type->templateParameter);
+type = ProcessTemplateParameterType(type->__anon1.templateParameter);
 }
 }
 if(type && (type->kind == 20))
 ;
-else if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15 || type->kind == 4 || type->kind == 2 || type->kind == 5 || type->kind == 1 || type->kind == 22 || type->kind == 23 || type->kind == 6 || type->kind == 7 || (type->kind == 13 && type->type->kind == 1)))
+else if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15 || type->kind == 4 || type->kind == 2 || type->kind == 5 || type->kind == 1 || type->kind == 24 || type->kind == 22 || type->kind == 23 || type->kind == 6 || type->kind == 7 || (type->kind == 13 && type->__anon1.type->kind == 1)))
 {
-struct Identifier * id = exp->member.member;
+struct Identifier * id = exp->__anon1.member.member;
 int typeKind = type->kind;
-struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->name)) ? (id->classSym ? id->classSym->registered : (type->_class ? type->_class->registered : (((void *)0)))) : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
 
-if(typeKind == 19 && exp->member.exp->type == 26)
+if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
 {
 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
 typeKind = 8;
@@ -14100,30 +16143,30 @@ if(typeKind == 3 || typeKind == 15)
 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
 else if(!_class)
 {
-if(type->kind == 8 && type->_class && type->_class->registered)
+if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
 {
-_class = type->_class->registered;
+_class = type->__anon1._class->__anon1.registered;
 }
-else if((type->kind == 12 || type->kind == 13) && type->type && type->type->kind == 1)
+else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
 {
-_class = FindClass("char *")->registered;
+_class = FindClass("char *")->__anon1.registered;
 }
 else if(type->kind == 13)
 {
 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
 FreeType(exp->expType);
-exp->expType = ProcessTypeString("uintptr", 0x0);
-exp->byReference = 0x1;
+exp->expType = ProcessTypeString("uintptr", 0);
+exp->byReference = 1;
 }
 else
 {
 char string[1024] = "";
 struct Symbol * classSym;
 
-PrintTypeNoConst(type, string, 0x0, 0x1);
+PrintTypeNoConst(type, string, 01);
 classSym = FindClass(string);
 if(classSym)
-_class = classSym->registered;
+_class = classSym->__anon1.registered;
 }
 }
 }
@@ -14135,16 +16178,16 @@ struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
 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(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->_class->string);
+if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
+exp->__anon1.member.memberType = 1;
+if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
 if(typeKind != 19)
 {
-if((exp->member.memberType == 0 && thisPtr) || exp->member.memberType == 3)
+if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
 {
 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
-if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->member.memberType != 3)
+if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
 {
 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
 if(prop)
@@ -14153,29 +16196,33 @@ member = (((void *)0));
 if(!member && !prop)
 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
-exp->member.thisPtr = 0x1;
+exp->__anon1.member.thisPtr = 1;
 }
 else
 {
+unsigned int useMemberForNonConst = 0;
+
 if(!id->classSym)
 {
 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
-if(!id->_class || !id->_class->name || strcmp(id->_class->name, "property"))
+useMemberForNonConst = prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
+if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
 }
-if(!prop && !member)
+if((!prop || useMemberForNonConst) && !member)
 {
-method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
+method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
 if(!method)
 {
 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
-if(!id->_class || !id->_class->name || strcmp(id->_class->name, "property"))
+useMemberForNonConst |= prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
+if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
 }
 }
 if(member && prop)
 {
-if(member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class))
+if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
 prop = (((void *)0));
 else
 member = (((void *)0));
@@ -14188,26 +16235,26 @@ if(!prop && !member && !method)
 {
 if(typeKind == 19)
 {
-classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->_class->registered, exp->member.member->string);
+classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
 if(classProp)
 {
-exp->member.memberType = 5;
-exp->expType = ProcessTypeString(classProp->dataTypeString, 0x0);
+exp->__anon1.member.memberType = 5;
+exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
 }
 else
 {
 char structName[1024];
-struct Identifier * id = exp->member.member;
-struct Expression * classExp = exp->member.exp;
+struct Identifier * id = exp->__anon1.member.member;
+struct Expression * classExp = exp->__anon1.member.exp;
 
 type->refCount++;
 FreeType(classExp->expType);
-classExp->expType = ProcessTypeString("ecere::com::Class", 0x0);
+classExp->expType = ProcessTypeString("ecere::com::Class", 0);
 strcpy(structName, "__ecereClassData_");
-FullClassNameCat(structName, type->_class->string, 0x0);
+FullClassNameCat(structName, type->__anon1._class->string, 0);
 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(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(type->_class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+exp->__anon1.member.member = id;
+exp->__anon1.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->__anon1._class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
 FreeType(type);
 ProcessExpressionType(exp);
 return ;
@@ -14219,39 +16266,61 @@ struct Symbol * classSym = FindClass(id->string);
 
 if(classSym)
 {
-struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->registered;
+struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
 
 if(convertClass)
 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
 }
 }
 }
+if(exp->__anon1.member.exp->destType)
+FreeType(exp->__anon1.member.exp->destType);
+{
+if(method && !method->_class->symbol)
+method->_class->symbol = FindClass(method->_class->fullName);
+if(prop && !prop->_class->symbol)
+prop->_class->symbol = FindClass(prop->_class->fullName);
+exp->__anon1.member.exp->destType = __extension__ ({
+struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1;
+});
+}
 if(prop)
 {
-exp->member.memberType = 1;
+exp->__anon1.member.memberType = 1;
 if(!prop->dataType)
 ProcessPropertyType(prop);
 exp->expType = prop->dataType;
-if(prop->dataType)
+if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
+{
+struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
+
+CopyTypeInto(type, exp->expType);
+type->refCount = 1;
+type->constant = 1;
+exp->expType = type;
+}
+else if(prop->dataType)
 prop->dataType->refCount++;
 }
 else if(member)
 {
-if(exp->member.exp->expType->classObjectType == 2 && !strcmp(exp->member.member->string, "_class"))
+if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
 {
 FreeExpContents(exp);
 exp->type = 0;
-exp->identifier = MkIdentifier("class");
+exp->__anon1.__anon1.identifier = MkIdentifier("class");
 ProcessExpressionType(exp);
 return ;
 }
-exp->member.memberType = 3;
-DeclareStruct(_class->fullName, 0x0);
+exp->__anon1.member.memberType = 3;
+DeclareStruct(_class->fullName, 0);
 if(!member->dataType)
 {
 struct Context * context = SetupTemplatesContext(_class);
 
-member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
+member->dataType = ProcessTypeString(member->dataTypeString, 0);
 FinishTemplatesContext(context);
 }
 exp->expType = member->dataType;
@@ -14260,36 +16329,37 @@ member->dataType->refCount++;
 }
 else if(revConvert)
 {
-exp->member.memberType = 4;
+exp->__anon1.member.memberType = 4;
 exp->expType = MkClassType(revConvert->_class->fullName);
 }
 else if(method)
 {
 {
-exp->member.memberType = 2;
+exp->__anon1.member.memberType = 2;
 }
 if(!method->dataType)
 ProcessMethodType(method);
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->method = method, __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
 });
-exp->expType->methodClass = (id && id->_class) ? _class : (((void *)0));
-exp->expType->usedClass = _class;
+exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
+exp->expType->__anon1.__anon3.usedClass = _class;
 }
 else if(!classProp)
 {
-if(exp->member.exp->expType->classObjectType == 2 && !strcmp(exp->member.member->string, "_class"))
+if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
 {
 FreeExpContents(exp);
 exp->type = 0;
-exp->identifier = MkIdentifier("class");
-ProcessExpressionType(exp);
+exp->__anon1.__anon1.identifier = MkIdentifier("class");
+FreeType(exp->expType);
+exp->expType = MkClassType("ecere::com::Class");
 return ;
 }
-yylloc = exp->member.member->loc;
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
+yylloc = exp->__anon1.member.member->loc;
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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);
 }
@@ -14297,10 +16367,10 @@ if(_class && exp->expType)
 {
 struct __ecereNameSpace__ecere__com__Class * tClass;
 
-tClass = _class;
+tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
 while(tClass && !tClass->templateClass)
 tClass = tClass->base;
-if(tClass && exp->expType->kind == 20 && exp->expType->templateParameter->type == 0)
+if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
 {
 int id = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
@@ -14313,7 +16383,7 @@ if(sClass->templateClass)
 sClass = sClass->templateClass;
 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
 {
-if(curParam->type == 0 && !strcmp(exp->expType->templateParameter->identifier->string, curParam->name))
+if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
 {
 for(sClass = sClass->base; sClass; sClass = sClass->base)
 id += sClass->templateParams.count;
@@ -14324,13 +16394,25 @@ id++;
 if(curParam)
 break;
 }
-if(curParam && tClass->templateArgs[id].dataTypeString)
+if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
 {
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
 struct Context * context = SetupTemplatesContext(tClass);
+unsigned int constant = exp->expType->constant;
 
 FreeType(exp->expType);
-exp->expType = ProcessTypeString(arg.dataTypeString, 0x0);
+exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+if(exp->expType->kind == 8 && constant)
+exp->expType->constant = 1;
+else if(exp->expType->kind == 13)
+{
+struct Type * t = exp->expType->__anon1.type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+if(constant)
+t->constant = constant;
+}
 if(exp->expType)
 {
 if(exp->expType->kind == 21)
@@ -14338,11 +16420,22 @@ if(exp->expType->kind == 21)
 FreeType(exp->expType);
 exp->expType = ReplaceThisClassType(_class);
 }
-if(tClass->templateClass)
-exp->expType->passAsTemplate = 0x1;
+if(tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType))))
+exp->expType->passAsTemplate = 1;
 if(!exp->destType)
 {
-exp->destType = ProcessTypeString(arg.dataTypeString, 0x0);
+exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
+if(exp->destType->kind == 8 && constant)
+exp->destType->constant = 1;
+else if(exp->destType->kind == 13)
+{
+struct Type * t = exp->destType->__anon1.type;
+
+while(t->kind == 13)
+t = t->__anon1.type;
+if(constant)
+t->constant = constant;
+}
 if(exp->destType->kind == 21)
 {
 FreeType(exp->destType);
@@ -14353,7 +16446,7 @@ exp->destType = ReplaceThisClassType(_class);
 FinishTemplatesContext(context);
 }
 }
-else if(tClass && exp->expType->kind == 13 && exp->expType->type && exp->expType->type->kind == 20 && exp->expType->type->templateParameter->type == 0)
+else if(tClass && exp->expType->kind == 13 && exp->expType->__anon1.type && exp->expType->__anon1.type->kind == 20 && exp->expType->__anon1.type->__anon1.templateParameter->type == 0)
 {
 int id = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
@@ -14366,7 +16459,7 @@ if(sClass->templateClass)
 sClass = sClass->templateClass;
 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
 {
-if(curParam->type == 0 && !strcmp(exp->expType->type->templateParameter->identifier->string, curParam->name))
+if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
 {
 for(sClass = sClass->base; sClass; sClass = sClass->base)
 id += sClass->templateParams.count;
@@ -14383,7 +16476,7 @@ struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templat
 struct Context * context = SetupTemplatesContext(tClass);
 struct Type * basicType;
 
-basicType = ProcessTypeString(arg.dataTypeString, 0x0);
+basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
 if(basicType)
 {
 if(basicType->kind == 21)
@@ -14395,7 +16488,7 @@ FreeType(exp->expType);
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->type = basicType, __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
 });
 if(!exp->destType)
 {
@@ -14407,28 +16500,27 @@ struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecere
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 struct Declarator * decl;
 
-decl = SpecDeclFromString(arg.dataTypeString, specs, (((void *)0)));
+decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
 *newExp = *exp;
 if(exp->destType)
 exp->destType->refCount++;
 if(exp->expType)
 exp->expType->refCount++;
 exp->type = 11;
-exp->cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
-exp->cast.exp = newExp;
+exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
+exp->__anon1.cast.exp = newExp;
 }
 }
 FinishTemplatesContext(context);
 }
 }
-else if(tClass && exp->expType->kind == 8 && exp->expType->_class && strchr(exp->expType->_class->string, '<'))
+else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
 {
-struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
 
 if(expClass)
 {
 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
-int c;
 int p = 0;
 int paramCount = 0;
 int lastParam = -1;
@@ -14446,7 +16538,6 @@ cClass = sClass;
 for(param = cClass->templateParams.first; param; param = param->next)
 {
 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
-int c;
 int cp = 0;
 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
@@ -14481,11 +16572,12 @@ case 2:
 {
 char expString[1024];
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl = SpecDeclFromString(param->dataTypeString, specs, (((void *)0)));
+struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
 struct Expression * exp;
-char * string = PrintHexUInt64(arg.expression.ui64);
+char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
 
 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
+(__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
 ProcessExpressionType(exp);
 ComputeExpression(exp);
 expString[0] = '\0';
@@ -14496,13 +16588,13 @@ break;
 }
 case 1:
 {
-strcat(argument, arg.member->name);
+strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
 break;
 }
 case 0:
 {
-if(arg.dataTypeString && (!param->defaultArg.dataTypeString || strcmp(arg.dataTypeString, param->defaultArg.dataTypeString)))
-strcat(argument, arg.dataTypeString);
+if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
+strcat(argument, arg.__anon1.__anon1.dataTypeString);
 break;
 }
 }
@@ -14535,7 +16627,7 @@ FreeType(exp->expType);
 {
 struct Context * context = SetupTemplatesContext(tClass);
 
-exp->expType = ProcessTypeString(templateString, 0x0);
+exp->expType = ProcessTypeString(templateString, 0);
 FinishTemplatesContext(context);
 }
 }
@@ -14543,11 +16635,11 @@ FinishTemplatesContext(context);
 }
 }
 else
-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)");
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "undefined class %s\n", (((void *)0))), (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->string : (type->__anon1._class ? type->__anon1._class->string : (((void *)0)))) : "(null)");
 }
 else if(type && (type->kind == 9 || type->kind == 10))
 {
-struct Type * memberType = exp->member.member ? FindMember(type, exp->member.member->string) : (((void *)0));
+struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
 
 if(memberType)
 {
@@ -14566,14 +16658,14 @@ if(inCompiler)
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "member operator on non-structure type expression %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "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))
 {
 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
 {
-struct Identifier * id = exp->member.member;
-struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->name)) ? (id->classSym ? id->classSym->registered : (type->_class ? type->_class->registered : (((void *)0)))) : (((void *)0));
+struct Identifier * id = exp->__anon1.member.member;
+struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
 
 if(_class)
 {
@@ -14589,11 +16681,11 @@ case 9:
 {
 struct Type * destType = exp->destType;
 
-if(exp->member.member && exp->member.member->_class && exp->member.member->_class->name)
+if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
 {
-exp->member.member->classSym = exp->member.member->_class->symbol;
+exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
 }
-exp->member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->member.exp)));
+exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
 exp->type = 8;
 if(destType)
 destType->count++;
@@ -14604,27 +16696,27 @@ break;
 }
 case 15:
 {
-struct Symbol * classSym = exp->_class->symbol;
+struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
 
-if(classSym && classSym->registered)
+if(classSym && classSym->__anon1.registered)
 {
-if(classSym->registered->type == 5)
+if(classSym->__anon1.registered->type == 5)
 {
 char name[1024];
 
 name[0] = '\0';
-DeclareStruct(classSym->string, 0x0);
-FreeSpecifier(exp->_class);
+DeclareStruct(classSym->string, 0);
+FreeSpecifier(exp->__anon1._class);
 exp->type = 10;
-FullClassNameCat(name, classSym->string, 0x0);
-exp->typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
+FullClassNameCat(name, classSym->string, 0);
+exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
 }
 else
 {
-if(classSym->registered->fixed)
+if(classSym->__anon1.registered->fixed)
 {
-FreeSpecifier(exp->_class);
-exp->constant = PrintUInt(classSym->registered->templateClass ? classSym->registered->templateClass->structSize : classSym->registered->structSize);
+FreeSpecifier(exp->__anon1._class);
+exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
 exp->type = 2;
 }
 else
@@ -14632,86 +16724,87 @@ else
 char className[1024];
 
 strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 0x1);
-MangleClassName(className);
+FullClassNameCat(className, classSym->string, 1);
 DeclareClass(classSym, className);
 FreeExpContents(exp);
 exp->type = 9;
-exp->member.exp = MkExpIdentifier(MkIdentifier(className));
-exp->member.member = MkIdentifier("structSize");
+exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
+exp->__anon1.member.member = MkIdentifier("structSize");
 }
 }
 }
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
 });
 break;
 }
 case 10:
 {
-struct Type * type = ProcessType(exp->typeName->qualifiers, exp->typeName->declarator);
+struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
 
 exp->expType = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
+__ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
 });
-exp->isConstant = 0x1;
-DeclareType(type, 0x0, 0x0);
+exp->isConstant = 1;
+DeclareType(type, 00);
 FreeType(type);
 break;
 }
 case 11:
 {
-struct Type * type = ProcessType(exp->cast.typeName->qualifiers, exp->cast.typeName->declarator);
+struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
 
 type->count = 1;
-FreeType(exp->cast.exp->destType);
-exp->cast.exp->destType = type;
+FreeType(exp->__anon1.cast.exp->destType);
+exp->__anon1.cast.exp->destType = type;
 type->refCount++;
-ProcessExpressionType(exp->cast.exp);
+type->casted = 1;
+ProcessExpressionType(exp->__anon1.cast.exp);
+type->casted = 0;
 type->count = 0;
 exp->expType = type;
-if(!exp->cast.exp->needCast && !NeedCast(exp->cast.exp->expType, type))
+if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
 {
 void * prev = exp->prev, * next = exp->next;
-struct Type * expType = exp->cast.exp->destType;
-struct Expression * castExp = exp->cast.exp;
+struct Type * expType = exp->__anon1.cast.exp->destType;
+struct Expression * castExp = exp->__anon1.cast.exp;
 struct Type * destType = exp->destType;
 
 if(expType)
 expType->refCount++;
 FreeType(exp->expType);
-FreeTypeName(exp->cast.typeName);
+FreeTypeName(exp->__anon1.cast.typeName);
 *exp = *castExp;
 FreeType(exp->expType);
 FreeType(exp->destType);
 exp->expType = expType;
 exp->destType = destType;
-((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor(castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
+((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
 exp->prev = prev;
 exp->next = next;
 }
 else
 {
-exp->isConstant = exp->cast.exp->isConstant;
+exp->isConstant = exp->__anon1.cast.exp->isConstant;
 }
 break;
 }
-case 35:
+case 33:
 {
-struct Type * type = ProcessType(exp->initializer.typeName->qualifiers, exp->initializer.typeName->declarator);
+struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
 
 exp->expType = type;
 break;
 }
-case 36:
+case 34:
 {
-struct Type * type = ProcessType(exp->vaArg.typeName->qualifiers, exp->vaArg.typeName->declarator);
+struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
 
-ProcessExpressionType(exp->vaArg.exp);
+ProcessExpressionType(exp->__anon1.vaArg.exp);
 exp->expType = type;
 break;
 }
@@ -14719,14 +16812,14 @@ case 12:
 {
 struct Expression * e;
 
-exp->isConstant = 0x1;
-FreeType(exp->cond.cond->destType);
-exp->cond.cond->destType = MkClassType("bool");
-exp->cond.cond->destType->truth = 0x1;
-ProcessExpressionType(exp->cond.cond);
-if(!exp->cond.cond->isConstant)
-exp->isConstant = 0x0;
-for(e = (*exp->cond.exp).first; e; e = e->next)
+exp->isConstant = 1;
+FreeType(exp->__anon1.cond.cond->destType);
+exp->__anon1.cond.cond->destType = MkClassType("bool");
+exp->__anon1.cond.cond->destType->truth = 1;
+ProcessExpressionType(exp->__anon1.cond.cond);
+if(!exp->__anon1.cond.cond->isConstant)
+exp->isConstant = 0;
+for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
 {
 if(!e->next)
 {
@@ -14743,94 +16836,94 @@ if(e->expType)
 e->expType->refCount++;
 }
 if(!e->isConstant)
-exp->isConstant = 0x0;
+exp->isConstant = 0;
 }
-FreeType(exp->cond.elseExp->destType);
-exp->cond.elseExp->destType = exp->destType ? exp->destType : exp->expType;
-if(exp->cond.elseExp->destType)
-exp->cond.elseExp->destType->refCount++;
-ProcessExpressionType(exp->cond.elseExp);
-if(!exp->cond.elseExp->isConstant)
-exp->isConstant = 0x0;
+FreeType(exp->__anon1.cond.elseExp->destType);
+exp->__anon1.cond.elseExp->destType = exp->destType ? exp->destType : exp->expType;
+if(exp->__anon1.cond.elseExp->destType)
+exp->__anon1.cond.elseExp->destType->refCount++;
+ProcessExpressionType(exp->__anon1.cond.elseExp);
+if(!exp->__anon1.cond.elseExp->isConstant)
+exp->isConstant = 0;
 break;
 }
-case 25:
+case 23:
 {
-if(exp->compound && exp->compound->compound.statements && (*exp->compound->compound.statements).last)
+if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
 {
-struct Statement * last = (*exp->compound->compound.statements).last;
+struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
 
-if(last->type == 3 && last->expressions && (*last->expressions).last)
+if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
 {
-((struct Expression *)(*last->expressions).last)->destType = exp->destType;
+((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
 if(exp->destType)
 exp->destType->refCount++;
 }
-ProcessStatement(exp->compound);
-exp->expType = (last->expressions && (*last->expressions).last) ? ((struct Expression *)(*last->expressions).last)->expType : (((void *)0));
+ProcessStatement(exp->__anon1.compound);
+exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
 if(exp->expType)
 exp->expType->refCount++;
 }
 break;
 }
-case 26:
+case 24:
 {
-struct Specifier * spec = (*exp->_classExp.specifiers).first;
+struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
 
 if(spec && spec->type == 1)
 {
-exp->expType = MkClassType(spec->name);
+exp->expType = MkClassType(spec->__anon1.__anon1.name);
 exp->expType->kind = 19;
-exp->byReference = 0x1;
+exp->byReference = 1;
 }
 else
 {
 exp->expType = MkClassType("ecere::com::Class");
-exp->byReference = 0x1;
+exp->byReference = 1;
 }
 break;
 }
-case 27:
+case 25:
 {
 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
 
 if(_class)
 {
-struct Identifier * id = exp->classData.id;
+struct Identifier * id = exp->__anon1.classData.id;
 char structName[1024];
 struct Expression * classExp;
 
 strcpy(structName, "__ecereClassData_");
-FullClassNameCat(structName, _class->fullName, 0x0);
+FullClassNameCat(structName, _class->fullName, 0);
 exp->type = 9;
-exp->member.member = id;
-if(curCompound && FindSymbol("this", curContext, curCompound->compound.context, 0x0, 0x0))
+exp->__anon1.member.member = id;
+if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
 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(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(_class->fullName)), (((void *)0))), MkIdentifier("offsetClass"))))))));
+exp->__anon1.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 ;
 }
 break;
 }
-case 37:
+case 35:
 {
 struct Type * type = (((void *)0));
-char * typeString = (((void *)0));
+const char * typeString = (((void *)0));
 char typeStringBuf[1024];
 
-if(exp->destType && exp->destType->kind == 8 && exp->destType->_class && exp->destType->_class->registered && exp->destType->_class->registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(exp->destType->_class->registered, containerClass))
+if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(exp->destType->__anon1._class->__anon1.registered, containerClass))
 {
-struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
 
-typeString = templateClass->templateArgs[2].dataTypeString;
+typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
 }
-else if(exp->list)
+else if(exp->__anon1.list)
 {
 struct Expression * e;
 
-for(e = (*exp->list).first; e; e = e->next)
+for(e = (*exp->__anon1.list).first; e; e = e->next)
 {
 ProcessExpressionType(e);
 if(e->expType)
@@ -14842,16 +16935,16 @@ type->refCount++;
 }
 else
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0x0))
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
 {
 FreeType(type);
 type = e->expType;
 e->expType = (((void *)0));
-e = (*exp->list).first;
+e = (*exp->__anon1.list).first;
 ProcessExpressionType(e);
 if(e->expType)
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0x0))
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
 {
 FreeType(e->expType);
 e->expType = (((void *)0));
@@ -14872,7 +16965,7 @@ e->expType = (((void *)0));
 if(type)
 {
 typeStringBuf[0] = '\0';
-PrintTypeNoConst(type, typeStringBuf, 0x0, 0x1);
+PrintTypeNoConst(type, typeStringBuf, 01);
 typeString = typeStringBuf;
 FreeType(type);
 type = (((void *)0));
@@ -14888,48 +16981,48 @@ struct Expression * expExt;
 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
 
 sprintf(templateString, "Container<%s>", typeString);
-if(exp->list)
+if(exp->__anon1.list)
 {
 struct Expression * e;
 
-type = ProcessTypeString(typeString, 0x0);
-while(e = (*exp->list).first)
+type = ProcessTypeString(typeString, 0);
+while((e = (*exp->__anon1.list).first))
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->list), e);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
 e->destType = type;
 type->refCount++;
 ProcessExpressionType(e);
 ListAdd(initializers, MkInitializerAssignment(e));
 }
 FreeType(type);
-(__ecereNameSpace__ecere__com__eSystem_Delete(exp->list), exp->list = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
 }
-DeclareStruct("ecere::com::BuiltInContainer", 0x0);
+DeclareStruct("ecere::com::BuiltInContainer", 0);
 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
 
-__ecereInstance1->type = 2, __ecereInstance1->constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, &(*initializers).count, (void *)0), __ecereInstance1;
+__ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, &(*initializers).count, (void *)0), __ecereInstance1;
 })));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, CopySpecifier), CopyDeclarator(decl))));
-ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->exp);
-exp->expType = ProcessTypeString(templateString, 0x0);
+ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
+exp->expType = ProcessTypeString(templateString, 0);
 exp->type = 5;
-exp->list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
+exp->__anon1.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(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Couldn't determine type of array elements\n", (((void *)0))));
+exp->expType = ProcessTypeString("Container", 0);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
 }
 break;
 }
@@ -14939,45 +17032,49 @@ if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || e
 FreeType(exp->expType);
 exp->expType = ReplaceThisClassType(thisClass);
 }
-if(exp->expType && (exp->expType->kind == 9 || exp->expType->kind == 10 || exp->expType->kind == 15) && !exp->expType->members.first && exp->expType->enumName)
+if(exp->expType && (exp->expType->kind == 9 || exp->expType->kind == 10 || exp->expType->kind == 15) && !exp->expType->__anon1.__anon1.members.first && exp->expType->__anon1.__anon1.enumName)
 {
-struct Symbol * symbol = FindSymbol(exp->expType->enumName, curContext, globalContext, 0x1, 0x0);
+struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
 
 if(symbol)
 {
 if(exp->expType->kind != 15)
 {
 struct Type * member;
-char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->enumName);
+char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.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)
+exp->expType->__anon1.__anon1.enumName = enumName;
+exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
+for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
 member->refCount++;
 }
 else
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * member;
+struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
 
-for(member = symbol->type->members.first; member; member = member->next)
+for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
 {
-struct __ecereNameSpace__ecere__sys__NamedLink * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(structSize_NamedLink), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
+struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(structSize_NamedLink64), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->members, value);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
 }
 }
 }
 }
 yylloc = exp->loc;
-if(exp->destType && (exp->destType->kind == 0 || exp->destType->kind == 18))
+if(exp->destType && (exp->destType->kind == 18))
 ;
 else if(exp->destType && !exp->destType->keepCast)
 {
-if(!CheckExpressionType(exp, exp->destType, 0x0))
+if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
+exp->needTemplateCast = 1;
+if(exp->destType->kind == 0)
+;
+else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
 {
 if(!exp->destType->count || unresolved)
 {
@@ -14994,16 +17091,16 @@ if(inCompiler)
 char expString[10240];
 
 expString[0] = '\0';
-PrintType(exp->destType, type2, 0x0, 0x1);
+PrintType(exp->destType, type2, 01);
 if(inCompiler)
 {
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(unresolved)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
 else if(exp->type != 16)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
 }
 }
 else
@@ -15017,9 +17114,9 @@ PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 if(unresolved)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
 else if(exp->type != 16)
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 }
 else
@@ -15031,10 +17128,10 @@ type1[0] = '\0';
 type2[0] = '\0';
 if(inCompiler)
 {
-PrintType(exp->expType, type1, 0x0, 0x1);
-PrintType(exp->destType, type2, 0x0, 0x1);
+PrintType(exp->expType, type1, 01);
+PrintType(exp->destType, type2, 01);
 }
-if(exp->destType->truth && exp->destType->_class && exp->destType->_class->registered && !strcmp(exp->destType->_class->registered->name, "bool") && exp->expType->kind != 0 && exp->expType->kind != 9 && exp->expType->kind != 10 && (exp->expType->kind != 8 || exp->expType->classObjectType || (exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->type != 1)))
+if(exp->destType->truth && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && !strcmp(exp->destType->__anon1._class->__anon1.registered->name, "bool") && exp->expType->kind != 0 && exp->expType->kind != 9 && exp->expType->kind != 10 && (exp->expType->kind != 8 || exp->expType->classObjectType || (exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type != 1)))
 ;
 else
 {
@@ -15047,7 +17144,7 @@ PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
 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);
+Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
 FreeType(exp->expType);
 exp->destType->refCount++;
 exp->expType = exp->destType;
@@ -15055,33 +17152,13 @@ exp->expType = exp->destType;
 }
 }
 }
-else if(exp->destType && exp->destType->kind == 14 && exp->expType && exp->expType->passAsTemplate)
-{
-struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
-char typeString[1024];
-struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl;
-
-typeString[0] = '\0';
-*newExp = *exp;
-if(exp->expType)
-exp->expType->refCount++;
-if(exp->expType)
-exp->expType->refCount++;
-exp->type = 11;
-newExp->destType = exp->expType;
-PrintType(exp->expType, typeString, 0x0, 0x0);
-decl = SpecDeclFromString(typeString, specs, (((void *)0)));
-exp->cast.typeName = MkTypeName(specs, decl);
-exp->cast.exp = newExp;
-}
 }
 else if(unresolved)
 {
-if(exp->identifier->_class && exp->identifier->_class->name)
-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(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "unresolved identifier %s\n", (((void *)0))), exp->identifier->string);
+if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s::%s\n", (((void *)0))), exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name, exp->__anon1.__anon1.identifier->string);
+else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
 }
 else if(!exp->expType && exp->type != 16)
 {
@@ -15093,13 +17170,13 @@ if(inCompiler)
 PrintExpression(exp, expString);
 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
 }
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "couldn't determine type of %s\n", (((void *)0))), expString);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
 }
 if(inCompiler)
 ApplyAnyObjectLogic(exp);
-if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->type == 5 && (!exp->destType || (exp->destType->kind != 3 && exp->destType->kind != 4 && exp->destType->kind != 22 && exp->destType->kind != 23 && exp->destType->kind != 5 && exp->destType->kind != 2 && exp->destType->kind != 1)))
+if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 5 && (!exp->destType || (exp->destType->kind != 3 && exp->destType->kind != 4 && exp->destType->kind != 22 && exp->destType->kind != 23 && exp->destType->kind != 5 && exp->destType->kind != 2 && exp->destType->kind != 1 && exp->destType->kind != 24)))
 {
-exp->byReference = 0x1;
+exp->byReference = 1;
 }
 yylloc = oldyylloc;
 }
@@ -15167,30 +17244,30 @@ static void ProcessInitializer(struct Initializer * init, struct Type * type)
 switch(init->type)
 {
 case 0:
-if(!init->exp || init->exp->type != 1 || !init->exp->instance || init->exp->instance->_class || !type || type->kind == 8)
+if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
 {
-if(init->exp && !init->exp->destType)
+if(init->__anon1.exp && !init->__anon1.exp->destType)
 {
-FreeType(init->exp->destType);
-init->exp->destType = type;
+FreeType(init->__anon1.exp->destType);
+init->__anon1.exp->destType = type;
 if(type)
 type->refCount++;
 }
-if(init->exp)
+if(init->__anon1.exp)
 {
-ProcessExpressionType(init->exp);
-init->isConstant = init->exp->isConstant;
+ProcessExpressionType(init->__anon1.exp);
+init->isConstant = init->__anon1.exp->isConstant;
 }
 break;
 }
 else
 {
-struct Expression * exp = init->exp;
-struct Instantiation * inst = exp->instance;
+struct Expression * exp = init->__anon1.exp;
+struct Instantiation * inst = exp->__anon1.instance;
 struct MembersInit * members;
 
 init->type = 1;
-init->list = MkList();
+init->__anon1.list = MkList();
 if(inst->members)
 {
 for(members = (*inst->members).first; members; members = members->next)
@@ -15199,9 +17276,9 @@ if(members->type == 0)
 {
 struct MemberInit * member;
 
-for(member = (*members->dataMembers).first; member; member = member->next)
+for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
 {
-ListAdd(init->list, member->initializer);
+ListAdd(init->__anon1.list, member->initializer);
 member->initializer = (((void *)0));
 }
 }
@@ -15221,16 +17298,16 @@ int subMemberStackPos = 0;
 if(type && type->kind == 12)
 initializerType = Dereference(type);
 else if(type && (type->kind == 9 || type->kind == 10))
-initializerType = type->members.first;
-for(i = (*init->list).first; i; i = i->next)
+initializerType = type->__anon1.__anon1.members.first;
+for(i = (*init->__anon1.list).first; i; i = i->next)
 {
-if(type && type->kind == 8 && type->_class && type->_class->registered)
+if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
 {
-FindNextDataMember(type->_class->registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
+FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
 if(curMember)
 {
 if(!curMember->dataType)
-curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0x0);
+curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
 initializerType = curMember->dataType;
 }
 }
@@ -15238,20 +17315,20 @@ ProcessInitializer(i, initializerType);
 if(initializerType && type && (type->kind == 9 || type->kind == 10))
 initializerType = initializerType->next;
 if(!i->isConstant)
-init->isConstant = 0x0;
+init->isConstant = 0;
 }
 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))
+if(type && type->kind != 12 && type->kind != 9 && type->kind != 10 && (type->kind != 8 || !type->__anon1._class->__anon1.registered || type->__anon1._class->__anon1.registered->type != 1))
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Assigning list initializer to non list\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
 }
 break;
 }
 }
 }
 
-extern struct Symbol * FindType(struct Context * ctx, char *  name);
+extern struct Symbol * FindType(struct Context * ctx, const char *  name);
 
 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
 
@@ -15261,13 +17338,13 @@ switch(spec->type)
 {
 case 0:
 {
-if(spec->specifier == THISCLASS)
+if(spec->__anon1.specifier == THISCLASS)
 {
 if(thisClass)
 {
 spec->type = 1;
-spec->name = ReplaceThisClass(thisClass);
-spec->symbol = FindClass(spec->name);
+spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
+spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
 ProcessSpecifier(spec, declareStruct);
 }
 }
@@ -15275,21 +17352,21 @@ break;
 }
 case 1:
 {
-struct Symbol * symbol = FindType(curContext, spec->name);
+struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
 
 if(symbol)
-DeclareType(symbol->type, 0x1, 0x1);
-else if((symbol = spec->symbol) && symbol->registered && symbol->registered->type == 1 && declareStruct)
-DeclareStruct(spec->name, 0x0);
+DeclareType(symbol->type, 1, 1);
+else if((symbol = spec->__anon1.__anon1.symbol) && symbol->__anon1.registered && symbol->__anon1.registered->type == 1 && declareStruct)
+DeclareStruct(spec->__anon1.__anon1.name, 0);
 break;
 }
 case 2:
 {
 struct Enumerator * e;
 
-if(spec->list)
+if(spec->__anon1.__anon2.list)
 {
-for(e = (*spec->list).first; e; e = e->next)
+for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
 {
 if(e->exp)
 ProcessExpressionType(e->exp);
@@ -15300,12 +17377,11 @@ break;
 case 3:
 case 4:
 {
-if(spec->definitions)
+if(spec->__anon1.__anon2.definitions)
 {
-struct ClassDef * def;
-struct Symbol * symbol = spec->id ? FindClass(spec->id->string) : (((void *)0));
+struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
 
-ProcessClass(spec->definitions, symbol);
+ProcessClass(spec->__anon1.__anon2.definitions, symbol);
 }
 break;
 }
@@ -15317,15 +17393,15 @@ static void ProcessDeclarator(struct Declarator * decl)
 switch(decl->type)
 {
 case 1:
-if(decl->identifier->classSym)
+if(decl->__anon1.identifier->classSym)
 {
-FreeSpecifier(decl->identifier->_class);
-decl->identifier->_class = (((void *)0));
+FreeSpecifier(decl->__anon1.identifier->_class);
+decl->__anon1.identifier->_class = (((void *)0));
 }
 break;
 case 3:
-if(decl->array.exp)
-ProcessExpressionType(decl->array.exp);
+if(decl->__anon1.array.exp)
+ProcessExpressionType(decl->__anon1.array.exp);
 case 0:
 case 2:
 case 4:
@@ -15342,48 +17418,52 @@ if(id && id->_class)
 {
 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(id->_class), param->declarator = (((void *)0)), param);
 
-if(!decl->function.parameters)
-decl->function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->function.parameters), (((void *)0)), param);
+if(!decl->__anon1.function.parameters)
+decl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
 id->_class = (((void *)0));
 }
-if(decl->function.parameters)
+if(decl->__anon1.function.parameters)
 {
 struct TypeName * param;
 
-for(param = (*decl->function.parameters).first; param; param = param->next)
+for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
 {
 if(param->qualifiers && (*param->qualifiers).first)
 {
 struct Specifier * spec = (*param->qualifiers).first;
 
-if(spec && spec->specifier == TYPED_OBJECT)
+if(spec && spec->__anon1.specifier == TYPED_OBJECT)
 {
 struct Declarator * d = param->declarator;
 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);
 
+if(d->type != 5)
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
 FreeList(param->qualifiers, FreeSpecifier);
 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->function.parameters), param, newParam);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
 param = newParam;
 }
-else if(spec && spec->specifier == ANY_OBJECT)
+else if(spec && spec->__anon1.specifier == ANY_OBJECT)
 {
 struct Declarator * d = param->declarator;
 
 FreeList(param->qualifiers, FreeSpecifier);
 param->qualifiers = MkListOne(MkSpecifier(VOID));
+if(d->type != 5)
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
 }
-else if(spec->specifier == THISCLASS)
+else if(spec->__anon1.specifier == THISCLASS)
 {
 if(thisClass)
 {
 spec->type = 1;
-spec->name = ReplaceThisClass(thisClass);
-spec->symbol = FindClass(spec->name);
-ProcessSpecifier(spec, 0x0);
+spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
+spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
+ProcessSpecifier(spec, 0);
 }
 }
 }
@@ -15407,35 +17487,35 @@ switch(decl->type)
 {
 case 1:
 {
-unsigned int declareStruct = 0x0;
+unsigned int declareStruct = 0;
 
-if(decl->declarators)
+if(decl->__anon1.__anon1.declarators)
 {
 struct InitDeclarator * d;
 
-for(d = (*decl->declarators).first; d; d = d->next)
+for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
 {
 struct Type * type, * subType;
 
 ProcessDeclarator(d->declarator);
-type = ProcessType(decl->specifiers, d->declarator);
+type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
 if(d->initializer)
 {
 ProcessInitializer(d->initializer, type);
-if((*decl->declarators).count == 1 && d->initializer->type == 0 && d->initializer->exp->type == 1)
+if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
 {
-if(type->kind == 8 && type->_class == d->initializer->exp->expType->_class)
+if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
 {
-struct Instantiation * inst = d->initializer->exp->instance;
+struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
 
 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
-d->initializer->exp->instance = (((void *)0));
-if(decl->specifiers)
-FreeList(decl->specifiers, FreeSpecifier);
-FreeList(decl->declarators, FreeInitDeclarator);
+d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
+if(decl->__anon1.__anon1.specifiers)
+FreeList(decl->__anon1.__anon1.specifiers, FreeSpecifier);
+FreeList(decl->__anon1.__anon1.declarators, FreeInitDeclarator);
 d = (((void *)0));
 decl->type = 2;
-decl->inst = inst;
+decl->__anon1.inst = inst;
 }
 }
 }
@@ -15443,13 +17523,13 @@ for(subType = type; subType; )
 {
 if(subType->kind == 8)
 {
-declareStruct = 0x1;
+declareStruct = 1;
 break;
 }
 else if(subType->kind == 13)
 break;
 else if(subType->kind == 12)
-subType = subType->arrayType;
+subType = subType->__anon1.__anon4.arrayType;
 else
 break;
 }
@@ -15458,11 +17538,11 @@ if(!d)
 break;
 }
 }
-if(decl->specifiers)
+if(decl->__anon1.__anon1.specifiers)
 {
 struct Specifier * s;
 
-for(s = (*decl->specifiers).first; s; s = s->next)
+for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
 {
 ProcessSpecifier(s, declareStruct);
 }
@@ -15471,20 +17551,20 @@ break;
 }
 case 2:
 {
-ProcessInstantiationType(decl->inst);
+ProcessInstantiationType(decl->__anon1.inst);
 break;
 }
 case 0:
 {
 struct Specifier * spec;
 struct Declarator * d;
-unsigned int declareStruct = 0x0;
+unsigned int declareStruct = 0;
 
-if(decl->declarators)
+if(decl->__anon1.__anon1.declarators)
 {
-for(d = (*decl->declarators).first; d; d = d->next)
+for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
 {
-struct Type * type = ProcessType(decl->specifiers, d->declarator);
+struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
 struct Type * subType;
 
 ProcessDeclarator(d);
@@ -15492,22 +17572,22 @@ for(subType = type; subType; )
 {
 if(subType->kind == 8)
 {
-declareStruct = 0x1;
+declareStruct = 1;
 break;
 }
 else if(subType->kind == 13)
 break;
 else if(subType->kind == 12)
-subType = subType->arrayType;
+subType = subType->__anon1.__anon4.arrayType;
 else
 break;
 }
 FreeType(type);
 }
 }
-if(decl->specifiers)
+if(decl->__anon1.__anon1.specifiers)
 {
-for(spec = (*decl->specifiers).first; spec; spec = spec->next)
+for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
 ProcessSpecifier(spec, declareStruct);
 }
 break;
@@ -15525,38 +17605,36 @@ struct __ecereNameSpace__ecere__sys__OldList * args;
 
 DeclareProperty(prop, setName, getName);
 strcpy(propName, "__ecereProp_");
-FullClassNameCat(propName, prop->_class->fullName, 0x0);
+FullClassNameCat(propName, prop->_class->fullName, 0);
 strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 0x1);
-MangleClassName(propName);
+FullClassNameCat(propName, prop->name, 1);
 strcpy(propNameM, "__ecerePropM_");
-FullClassNameCat(propNameM, prop->_class->fullName, 0x0);
+FullClassNameCat(propNameM, prop->_class->fullName, 0);
 strcat(propNameM, "_");
-FullClassNameCat(propNameM, prop->name, 0x1);
-MangleClassName(propNameM);
+FullClassNameCat(propNameM, prop->name, 1);
 if(prop->isWatchable)
 {
 args = MkList();
 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
 args = MkList();
 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
 }
 {
 args = MkList();
 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
 args = MkList();
 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
 }
-if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->identifier->string, "this"))))
-curFunction->propSet->fireWatchersDone = 0x1;
+if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
+curFunction->propSet->fireWatchersDone = 1;
 }
 
 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
@@ -15581,43 +17659,41 @@ yylloc = stmt->loc;
 switch(stmt->type)
 {
 case 0:
-ProcessStatement(stmt->labeled.stmt);
+ProcessStatement(stmt->__anon1.labeled.stmt);
 break;
 case 1:
-if(stmt->caseStmt.exp)
+if(stmt->__anon1.caseStmt.exp)
 {
-FreeType(stmt->caseStmt.exp->destType);
-stmt->caseStmt.exp->destType = curSwitchType;
+FreeType(stmt->__anon1.caseStmt.exp->destType);
+stmt->__anon1.caseStmt.exp->destType = curSwitchType;
 if(curSwitchType)
 curSwitchType->refCount++;
-ProcessExpressionType(stmt->caseStmt.exp);
-ComputeExpression(stmt->caseStmt.exp);
+ProcessExpressionType(stmt->__anon1.caseStmt.exp);
+ComputeExpression(stmt->__anon1.caseStmt.exp);
 }
-if(stmt->caseStmt.stmt)
-ProcessStatement(stmt->caseStmt.stmt);
+if(stmt->__anon1.caseStmt.stmt)
+ProcessStatement(stmt->__anon1.caseStmt.stmt);
 break;
 case 2:
 {
-if(stmt->compound.context)
+if(stmt->__anon1.compound.context)
 {
 struct Declaration * decl;
 struct Statement * s;
 struct Statement * prevCompound = curCompound;
 struct Context * prevContext = curContext;
 
-if(!stmt->compound.isSwitch)
-{
+if(!stmt->__anon1.compound.isSwitch)
 curCompound = stmt;
-curContext = stmt->compound.context;
-}
-if(stmt->compound.declarations)
+curContext = stmt->__anon1.compound.context;
+if(stmt->__anon1.compound.declarations)
 {
-for(decl = (*stmt->compound.declarations).first; decl; decl = decl->next)
+for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
 ProcessDeclaration(decl);
 }
-if(stmt->compound.statements)
+if(stmt->__anon1.compound.statements)
 {
-for(s = (*stmt->compound.statements).first; s; s = s->next)
+for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
 ProcessStatement(s);
 }
 curContext = prevContext;
@@ -15629,9 +17705,9 @@ case 3:
 {
 struct Expression * exp;
 
-if(stmt->expressions)
+if(stmt->__anon1.expressions)
 {
-for(exp = (*stmt->expressions).first; exp; exp = exp->next)
+for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
 ProcessExpressionType(exp);
 }
 break;
@@ -15640,28 +17716,28 @@ case 4:
 {
 struct Expression * exp;
 
-FreeType(((struct Expression *)(*stmt->ifStmt.exp).last)->destType);
-((struct Expression *)(*stmt->ifStmt.exp).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->ifStmt.exp).last)->destType->truth = 0x1;
-for(exp = (*stmt->ifStmt.exp).first; exp; exp = exp->next)
+FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
+((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
+for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
 {
 ProcessExpressionType(exp);
 }
-if(stmt->ifStmt.stmt)
-ProcessStatement(stmt->ifStmt.stmt);
-if(stmt->ifStmt.elseStmt)
-ProcessStatement(stmt->ifStmt.elseStmt);
+if(stmt->__anon1.ifStmt.stmt)
+ProcessStatement(stmt->__anon1.ifStmt.stmt);
+if(stmt->__anon1.ifStmt.elseStmt)
+ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
 break;
 }
 case 5:
 {
 struct Type * oldSwitchType = curSwitchType;
 
-if(stmt->switchStmt.exp)
+if(stmt->__anon1.switchStmt.exp)
 {
 struct Expression * exp;
 
-for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
+for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
 {
 if(!exp->next)
 {
@@ -15671,84 +17747,84 @@ if(!exp->next)
 curSwitchType = exp->expType;
 }
 }
-ProcessStatement(stmt->switchStmt.stmt);
+ProcessStatement(stmt->__anon1.switchStmt.stmt);
 curSwitchType = oldSwitchType;
 break;
 }
 case 6:
 {
-if(stmt->whileStmt.exp)
+if(stmt->__anon1.whileStmt.exp)
 {
 struct Expression * exp;
 
-FreeType(((struct Expression *)(*stmt->whileStmt.exp).last)->destType);
-((struct Expression *)(*stmt->whileStmt.exp).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->whileStmt.exp).last)->destType->truth = 0x1;
-for(exp = (*stmt->whileStmt.exp).first; exp; exp = exp->next)
+FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
+((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
+for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
 {
 ProcessExpressionType(exp);
 }
 }
-if(stmt->whileStmt.stmt)
-ProcessStatement(stmt->whileStmt.stmt);
+if(stmt->__anon1.whileStmt.stmt)
+ProcessStatement(stmt->__anon1.whileStmt.stmt);
 break;
 }
 case 7:
 {
-if(stmt->doWhile.exp)
+if(stmt->__anon1.doWhile.exp)
 {
 struct Expression * exp;
 
-if((*stmt->doWhile.exp).last)
+if((*stmt->__anon1.doWhile.exp).last)
 {
-FreeType(((struct Expression *)(*stmt->doWhile.exp).last)->destType);
-((struct Expression *)(*stmt->doWhile.exp).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->doWhile.exp).last)->destType->truth = 0x1;
+FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
+((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
 }
-for(exp = (*stmt->doWhile.exp).first; exp; exp = exp->next)
+for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
 {
 ProcessExpressionType(exp);
 }
 }
-if(stmt->doWhile.stmt)
-ProcessStatement(stmt->doWhile.stmt);
+if(stmt->__anon1.doWhile.stmt)
+ProcessStatement(stmt->__anon1.doWhile.stmt);
 break;
 }
 case 8:
 {
 struct Expression * exp;
 
-if(stmt->forStmt.init)
-ProcessStatement(stmt->forStmt.init);
-if(stmt->forStmt.check && stmt->forStmt.check->expressions)
+if(stmt->__anon1.forStmt.init)
+ProcessStatement(stmt->__anon1.forStmt.init);
+if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
 {
-FreeType(((struct Expression *)(*stmt->forStmt.check->expressions).last)->destType);
-((struct Expression *)(*stmt->forStmt.check->expressions).last)->destType = MkClassType("bool");
-((struct Expression *)(*stmt->forStmt.check->expressions).last)->destType->truth = 0x1;
+FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
+((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
+((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
 }
-if(stmt->forStmt.check)
-ProcessStatement(stmt->forStmt.check);
-if(stmt->forStmt.increment)
+if(stmt->__anon1.forStmt.check)
+ProcessStatement(stmt->__anon1.forStmt.check);
+if(stmt->__anon1.forStmt.increment)
 {
-for(exp = (*stmt->forStmt.increment).first; exp; exp = exp->next)
+for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
 ProcessExpressionType(exp);
 }
-if(stmt->forStmt.stmt)
-ProcessStatement(stmt->forStmt.stmt);
+if(stmt->__anon1.forStmt.stmt)
+ProcessStatement(stmt->__anon1.forStmt.stmt);
 break;
 }
 case 18:
 {
-struct Identifier * id = stmt->forEachStmt.id;
-struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->forEachStmt.exp;
-struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->forEachStmt.filter;
-struct Statement * block = stmt->forEachStmt.stmt;
+struct Identifier * id = stmt->__anon1.forEachStmt.id;
+struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
+struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
+struct Statement * block = stmt->__anon1.forEachStmt.stmt;
 char iteratorType[1024];
 struct Type * source;
 struct Expression * e;
-unsigned int isBuiltin = exp && (*exp).last && (((struct Expression *)(*exp).last)->type == 37 || (((struct Expression *)(*exp).last)->type == 11 && ((struct Expression *)(*exp).last)->cast.exp->type == 37));
+unsigned int isBuiltin = exp && (*exp).last && (((struct Expression *)(*exp).last)->type == 35 || (((struct Expression *)(*exp).last)->type == 11 && ((struct Expression *)(*exp).last)->__anon1.cast.exp->type == 35));
 struct Expression * arrayExp;
-char * typeString = (((void *)0));
+const char * typeString = (((void *)0));
 int builtinCount = 0;
 
 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
@@ -15756,79 +17832,76 @@ for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
 if(!e->next)
 {
 FreeType(e->destType);
-e->destType = ProcessTypeString("Container", 0x0);
+e->destType = ProcessTypeString("Container", 0);
 }
 if(!isBuiltin || e->next)
 ProcessExpressionType(e);
 }
 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
-if(isBuiltin || (source && source->kind == 8 && source->_class && source->_class->registered && source->_class->registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, containerClass)))
+if(isBuiltin || (source && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, containerClass)))
 {
-struct __ecereNameSpace__ecere__com__Class * _class = source ? source->_class->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
 struct Symbol * symbol;
 struct Expression * expIt = (((void *)0));
-unsigned int isMap = 0x0, isArray = 0x0, isLinkList = 0x0, isList = 0x0, isCustomAVLTree = 0x0, isAVLTree = 0x0;
+unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
 
 stmt->type = 2;
-stmt->compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
-stmt->compound.context->parent = curContext;
-curContext = stmt->compound.context;
-if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, customAVLTreeClass))
+stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
+stmt->__anon1.compound.context->parent = curContext;
+curContext = stmt->__anon1.compound.context;
+if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
 {
 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
-struct __ecereNameSpace__ecere__com__Class * avlTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "AVLTree");
 
-isCustomAVLTree = 0x1;
-if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, avlTreeClass))
-isAVLTree = 0x1;
-else if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, mapClass))
-isMap = 0x1;
+isCustomAVLTree = 1;
+if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
+isMap = 1;
 }
-else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, arrayClass))
-isArray = 0x1;
-else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, linkListClass))
+else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
+isArray = 1;
+else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
 {
 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
 
-isLinkList = 0x1;
-isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->_class->registered, listClass);
+isLinkList = 1;
+isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
 }
 if(isArray)
 {
 struct Declarator * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
-decl = SpecDeclFromString(_class->templateArgs[2].dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
-stmt->compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
-ListAdd(stmt->compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->_class->registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
+decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
+stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
+ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
 }
 else if(isBuiltin)
 {
 struct Type * type = (((void *)0));
 char typeStringBuf[1024];
 
-arrayExp = (((struct Expression *)(*exp).last)->type == 37) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->cast.exp;
+arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
 if(((struct Expression *)(*exp).last)->type == 11)
 {
-struct TypeName * typeName = ((struct Expression *)(*exp).last)->cast.typeName;
+struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
 
 if(typeName)
 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
 }
-if(arrayExp->destType && arrayExp->destType->kind == 8 && arrayExp->destType->_class && arrayExp->destType->_class->registered && arrayExp->destType->_class->registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(arrayExp->destType->_class->registered, containerClass) && arrayExp->destType->_class->registered->templateArgs)
+if(arrayExp->destType && arrayExp->destType->kind == 8 && arrayExp->destType->__anon1._class && arrayExp->destType->__anon1._class->__anon1.registered && arrayExp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(arrayExp->destType->__anon1._class->__anon1.registered, containerClass) && arrayExp->destType->__anon1._class->__anon1.registered->templateArgs)
 {
-struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
 
-typeString = templateClass->templateArgs[2].dataTypeString;
+typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
 }
-else if(arrayExp->list)
+else if(arrayExp->__anon1.list)
 {
 struct Expression * e;
 
-for(e = (*arrayExp->list).first; e; e = e->next)
+for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
 {
 ProcessExpressionType(e);
 if(e->expType)
@@ -15840,16 +17913,16 @@ type->refCount++;
 }
 else
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0x0))
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
 {
 FreeType(type);
 type = e->expType;
 e->expType = (((void *)0));
-e = (*arrayExp->list).first;
+e = (*arrayExp->__anon1.list).first;
 ProcessExpressionType(e);
 if(e->expType)
 {
-if(!MatchTypeExpression(e, type, (((void *)0)), 0x0))
+if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
 {
 FreeType(e->expType);
 e->expType = (((void *)0));
@@ -15870,7 +17943,7 @@ e->expType = (((void *)0));
 if(type)
 {
 typeStringBuf[0] = '\0';
-PrintType(type, typeStringBuf, 0x0, 0x1);
+PrintType(type, typeStringBuf, 01);
 typeString = typeStringBuf;
 FreeType(type);
 }
@@ -15881,32 +17954,32 @@ struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
 struct Declarator * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
-if(arrayExp->list)
+if(arrayExp->__anon1.list)
 {
 struct Expression * e;
 
-builtinCount = (*arrayExp->list).count;
-type = ProcessTypeString(typeString, 0x0);
-while(e = (*arrayExp->list).first)
+builtinCount = (*arrayExp->__anon1.list).count;
+type = ProcessTypeString(typeString, 0);
+while((e = (*arrayExp->__anon1.list).first))
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->list), e);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
 e->destType = type;
 type->refCount++;
 ProcessExpressionType(e);
 ListAdd(initializers, MkInitializerAssignment(e));
 }
 FreeType(type);
-(__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->list), arrayExp->list = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
 }
 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
-stmt->compound.declarations = MkListOne(MkDeclaration(CopyList(specs, CopySpecifier), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
-ListAdd(stmt->compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
+stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, CopySpecifier), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
+ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
 FreeList(exp, FreeExpression);
 }
 else
 {
-arrayExp->expType = ProcessTypeString("Container", 0x0);
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Couldn't determine type of array elements\n", (((void *)0))));
+arrayExp->expType = ProcessTypeString("Container", 0);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
 }
 }
 else if(isLinkList && !isList)
@@ -15914,22 +17987,54 @@ else if(isLinkList && !isList)
 struct Declarator * decl;
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
 
-decl = SpecDeclFromString(_class->templateArgs[3].dataTypeString, specs, MkDeclaratorIdentifier(id));
-stmt->compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
-ListAdd(stmt->compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->_class->registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
+decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
+stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
+ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
 }
 else if(_class->templateArgs)
 {
 if(isMap)
-sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].dataTypeString, _class->templateArgs[6].dataTypeString);
+sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
 else
-sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].dataTypeString, _class->templateArgs[1].dataTypeString);
-stmt->compound.declarations = MkListOne(MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName(iteratorType)), MkExpIdentifier(id), MkListOne(MkMembersInitList(MkListOne(MkMemberInit(isMap ? MkListOne(MkIdentifier("map")) : (((void *)0)), MkInitializerAssignment(MkExpBrackets(exp)))))))));
+sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
+stmt->__anon1.compound.declarations = MkListOne(MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName(iteratorType)), MkExpIdentifier(id), MkListOne(MkMembersInitList(MkListOne(MkMemberInit(isMap ? MkListOne(MkIdentifier("map")) : (((void *)0)), MkInitializerAssignment(MkExpBrackets(exp)))))))));
 }
-symbol = FindSymbol(id->string, curContext, curContext, 0x0, 0x0);
-if(block && block->type == 2 && block->compound.context)
+symbol = FindSymbol(id->string, curContext, curContext, 00);
+if(block)
 {
-block->compound.context->parent = stmt->compound.context;
+switch(block->type)
+{
+case 2:
+if(block->__anon1.compound.context)
+block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 4:
+if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
+block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
+block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 5:
+if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
+block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 6:
+if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
+block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 7:
+if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
+block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 8:
+if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
+block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+case 18:
+if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
+block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
+break;
+}
 }
 if(filter)
 {
@@ -15937,57 +18042,57 @@ 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)), 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);
+stmt->__anon1.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->__anon1.compound.statements).first)->__anon1.forStmt.init);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
+ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
 }
 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)), 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);
+stmt->__anon1.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->__anon1.compound.statements).first)->__anon1.forStmt.init);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
+ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
 }
 else if(isLinkList && !isList)
 {
-struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].dataTypeString);
+struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
 
-if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].dataTypeString && !strcmp(_class->templateArgs[5].dataTypeString, "LT::link"))
+if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
 {
-stmt->compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("next")))), block));
+stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("next")))), block));
 }
 else
 {
 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
-struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].dataTypeString, specs, (((void *)0)));
+struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
 
-stmt->compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpCast(MkTypeName(specs, decl), MkExpCall(MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("GetNext")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("IteratorPointer")), (((void *)0))), MkExpIdentifier(CopyIdentifier(id)))))))), block));
+stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpCast(MkTypeName(specs, decl), MkExpCall(MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("GetNext")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("IteratorPointer")), (((void *)0))), MkExpIdentifier(CopyIdentifier(id)))))))), 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);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
+ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
+ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
 }
 else
 {
-stmt->compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
+stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
 }
 ProcessExpressionType(expIt);
-if((*stmt->compound.declarations).first)
-ProcessDeclaration((*stmt->compound.declarations).first);
+if((*stmt->__anon1.compound.declarations).first)
+ProcessDeclaration((*stmt->__anon1.compound.declarations).first);
 if(symbol)
 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
 ProcessStatement(stmt);
-curContext = stmt->compound.context->parent;
+curContext = stmt->__anon1.compound.context->parent;
 break;
 }
 else
 {
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Expression is not a container\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
 }
 break;
 }
@@ -16001,16 +18106,16 @@ case 12:
 {
 struct Expression * exp;
 
-if(stmt->expressions)
+if(stmt->__anon1.expressions)
 {
-for(exp = (*stmt->expressions).first; exp; exp = exp->next)
+for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
 {
 if(!exp->next)
 {
 if(curFunction && !curFunction->type)
 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
 FreeType(exp->destType);
-exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->returnType : (((void *)0));
+exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
 if(exp->destType)
 exp->destType->refCount++;
 }
@@ -16021,28 +18126,28 @@ break;
 }
 case 14:
 {
-ProcessDeclaration(stmt->decl);
+ProcessDeclaration(stmt->__anon1.decl);
 break;
 }
 case 13:
 {
 struct AsmField * field;
 
-if(stmt->asmStmt.inputFields)
+if(stmt->__anon1.asmStmt.inputFields)
 {
-for(field = (*stmt->asmStmt.inputFields).first; field; field = field->next)
+for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
 if(field->expression)
 ProcessExpressionType(field->expression);
 }
-if(stmt->asmStmt.outputFields)
+if(stmt->__anon1.asmStmt.outputFields)
 {
-for(field = (*stmt->asmStmt.outputFields).first; field; field = field->next)
+for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
 if(field->expression)
 ProcessExpressionType(field->expression);
 }
-if(stmt->asmStmt.clobberedFields)
+if(stmt->__anon1.asmStmt.clobberedFields)
 {
-for(field = (*stmt->asmStmt.clobberedFields).first; field; field = field->next)
+for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
 {
 if(field->expression)
 ProcessExpressionType(field->expression);
@@ -16053,9 +18158,9 @@ break;
 case 17:
 {
 struct PropertyWatch * propWatch;
-struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->_watch.watches;
-struct Expression * object = stmt->_watch.object;
-struct Expression * watcher = stmt->_watch.watcher;
+struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
+struct Expression * object = stmt->__anon1._watch.object;
+struct Expression * watcher = stmt->__anon1._watch.watcher;
 
 if(watcher)
 ProcessExpressionType(watcher);
@@ -16069,13 +18174,13 @@ struct External * external = curExternal;
 struct Context * context = curContext;
 
 stmt->type = 3;
-stmt->expressions = MkList();
+stmt->__anon1.expressions = MkList();
 curExternal = external->prev;
 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
 {
 struct ClassFunction * func;
 char watcherName[1024];
-struct __ecereNameSpace__ecere__com__Class * watcherClass = watcher ? ((watcher->expType && watcher->expType->kind == 8 && watcher->expType->_class) ? watcher->expType->_class->registered : (((void *)0))) : thisClass;
+struct __ecereNameSpace__ecere__com__Class * watcherClass = watcher ? ((watcher->expType && watcher->expType->kind == 8 && watcher->expType->__anon1._class) ? watcher->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
 struct External * createdExternal;
 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
 
@@ -16093,21 +18198,21 @@ strcat(watcherName, "_");
 strcat(watcherName, propID->string);
 }
 }
-if(object && object->expType && object->expType->kind == 8 && object->expType->_class && object->expType->_class->registered)
+if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
 {
-func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((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->__anon1._class->string)), MkDeclaratorIdentifier(MkIdentifier("value"))))), (((void *)0)));
 ProcessClassFunctionBody(func, propWatch->compound);
 propWatch->compound = (((void *)0));
-createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 0x1);
+createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
 createdExternal->symbol->idCode = external->symbol->idCode;
 curExternal = createdExternal;
-ProcessFunction(createdExternal->function);
+ProcessFunction(createdExternal->__anon1.function);
 {
-struct Declaration * decl = MkDeclaration(CopyList(createdExternal->function->specifiers, CopySpecifier), MkListOne(MkInitDeclarator(CopyDeclarator(createdExternal->function->declarator), (((void *)0)))));
+struct Declaration * decl = MkDeclaration(CopyList(createdExternal->__anon1.function->specifiers, CopySpecifier), MkListOne(MkInitDeclarator(CopyDeclarator(createdExternal->__anon1.function->declarator), (((void *)0)))));
 
-externalDecl->declaration = decl;
-if(decl->symbol && !decl->symbol->pointerExternal)
-decl->symbol->pointerExternal = externalDecl;
+externalDecl->__anon1.declaration = decl;
+if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
+decl->symbol->__anon2.__anon1.pointerExternal = externalDecl;
 }
 if(propWatch->deleteWatch)
 {
@@ -16116,11 +18221,11 @@ struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
 ListAdd(args, CopyExpression(object));
 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
 }
 else
 {
-struct __ecereNameSpace__ecere__com__Class * _class = object->expType->_class->registered;
+struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
 struct Identifier * propID;
 
 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
@@ -16135,22 +18240,22 @@ struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
 
 DeclareProperty(prop, setName, getName);
 strcpy(propName, "__ecereProp_");
-FullClassNameCat(propName, prop->_class->fullName, 0x0);
+FullClassNameCat(propName, prop->_class->fullName, 0);
 strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 0x1);
+FullClassNameCat(propName, prop->name, 1);
 ListAdd(args, CopyExpression(object));
 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), prop->name, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
 }
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Invalid watched object\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
 }
 curExternal = external;
 curContext = context;
@@ -16161,7 +18266,7 @@ FreeExpression(object);
 FreeList(watches, FreePropertyWatch);
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "No observer specified and not inside a _class\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a _class\n", (((void *)0))));
 }
 else
 {
@@ -16174,22 +18279,22 @@ break;
 }
 case 15:
 {
-struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->_watch.watches;
-struct Expression * object = stmt->_watch.object;
+struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
+struct Expression * object = stmt->__anon1._watch.object;
 struct __ecereNameSpace__ecere__com__Class * _class;
 
 if(object)
 ProcessExpressionType(object);
 if(inCompiler)
 {
-_class = object ? ((object->expType && object->expType->kind == 8 && object->expType->_class) ? object->expType->_class->registered : (((void *)0))) : thisClass;
+_class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
 if(_class)
 {
 struct Identifier * propID;
 
 stmt->type = 3;
-stmt->expressions = MkList();
-if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->identifier->string, "this"))))
+stmt->__anon1.expressions = MkList();
+if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
 {
 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
 }
@@ -16207,7 +18312,7 @@ if(prop)
 CreateFireWatcher(prop, object, stmt);
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
 }
 else
@@ -16231,15 +18336,15 @@ FreeExpression(object);
 FreeList(watches, FreeIdentifier);
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Invalid object specified and not inside a class\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
 }
 break;
 }
 case 16:
 {
-struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->_watch.watches;
-struct Expression * object = stmt->_watch.object;
-struct Expression * watcher = stmt->_watch.watcher;
+struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
+struct Expression * object = stmt->__anon1._watch.object;
+struct Expression * watcher = stmt->__anon1._watch.watcher;
 struct __ecereNameSpace__ecere__com__Class * _class;
 
 if(object)
@@ -16248,7 +18353,7 @@ if(watcher)
 ProcessExpressionType(watcher);
 if(inCompiler)
 {
-_class = (object && object->expType && object->expType->kind == 8 && object->expType->_class) ? object->expType->_class->registered : (((void *)0));
+_class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
 if(watcher || thisClass)
 {
 if(_class)
@@ -16256,7 +18361,7 @@ if(_class)
 struct Identifier * propID;
 
 stmt->type = 3;
-stmt->expressions = MkList();
+stmt->__anon1.expressions = MkList();
 if(!watches)
 {
 struct __ecereNameSpace__ecere__sys__OldList * args;
@@ -16265,7 +18370,7 @@ args = MkList();
 ListAdd(args, CopyExpression(object));
 ListAdd(args, MkExpConstant("0"));
 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
 }
 else
 {
@@ -16281,17 +18386,16 @@ struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
 
 DeclareProperty(prop, setName, getName);
 strcpy(propName, "__ecereProp_");
-FullClassNameCat(propName, prop->_class->fullName, 0x0);
+FullClassNameCat(propName, prop->_class->fullName, 0);
 strcat(propName, "_");
-FullClassNameCat(propName, prop->name, 0x1);
-MangleClassName(propName);
+FullClassNameCat(propName, prop->name, 1);
 ListAdd(args, CopyExpression(object));
 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
-ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
+ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), prop->name, _class->fullName);
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
 }
 }
 if(object)
@@ -16301,10 +18405,10 @@ FreeExpression(watcher);
 FreeList(watches, FreeIdentifier);
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Invalid object specified and not inside a class\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
 }
 else
-Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "No observer specified and not inside a class\n", (((void *)0))));
+Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
 }
 break;
 }
@@ -16313,9 +18417,9 @@ break;
 
 extern struct Expression * QBrackets(struct Expression * exp);
 
-extern struct TypeName * QMkType(char *  spec, struct Declarator * decl);
+extern struct TypeName * QMkType(const char *  spec, struct Declarator * decl);
 
-extern struct Declarator * QMkPtrDecl(char *  id);
+extern struct Declarator * QMkPtrDecl(const char *  id);
 
 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
 
@@ -16332,15 +18436,15 @@ struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
 struct Context * oldTopContext = topContext;
 
 yylloc = function->loc;
-if(type && type->thisClass)
+if(type && type->__anon1.__anon2.thisClass)
 {
-struct Symbol * classSym = type->thisClass;
-struct __ecereNameSpace__ecere__com__Class * _class = type->thisClass->registered;
+struct Symbol * classSym = type->__anon1.__anon2.thisClass;
+struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
 char className[1024];
 char structName[1024];
 struct Declarator * funcDecl;
 struct Symbol * thisSymbol;
-unsigned int typedObject = 0x0;
+unsigned int typedObject = 0;
 
 if(_class && !_class->base)
 {
@@ -16348,56 +18452,55 @@ _class = currentClass;
 if(_class && !_class->symbol)
 _class->symbol = FindClass(_class->fullName);
 classSym = _class ? _class->symbol : (((void *)0));
-typedObject = 0x1;
+typedObject = 1;
 }
 thisClass = _class;
 if(inCompiler && _class)
 {
 if(type->kind == 11)
 {
-if(symbol->type->params.count == 1 && ((struct Type *)symbol->type->params.first)->kind == 0)
+if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
 {
-struct Type * param = symbol->type->params.first;
+struct Type * param = symbol->type->__anon1.__anon2.params.first;
 
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->params, param);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
 FreeType(param);
 }
 if(type->classObjectType != 1)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->params, (((void *)0)), MkClassType(_class->fullName));
-symbol->type->staticMethod = 0x1;
-symbol->type->thisClass = (((void *)0));
-symbol->type->extraParam = 0x0;
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
+symbol->type->__anon1.__anon2.staticMethod = 1;
+symbol->type->__anon1.__anon2.thisClass = (((void *)0));
+symbol->type->extraParam = 0;
 }
 }
 strcpy(className, "__ecereClass_");
-FullClassNameCat(className, _class->fullName, 0x1);
-MangleClassName(className);
+FullClassNameCat(className, _class->fullName, 1);
 structName[0] = (char)0;
-FullClassNameCat(structName, _class->fullName, 0x0);
+FullClassNameCat(structName, _class->fullName, 0);
 funcDecl = GetFuncDecl(function->declarator);
 if(funcDecl)
 {
-if(funcDecl->function.parameters && (*funcDecl->function.parameters).count == 1)
+if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
 {
-struct TypeName * param = (*funcDecl->function.parameters).first;
+struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
 
-if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->specifier == VOID && !param->declarator)
+if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->function.parameters), param);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
 FreeTypeName(param);
 }
 }
 if(!function->propertyNoThis)
 {
-struct TypeName * thisParam;
+struct TypeName * thisParam = (((void *)0));
 
 if(type->classObjectType != 1)
 {
 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
-if(!funcDecl->function.parameters)
-funcDecl->function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), thisParam);
+if(!funcDecl->__anon1.function.parameters)
+funcDecl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
 if(typedObject)
 {
@@ -16411,36 +18514,36 @@ struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New
 
 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
 });
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), thisParam);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
 }
 }
-if(symbol && symbol->pointerExternal && symbol->pointerExternal->type == 1)
+if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
 {
-struct InitDeclarator * initDecl = (*symbol->pointerExternal->declaration->declarators).first;
+struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
 
 funcDecl = GetFuncDecl(initDecl->declarator);
 if(funcDecl)
 {
-if(funcDecl->function.parameters && (*funcDecl->function.parameters).count == 1)
+if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
 {
-struct TypeName * param = (*funcDecl->function.parameters).first;
+struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
 
-if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->specifier == VOID && !param->declarator)
+if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
 {
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->function.parameters), param);
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
 FreeTypeName(param);
 }
 }
 if(type->classObjectType != 1)
 {
-if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->externalSet)
+if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
 {
 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
 
-if(!funcDecl->function.parameters)
-funcDecl->function.parameters = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->function.parameters), (((void *)0)), thisParam);
+if(!funcDecl->__anon1.function.parameters)
+funcDecl->__anon1.function.parameters = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
 }
 }
 }
@@ -16455,11 +18558,12 @@ struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(_
 
 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
 });
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 if(typedObject && thisSymbol->type)
 {
 thisSymbol->type->classObjectType = 2;
 thisSymbol->type->byReference = type->byReference;
+thisSymbol->type->typedByReference = type->byReference;
 }
 }
 }
@@ -16490,13 +18594,12 @@ struct Initializer * initializer;
 struct Expression * exp, * bytePtr;
 
 strcpy(pointerName, "__ecerePointer_");
-FullClassNameCat(pointerName, _class->fullName, 0x0);
+FullClassNameCat(pointerName, _class->fullName, 0);
 {
 char className[1024];
 
 strcpy(className, "__ecereClass_");
-FullClassNameCat(className, classSym->string, 0x1);
-MangleClassName(className);
+FullClassNameCat(className, classSym->string, 1);
 DeclareClass(classSym, className);
 }
 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
@@ -16515,7 +18618,7 @@ exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
 exp->expType = __extension__ ({
 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
-__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->type = __extension__ ({
+__ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
 
 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
@@ -16528,14 +18631,14 @@ initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrU
 {
 struct Context * prevContext = curContext;
 
-curContext = function->body->compound.context;
+curContext = function->body->__anon1.compound.context;
 decl = MkDeclaration(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
 curContext = prevContext;
 }
 decl->symbol = (((void *)0));
-if(!function->body->compound.declarations)
-function->body->compound.declarations = MkList();
-__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->compound.declarations), (((void *)0)), decl);
+if(!function->body->__anon1.compound.declarations)
+function->body->__anon1.compound.declarations = MkList();
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
 }
 }
 }
@@ -16546,9 +18649,9 @@ if(id)
 {
 FreeSpecifier(id->_class);
 id->_class = (((void *)0));
-if(symbol && symbol->pointerExternal && symbol->pointerExternal->type == 1)
+if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
 {
-struct InitDeclarator * initDecl = (*symbol->pointerExternal->declaration->declarators).first;
+struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
 
 id = GetDeclId(initDecl->declarator);
 FreeSpecifier(id->_class);
@@ -16556,7 +18659,7 @@ id->_class = (((void *)0));
 }
 }
 if(function->body)
-topContext = function->body->compound.context;
+topContext = function->body->__anon1.compound.context;
 {
 struct FunctionDefinition * oldFunction = curFunction;
 
@@ -16569,11 +18672,11 @@ struct Statement * prevCompound = curCompound;
 struct Context * prevContext = curContext;
 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
 
-if(!function->body->compound.statements)
-function->body->compound.statements = MkList();
-ListAdd(function->body->compound.statements, fireWatchers);
+if(!function->body->__anon1.compound.statements)
+function->body->__anon1.compound.statements = MkList();
+ListAdd(function->body->__anon1.compound.statements, fireWatchers);
 curCompound = function->body;
-curContext = function->body->compound.context;
+curContext = function->body->__anon1.compound.context;
 ProcessStatement(fireWatchers);
 curContext = prevContext;
 curCompound = prevCompound;
@@ -16596,24 +18699,24 @@ static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definiti
 {
 struct ClassDef * def;
 struct External * external = curExternal;
-struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->registered : (((void *)0));
+struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
 
 for(def = definitions->first; def; def = def->next)
 {
 if(def->type == 0)
 {
-if(def->function->declarator)
-curExternal = def->function->declarator->symbol->pointerExternal;
+if(def->__anon1.function->declarator)
+curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
 else
 curExternal = external;
-ProcessFunction((struct FunctionDefinition *)def->function);
+ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
 }
 else if(def->type == 2)
 {
-if(def->decl->type == 2)
+if(def->__anon1.decl->type == 2)
 {
 thisClass = regClass;
-ProcessInstantiationType(def->decl->inst);
+ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
 thisClass = (((void *)0));
 }
 else
@@ -16622,17 +18725,17 @@ struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
 
 if(regClass)
 thisClass = regClass;
-ProcessDeclaration(def->decl);
+ProcessDeclaration(def->__anon1.decl);
 thisClass = backThisClass;
 }
 }
-else if(def->type == 1 && def->defProperties)
+else if(def->type == 1 && def->__anon1.defProperties)
 {
 struct MemberInit * defProperty;
 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(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
-for(defProperty = (*def->defProperties).first; defProperty; defProperty = defProperty->next)
+for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
 {
 thisClass = regClass;
 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
@@ -16641,9 +18744,9 @@ thisClass = (((void *)0));
 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 FreeSymbol(thisSymbol);
 }
-else if(def->type == 3 && def->propertyDef)
+else if(def->type == 3 && def->__anon1.propertyDef)
 {
-struct PropertyDef * prop = def->propertyDef;
+struct PropertyDef * prop = def->__anon1.propertyDef;
 
 thisClass = regClass;
 if(prop->setStmt)
@@ -16652,9 +18755,9 @@ if(regClass)
 {
 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 }
-curExternal = prop->symbol ? prop->symbol->externalSet : (((void *)0));
+curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
 ProcessStatement(prop->setStmt);
 }
 if(prop->getStmt)
@@ -16663,9 +18766,9 @@ if(regClass)
 {
 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 }
-curExternal = prop->symbol ? prop->symbol->externalGet : (((void *)0));
+curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
 ProcessStatement(prop->getStmt);
 }
 if(prop->issetStmt)
@@ -16674,23 +18777,23 @@ if(regClass)
 {
 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 }
-curExternal = prop->symbol ? prop->symbol->externalIsSet : (((void *)0));
+curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
 ProcessStatement(prop->issetStmt);
 }
 thisClass = (((void *)0));
 }
-else if(def->type == 4 && def->propertyWatch)
+else if(def->type == 4 && def->__anon1.propertyWatch)
 {
-struct PropertyWatch * propertyWatch = def->propertyWatch;
+struct PropertyWatch * propertyWatch = def->__anon1.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 = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
 
-__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
+__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
 curExternal = (((void *)0));
 ProcessStatement(propertyWatch->compound);
 }
@@ -16699,7 +18802,7 @@ thisClass = (((void *)0));
 }
 }
 
-void DeclareFunctionUtil(char * s)
+void DeclareFunctionUtil(const char * s)
 {
 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
 
@@ -16710,7 +18813,7 @@ 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);
+FullClassNameCat(name, s, 0);
 DeclareFunction(function, name);
 }
 }
@@ -16729,11 +18832,11 @@ for(external = (*ast).first; external; external = external->next)
 {
 if(external->type == 1)
 {
-struct Declaration * decl = external->declaration;
+struct Declaration * decl = external->__anon1.declaration;
 
 if(decl)
 {
-struct __ecereNameSpace__ecere__sys__OldList * decls = decl->declarators;
+struct __ecereNameSpace__ecere__sys__OldList * decls = decl->__anon1.__anon1.declarators;
 
 if(decls)
 {
@@ -16745,7 +18848,7 @@ struct Declarator * declarator = initDecl->declarator;
 
 if(declarator && declarator->type == 1)
 {
-struct Identifier * id = declarator->identifier;
+struct Identifier * id = declarator->__anon1.identifier;
 
 if(id && id->string)
 {
@@ -16761,6 +18864,12 @@ after = external;
 }
 }
 }
+{
+struct External * e = MkExternalDeclaration(MkDeclaration(MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Instance"), (((void *)0)))), (((void *)0))));
+
+__ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, e);
+after = e;
+}
 temp->symbol = __extension__ ({
 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
 
@@ -16772,33 +18881,42 @@ DeclareFunctionUtil("eSystem_New");
 DeclareFunctionUtil("eSystem_New0");
 DeclareFunctionUtil("eSystem_Renew");
 DeclareFunctionUtil("eSystem_Renew0");
+DeclareFunctionUtil("eSystem_Delete");
 DeclareFunctionUtil("eClass_GetProperty");
-DeclareStruct("ecere::com::Class", 0x0);
-DeclareStruct("ecere::com::Instance", 0x0);
-DeclareStruct("ecere::com::Property", 0x0);
-DeclareStruct("ecere::com::DataMember", 0x0);
-DeclareStruct("ecere::com::Method", 0x0);
-DeclareStruct("ecere::com::SerialBuffer", 0x0);
-DeclareStruct("ecere::com::ClassTemplateArgument", 0x0);
+DeclareFunctionUtil("eClass_SetProperty");
+DeclareFunctionUtil("eInstance_FireSelfWatchers");
+DeclareFunctionUtil("eInstance_SetMethod");
+DeclareFunctionUtil("eInstance_IncRef");
+DeclareFunctionUtil("eInstance_StopWatching");
+DeclareFunctionUtil("eInstance_Watch");
+DeclareFunctionUtil("eInstance_FireWatchers");
+DeclareStruct("ecere::com::Class", 0);
+DeclareStruct("ecere::com::Instance", 0);
+DeclareStruct("ecere::com::Property", 0);
+DeclareStruct("ecere::com::DataMember", 0);
+DeclareStruct("ecere::com::Method", 0);
+DeclareStruct("ecere::com::SerialBuffer", 0);
+DeclareStruct("ecere::com::ClassTemplateArgument", 0);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), temp);
 for(external = (*ast).first; external; external = external->next)
 {
 afterExternal = curExternal = external;
 if(external->type == 0)
 {
-currentClass = external->function->_class;
-ProcessFunction(external->function);
+currentClass = external->__anon1.function->_class;
+ProcessFunction(external->__anon1.function);
 }
 else if(external->type == 1)
 {
 currentClass = (((void *)0));
-ProcessDeclaration(external->declaration);
+if(external->__anon1.declaration)
+ProcessDeclaration(external->__anon1.declaration);
 }
 else if(external->type == 2)
 {
-struct ClassDefinition * _class = external->_class;
+struct ClassDefinition * _class = external->__anon1._class;
 
-currentClass = external->symbol->registered;
+currentClass = external->symbol->__anon1.registered;
 if(_class->definitions)
 {
 ProcessClass(_class->definitions, _class->symbol);
@@ -16806,27 +18924,30 @@ ProcessClass(_class->definitions, _class->symbol);
 if(inCompiler)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
-((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor(external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
+((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
 }
 }
 else if(external->type == 4)
 {
-thisNameSpace = external->id->string;
+thisNameSpace = external->__anon1.id->string;
 }
 }
 currentClass = (((void *)0));
 thisNameSpace = (((void *)0));
-((temp->symbol ? (__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor(temp->symbol) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp->symbol)) : 0), temp->symbol = 0);
-((temp ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor(temp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp)) : 0), temp = 0);
+curExternal = (((void *)0));
+((temp->symbol ? (__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor((void *)temp->symbol) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp->symbol)) : 0), temp->symbol = 0);
+((temp ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)temp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp)) : 0), temp = 0);
 }
 
-extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(char *  name, char *  type, void *  func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
+extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(const char *  name, const char *  type, void *  func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
 
-extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char *  name, char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
+extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(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;
+struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
 
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
@@ -16846,25 +18967,39 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * Prin
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
 __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, 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("DeclareStruct", "void DeclareStruct(const 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);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMemberInitData", "void ProcessMemberInitData(MemberInit member, ecere::com::Class _class, ecere::com::Class * curClass, ecere::com::DataMember * curMember, ecere::com::DataMember * subMemberStack, int * subMemberStackPos)", ProcessMemberInitData, module, 2);
@@ -16874,7 +19009,7 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext",
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(ecere::com::Method method, char * name)", DeclareMethod, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
@@ -16883,27 +19018,31 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "voi
 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 + 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("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, bool warnConst)", 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);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchWithEnums_Module", "bool MatchWithEnums_Module(ecere::com::Module mainModule, Expression sourceExp, Type dest, char * string, ecere::sys::OldList conversions)", MatchWithEnums_Module, module, 2);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla)", MatchTypeExpression, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
-__ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
 __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("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, 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("DeclareFunctionUtil", "void DeclareFunctionUtil(const String s)", DeclareFunctionUtil, module, 1);
 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);
 }