1 /* Code generated from eC source file: pass15.ec */
3 #define __runtimePlatform 1
4 #elif defined(__APPLE__)
5 #define __runtimePlatform 3
7 #define __runtimePlatform 2
10 typedef long long int64;
11 typedef unsigned long long uint64;
15 #elif defined(__TINYC__)
17 #define __builtin_va_list va_list
18 #define __builtin_va_start va_start
19 #define __builtin_va_end va_end
21 #define strcasecmp stricmp
22 #define strncasecmp strnicmp
23 #define __declspec(x) __attribute__((x))
27 typedef long long int64;
28 typedef unsigned long long uint64;
30 typedef __int64 int64;
31 typedef unsigned __int64 uint64;
34 #define __ENDIAN_PAD(x) (8 - (x))
36 #define __ENDIAN_PAD(x) 0
39 # if defined(__GNUC__) || defined(__TINYC__)
40 # define ecere_stdcall __attribute__((__stdcall__))
41 # define ecere_gcc_struct __attribute__((gcc_struct))
43 # define ecere_stdcall __stdcall
44 # define ecere_gcc_struct
47 # define ecere_stdcall
48 # define ecere_gcc_struct
51 #include <sys/types.h>
54 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, WIDE_STRING_LITERAL = 373, BUILTIN_OFFSETOF = 374
57 extern int returnCode;
59 extern unsigned int yydebug;
61 extern unsigned int echoOn;
67 int expression_yyparse();
69 static char * thisNameSpace;
71 unsigned int thisClassParams = 1;
73 unsigned int internalValueCounter;
75 extern unsigned int outputLineNumbers;
77 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_isInf;
79 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_signBit;
81 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_isNan;
83 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_isInf;
85 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_signBit;
87 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_isNan;
89 extern int targetBits;
91 extern unsigned int inCompiler;
93 extern unsigned int inPreCompiler;
95 extern unsigned int inDebugger;
97 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
99 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
101 int UnescapeString(char * d, char * s, int len)
106 while(j < len && (ch = s[j]))
111 switch((ch = s[++j]))
157 char * OffsetEscapedString(char * s, int len, int offset)
162 while(j < len && k < offset && (ch = s[j]))
168 return (k == offset) ? s + j : (((void *)0));
171 extern int __ecereVMethodID_class_OnGetString;
173 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_isPointerType;
175 extern unsigned int parseError;
177 static int definedExpStackPos;
179 static void * definedExpStack[512];
181 extern const char * sourceFile;
183 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_specConst;
185 unsigned int reachedPass15;
187 extern unsigned int memoryGuard;
189 struct __ecereNameSpace__ecere__sys__OldList
198 struct __ecereNameSpace__ecere__com__DataValue
213 } ecere_gcc_struct __anon1;
216 struct __ecereNameSpace__ecere__com__SerialBuffer
218 unsigned char * _buffer;
224 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
226 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
228 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
230 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
232 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory);
240 struct TemplateArgument;
256 extern size_t strlen(const char * );
258 extern int strcmp(const char * , const char * );
260 extern int sprintf(char * , const char * , ...);
262 extern char * strcat(char * , const char * );
264 extern char * __ecereNameSpace__ecere__sys__CopyString(const char * string);
266 extern int isprint(int c);
268 extern char * strcpy(char * , const char * );
270 extern void Compiler_Error(const char * format, ...);
272 extern const char * __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char * string, const char * stringAndContext);
274 struct __ecereNameSpace__ecere__com__LinkList
281 extern char * strchr(const char * , int);
283 extern void FullClassNameCat(char * output, const char * className, unsigned int includeTemplateParams);
285 extern void * memcpy(void * , const void * , size_t size);
287 extern void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2);
289 extern void Compiler_Warning(const char * format, ...);
291 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
293 extern long long strtoll(const char * nptr, char * * endptr, int base);
295 extern uint64 strtoull(const char * nptr, char * * endptr, int base);
297 extern int strtol(const char * , char * * , int base);
299 extern long long __ecereNameSpace__ecere__com___strtoi64(const char * string, const char * * endString, int base);
301 extern uint64 __ecereNameSpace__ecere__com___strtoui64(const char * string, const char * * endString, int base);
303 extern double strtod(const char * , char * * );
305 extern int strncmp(const char * , const char * , size_t n);
307 extern char * __ecereNameSpace__ecere__sys__RSearchString(const char * buffer, const char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
309 extern char * QMkString(const char * source);
311 extern char * strncpy(char * , const char * , size_t n);
313 extern int printf(const char * , ...);
315 extern char * strstr(const char * , const char * );
317 extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(const char * string, int * numBytes);
319 extern unsigned int (* __ecereProp_float_Get_isInf)(float this);
321 extern int (* __ecereProp_float_Get_signBit)(float this);
323 extern unsigned int (* __ecereProp_float_Get_isNan)(float this);
325 extern unsigned int (* __ecereProp_double_Get_isInf)(double this);
327 extern int (* __ecereProp_double_Get_signBit)(double this);
329 extern unsigned int (* __ecereProp_double_Get_isNan)(double this);
331 extern float (* __ecereMethod_float_inf)(void);
333 extern float (* __ecereMethod_float_nan)(void);
335 extern double (* __ecereMethod_double_inf)(void);
337 extern double (* __ecereMethod_double_nan)(void);
339 int __ecereVMethodID_class_OnGetString;
341 void SetYydebug(unsigned int b)
346 unsigned int GetParseError()
351 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
353 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
355 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
357 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
359 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* FreeFunction)(void * ));
361 struct __ecereNameSpace__ecere__com__EnumClassData
363 struct __ecereNameSpace__ecere__sys__OldList values;
367 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* CopyFunction)(void * ));
369 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
371 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
373 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
375 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (* freeFn)(void * ));
377 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
379 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
381 extern struct Attrib * MkAttrib(int type, struct __ecereNameSpace__ecere__sys__OldList * attribs);
385 struct CodePosition start;
386 struct CodePosition end;
389 void ReadString(char * output, char * string)
391 int len = strlen(string);
393 unsigned int quoted = 0, escaped = 0;
395 for(c = 0; c < len; c++)
455 char * PrintInt(long long result)
459 if(result > (((int)0x7fffffff)))
460 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
462 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
463 if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
465 return __ecereNameSpace__ecere__sys__CopyString(temp);
468 char * PrintUInt(uint64 result)
472 if(result > (0xffffffff))
473 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
474 else if(result > (((int)0x7fffffff)))
475 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
477 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
478 return __ecereNameSpace__ecere__sys__CopyString(temp);
481 char * PrintInt64(long long result)
485 if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
486 sprintf(temp, ((__runtimePlatform == 1) ? "%I64dLL" : "%lldLL"), result);
488 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
489 return __ecereNameSpace__ecere__sys__CopyString(temp);
492 char * PrintUInt64(uint64 result)
496 if(result > (0xffffffff))
497 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
498 else if(result > (((int)0x7fffffff)))
499 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
501 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
502 return __ecereNameSpace__ecere__sys__CopyString(temp);
505 char * PrintHexUInt(uint64 result)
509 if(result > (0xffffffff))
510 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
512 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
513 if(result > (0xffffffff))
515 return __ecereNameSpace__ecere__sys__CopyString(temp);
518 char * PrintHexUInt64(uint64 result)
522 if(result > (0xffffffff))
523 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
525 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
526 return __ecereNameSpace__ecere__sys__CopyString(temp);
529 char * PrintShort(short result)
533 sprintf(temp, "%d", (unsigned short)result);
534 return __ecereNameSpace__ecere__sys__CopyString(temp);
537 char * PrintUShort(unsigned short result)
542 sprintf(temp, "0x%X", (int)result);
544 sprintf(temp, "%d", (int)result);
545 return __ecereNameSpace__ecere__sys__CopyString(temp);
548 char * PrintUChar(unsigned char result)
552 sprintf(temp, "0x%X", result);
553 return __ecereNameSpace__ecere__sys__CopyString(temp);
556 char * PrintChar(char result)
560 if(result > 0 && isprint(result))
561 sprintf(temp, "'%c'", result);
563 sprintf(temp, "%d", (int)result);
565 sprintf(temp, "0x%X", (unsigned char)result);
566 return __ecereNameSpace__ecere__sys__CopyString(temp);
569 char * PrintFloat(float result)
573 if(__ecereProp_float_Get_isInf(result))
575 if(__ecereProp_float_Get_signBit(result))
576 strcpy(temp, "-inf");
580 else if(__ecereProp_float_Get_isNan(result))
582 if(__ecereProp_float_Get_signBit(result))
583 strcpy(temp, "-nan");
588 sprintf(temp, "%.16ff", result);
589 return __ecereNameSpace__ecere__sys__CopyString(temp);
592 char * PrintDouble(double result)
596 if(__ecereProp_double_Get_isInf(result))
598 if(__ecereProp_double_Get_signBit(result))
599 strcpy(temp, "-inf");
603 else if(__ecereProp_double_Get_isNan(result))
605 if(__ecereProp_double_Get_signBit(result))
606 strcpy(temp, "-nan");
611 sprintf(temp, "%.16f", result);
612 return __ecereNameSpace__ecere__sys__CopyString(temp);
615 extern struct Location yylloc;
624 struct Attrib * attr;
625 } ecere_gcc_struct __anon1;
628 extern struct ExtDecl * MkExtDeclAttrib(struct Attrib * attr);
632 extern struct Expression * parsedExpression;
634 extern struct Expression * QMkExpId(const char * id);
636 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
638 void ComputeExpression(struct Expression * exp);
640 extern struct Expression * MkExpConstant(const char * string);
642 extern struct Attribute * MkAttribute(char * attr, struct Expression * exp);
644 extern void FreeExpression(struct Expression * exp);
646 extern void FreeExpContents(struct Expression * exp);
648 extern struct Expression * GetNonBracketsExp(struct Expression * exp);
650 extern struct Expression * CopyExpression(struct Expression * exp);
652 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
654 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
656 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
658 extern struct Expression * MoveExpContents(struct Expression * exp);
660 extern struct Expression * QBrackets(struct Expression * exp);
662 extern struct Expression * QMkExpCond(struct Expression * cond, struct Expression * exp, struct Expression * elseExp);
666 static struct Statement * curCompound;
668 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
670 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
672 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
674 extern struct Statement * MkForStmt(struct Statement * init, struct Statement * check, struct __ecereNameSpace__ecere__sys__OldList * inc, struct Statement * statement);
676 extern struct Statement * MkWhileStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement);
678 extern struct Statement * MkFireWatchersStmt(struct Expression * object, struct __ecereNameSpace__ecere__sys__OldList * watches);
682 struct External * curExternal, * afterExternal;
684 extern void FreeExternal(struct External * external);
688 static struct Type * curSwitchType;
690 extern struct Type * ProcessTypeString(const char * string, unsigned int staticMethod);
692 extern void FreeType(struct Type * type);
694 extern struct Type * MkClassType(const char * name);
696 extern void CopyTypeInto(struct Type * type, struct Type * src);
698 struct __ecereNameSpace__ecere__com__Class;
700 struct __ecereNameSpace__ecere__com__Instance
703 struct __ecereNameSpace__ecere__com__Class * _class;
707 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
709 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value);
711 static struct __ecereNameSpace__ecere__com__Class * currentClass;
713 struct __ecereNameSpace__ecere__com__Class * thisClass;
715 struct __ecereNameSpace__ecere__com__Class * containerClass;
717 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
719 extern struct Expression * GetTemplateArgExpByName(const char * paramName, struct __ecereNameSpace__ecere__com__Class * curClass, int tplType);
721 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
723 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char * name, void * function);
725 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
727 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
729 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
731 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
733 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Read;
735 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
737 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
739 void SetThisClass(struct __ecereNameSpace__ecere__com__Class * c)
744 struct __ecereNameSpace__ecere__com__Class * GetThisClass()
751 extern struct Context * curContext;
753 extern struct Context * topContext;
755 extern struct Context * PushContext(void);
757 extern void PopContext(struct Context * ctx);
759 extern void FreeContext(struct Context * context);
761 extern struct Context * globalContext;
765 extern struct ModuleImport * mainModule;
769 struct ModuleImport * prev;
770 struct ModuleImport * next;
772 struct __ecereNameSpace__ecere__sys__OldList classes;
773 struct __ecereNameSpace__ecere__sys__OldList functions;
778 struct __ecereNameSpace__ecere__com__NameSpace;
780 extern struct __ecereNameSpace__ecere__com__NameSpace * globalData;
782 struct FunctionDefinition;
784 static struct FunctionDefinition * curFunction;
786 struct __ecereNameSpace__ecere__sys__BTNode;
788 struct __ecereNameSpace__ecere__sys__BTNode
791 struct __ecereNameSpace__ecere__sys__BTNode * parent;
792 struct __ecereNameSpace__ecere__sys__BTNode * left;
793 struct __ecereNameSpace__ecere__sys__BTNode * right;
797 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
799 struct __ecereNameSpace__ecere__com__Property;
801 struct __ecereNameSpace__ecere__com__Property
803 struct __ecereNameSpace__ecere__com__Property * prev;
804 struct __ecereNameSpace__ecere__com__Property * next;
806 unsigned int isProperty;
809 struct __ecereNameSpace__ecere__com__Class * _class;
810 const char * dataTypeString;
811 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
812 struct Type * dataType;
813 void (* Set)(void * , int);
814 int (* Get)(void * );
815 unsigned int (* IsSet)(void * );
819 unsigned int conversion;
820 unsigned int watcherOffset;
821 const char * category;
822 unsigned int compiled;
823 unsigned int selfWatchable;
824 unsigned int isWatchable;
827 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
829 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);
831 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void * instance, struct __ecereNameSpace__ecere__com__Property * _property, void * object, void (* callback)(void * , void * ));
833 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
837 extern void FreeIdentifier(struct Identifier * id);
839 extern struct Identifier * MkIdentifier(const char * string);
841 extern struct Expression * MkExpIdentifier(struct Identifier * id);
843 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
845 extern struct Identifier * CopyIdentifier(struct Identifier * id);
847 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
849 struct __ecereNameSpace__ecere__sys__OldLink;
851 struct __ecereNameSpace__ecere__sys__OldLink
853 struct __ecereNameSpace__ecere__sys__OldLink * prev;
854 struct __ecereNameSpace__ecere__sys__OldLink * next;
860 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
862 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
866 extern struct Declaration * MkStructDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * declarators, struct Specifier * extStorage);
868 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
870 extern struct Specifier * MkSpecifier(int specifier);
872 extern struct Specifier * MkSpecifierName(const char * name);
874 extern struct Specifier * MkSpecifierExtended(struct ExtDecl * extDecl);
876 extern void FreeSpecifier(struct Specifier * spec);
878 extern struct Specifier * MkEnum(struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * list);
882 struct Statement * prev;
883 struct Statement * next;
888 struct __ecereNameSpace__ecere__sys__OldList * expressions;
891 struct Identifier * id;
892 struct Statement * stmt;
893 } ecere_gcc_struct labeled;
896 struct Expression * exp;
897 struct Statement * stmt;
898 } ecere_gcc_struct caseStmt;
901 struct __ecereNameSpace__ecere__sys__OldList * declarations;
902 struct __ecereNameSpace__ecere__sys__OldList * statements;
903 struct Context * context;
904 unsigned int isSwitch;
905 } ecere_gcc_struct compound;
908 struct __ecereNameSpace__ecere__sys__OldList * exp;
909 struct Statement * stmt;
910 struct Statement * elseStmt;
911 } ecere_gcc_struct ifStmt;
914 struct __ecereNameSpace__ecere__sys__OldList * exp;
915 struct Statement * stmt;
916 } ecere_gcc_struct switchStmt;
919 struct __ecereNameSpace__ecere__sys__OldList * exp;
920 struct Statement * stmt;
921 } ecere_gcc_struct whileStmt;
924 struct __ecereNameSpace__ecere__sys__OldList * exp;
925 struct Statement * stmt;
926 } ecere_gcc_struct doWhile;
929 struct Statement * init;
930 struct Statement * check;
931 struct __ecereNameSpace__ecere__sys__OldList * increment;
932 struct Statement * stmt;
933 } ecere_gcc_struct forStmt;
936 struct Identifier * id;
937 } ecere_gcc_struct gotoStmt;
940 struct Specifier * spec;
942 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
943 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
944 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
945 } ecere_gcc_struct asmStmt;
948 struct Expression * watcher;
949 struct Expression * object;
950 struct __ecereNameSpace__ecere__sys__OldList * watches;
951 } ecere_gcc_struct _watch;
954 struct Identifier * id;
955 struct __ecereNameSpace__ecere__sys__OldList * exp;
956 struct __ecereNameSpace__ecere__sys__OldList * filter;
957 struct Statement * stmt;
958 } ecere_gcc_struct forEachStmt;
959 struct Declaration * decl;
960 } ecere_gcc_struct __anon1;
963 extern struct Specifier * CopySpecifier(struct Specifier * spec);
965 extern struct Expression * MkExpClassSize(struct Specifier * _class);
971 struct Identifier * prev;
972 struct Identifier * next;
974 struct Symbol * classSym;
975 struct Specifier * _class;
977 struct Identifier * badID;
980 extern struct Symbol * FindStruct(struct Context * ctx, const char * name);
982 extern struct Symbol * FindClass(const char * name);
984 extern void DeclareClass(struct External * neededFor, struct Symbol * classSym, const char * className);
986 extern struct Symbol * FindType(struct Context * ctx, const char * name);
988 extern void FreeSymbol(struct Symbol * symbol);
992 extern struct ClassDef * MkClassDefDeclaration(struct Declaration * decl);
994 extern void FreeClassDef(struct ClassDef * def);
998 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
1000 struct TemplateDatatype
1002 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1003 struct Declarator * decl;
1006 extern struct Declarator * SpecDeclFromString(const char * string, struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * baseDecl);
1008 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1010 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1012 extern struct Declarator * MkStructDeclarator(struct Declarator * declarator, struct Expression * exp);
1014 extern struct Declarator * MkDeclaratorArray(struct Declarator * declarator, struct Expression * exp);
1018 struct Declarator * prev;
1019 struct Declarator * next;
1020 struct Location loc;
1022 struct Symbol * symbol;
1023 struct Declarator * declarator;
1026 struct Identifier * identifier;
1029 struct Expression * exp;
1030 struct Expression * posExp;
1031 struct Attrib * attrib;
1032 } ecere_gcc_struct structDecl;
1035 struct Expression * exp;
1036 struct Specifier * enumClass;
1037 } ecere_gcc_struct array;
1040 struct __ecereNameSpace__ecere__sys__OldList * parameters;
1041 } ecere_gcc_struct function;
1044 struct Pointer * pointer;
1045 } ecere_gcc_struct pointer;
1048 struct ExtDecl * extended;
1049 } ecere_gcc_struct extended;
1050 } ecere_gcc_struct __anon1;
1053 extern struct Identifier * GetDeclId(struct Declarator * decl);
1055 extern struct Declarator * MkDeclaratorBrackets(struct Declarator * declarator);
1057 extern struct Declarator * PlugDeclarator(struct Declarator * decl, struct Declarator * baseDecl);
1059 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1061 extern void FreeDeclarator(struct Declarator * decl);
1063 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
1065 extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * decl);
1067 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
1069 struct FunctionDefinition
1071 struct FunctionDefinition * prev;
1072 struct FunctionDefinition * next;
1073 struct Location loc;
1074 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1075 struct Declarator * declarator;
1076 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1077 struct Statement * body;
1078 struct __ecereNameSpace__ecere__com__Class * _class;
1079 struct __ecereNameSpace__ecere__sys__OldList attached;
1082 struct Symbol * propSet;
1084 unsigned int propertyNoThis;
1087 extern struct Declarator * QMkPtrDecl(const char * id);
1089 struct ClassFunction;
1091 struct ClassFunction
1093 struct ClassFunction * prev;
1094 struct ClassFunction * next;
1095 struct Location loc;
1096 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1097 struct Declarator * declarator;
1098 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1099 struct Statement * body;
1100 struct __ecereNameSpace__ecere__com__Class * _class;
1101 struct __ecereNameSpace__ecere__sys__OldList attached;
1104 struct Symbol * propSet;
1105 unsigned int isVirtual;
1106 unsigned int isConstructor;
1107 unsigned int isDestructor;
1108 unsigned int dontMangle;
1113 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);
1115 extern void FreeClassFunction(struct ClassFunction * func);
1117 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
1119 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
1123 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1125 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1129 struct TypeName * prev;
1130 struct TypeName * next;
1131 struct Location loc;
1132 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
1133 struct Declarator * declarator;
1134 int classObjectType;
1135 struct Expression * bitCount;
1138 extern void FreeTypeName(struct TypeName * typeName);
1140 extern struct TypeName * QMkClass(const char * spec, struct Declarator * decl);
1142 extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
1144 extern unsigned int IsVoidPtrCast(struct TypeName * typeName);
1146 extern struct TypeName * QMkType(const char * spec, struct Declarator * decl);
1148 struct __ecereNameSpace__ecere__com__BTNamedLink;
1150 struct __ecereNameSpace__ecere__com__BTNamedLink
1153 struct __ecereNameSpace__ecere__com__BTNamedLink * parent;
1154 struct __ecereNameSpace__ecere__com__BTNamedLink * left;
1155 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
1160 struct __ecereNameSpace__ecere__sys__NamedLink64;
1162 struct __ecereNameSpace__ecere__sys__NamedLink64
1164 struct __ecereNameSpace__ecere__sys__NamedLink64 * prev;
1165 struct __ecereNameSpace__ecere__sys__NamedLink64 * next;
1170 struct Instantiation;
1174 struct Declaration * prev;
1175 struct Declaration * next;
1176 struct Location loc;
1182 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1183 struct __ecereNameSpace__ecere__sys__OldList * declarators;
1184 } ecere_gcc_struct __anon1;
1185 struct Instantiation * inst;
1188 struct Identifier * id;
1189 struct Expression * exp;
1190 } ecere_gcc_struct __anon2;
1191 } ecere_gcc_struct __anon1;
1192 struct Specifier * extStorage;
1193 struct Symbol * symbol;
1197 struct Instantiation
1199 struct Instantiation * prev;
1200 struct Instantiation * next;
1201 struct Location loc;
1202 struct Specifier * _class;
1203 struct Expression * exp;
1204 struct __ecereNameSpace__ecere__sys__OldList * members;
1205 struct Symbol * symbol;
1206 unsigned int fullSet;
1207 unsigned int isConstant;
1208 unsigned char * data;
1209 struct Location nameLoc;
1210 struct Location insideLoc;
1214 extern void FreeInstance(struct Instantiation * inst);
1216 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
1218 extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
1220 struct InitDeclarator;
1222 extern void FreeInitDeclarator(struct InitDeclarator * decl);
1224 struct PropertyWatch;
1226 struct PropertyWatch
1228 struct PropertyWatch * prev;
1229 struct PropertyWatch * next;
1230 struct Location loc;
1231 struct Statement * compound;
1232 struct __ecereNameSpace__ecere__sys__OldList * properties;
1233 unsigned int deleteWatch;
1236 extern void FreePropertyWatch(struct PropertyWatch * watcher);
1238 struct PropertyImport;
1240 struct PropertyImport
1242 struct PropertyImport * prev;
1243 struct PropertyImport * next;
1245 unsigned int isVirtual;
1246 unsigned int hasSet;
1247 unsigned int hasGet;
1250 struct MethodImport;
1254 struct MethodImport * prev;
1255 struct MethodImport * next;
1257 unsigned int isVirtual;
1260 struct FunctionImport;
1262 struct FunctionImport
1264 struct FunctionImport * prev;
1265 struct FunctionImport * next;
1273 struct ClassImport * prev;
1274 struct ClassImport * next;
1276 struct __ecereNameSpace__ecere__sys__OldList methods;
1277 struct __ecereNameSpace__ecere__sys__OldList properties;
1278 unsigned int itself;
1286 struct Expression * prev;
1287 struct Expression * next;
1288 struct Location loc;
1295 struct Identifier * identifier;
1296 } ecere_gcc_struct __anon1;
1297 struct Statement * compound;
1298 struct Instantiation * instance;
1302 unsigned int intlString;
1303 unsigned int wideString;
1304 } ecere_gcc_struct __anon2;
1305 struct __ecereNameSpace__ecere__sys__OldList * list;
1308 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1309 struct Declarator * decl;
1310 } ecere_gcc_struct _classExp;
1313 struct Identifier * id;
1314 } ecere_gcc_struct classData;
1317 struct Expression * exp;
1318 struct __ecereNameSpace__ecere__sys__OldList * arguments;
1319 struct Location argLoc;
1320 } ecere_gcc_struct call;
1323 struct Expression * exp;
1324 struct __ecereNameSpace__ecere__sys__OldList * index;
1325 } ecere_gcc_struct index;
1328 struct Expression * exp;
1329 struct Identifier * member;
1331 unsigned int thisPtr;
1332 } ecere_gcc_struct member;
1336 struct Expression * exp1;
1337 struct Expression * exp2;
1338 } ecere_gcc_struct op;
1339 struct TypeName * typeName;
1340 struct Specifier * _class;
1343 struct TypeName * typeName;
1344 struct Expression * exp;
1345 } ecere_gcc_struct cast;
1348 struct Expression * cond;
1349 struct __ecereNameSpace__ecere__sys__OldList * exp;
1350 struct Expression * elseExp;
1351 } ecere_gcc_struct cond;
1354 struct TypeName * typeName;
1355 struct Expression * size;
1356 } ecere_gcc_struct _new;
1359 struct TypeName * typeName;
1360 struct Expression * size;
1361 struct Expression * exp;
1362 } ecere_gcc_struct _renew;
1366 struct Identifier * id;
1367 } ecere_gcc_struct db;
1370 struct Expression * ds;
1371 struct Expression * name;
1372 } ecere_gcc_struct dbopen;
1375 struct TypeName * typeName;
1376 struct Initializer * initializer;
1377 } ecere_gcc_struct initializer;
1380 struct Expression * exp;
1381 struct TypeName * typeName;
1382 } ecere_gcc_struct vaArg;
1385 struct TypeName * typeName;
1386 struct Identifier * id;
1387 } ecere_gcc_struct offset;
1388 } ecere_gcc_struct __anon1;
1389 unsigned int debugValue;
1390 struct __ecereNameSpace__ecere__com__DataValue val;
1392 unsigned int hasAddress;
1393 struct Type * expType;
1394 struct Type * destType;
1397 unsigned int byReference;
1398 unsigned int isConstant;
1399 unsigned int addedThis;
1400 unsigned int needCast;
1401 unsigned int thisPtr;
1402 unsigned int opDestType;
1403 unsigned int usedInComparison;
1404 unsigned int ambiguousUnits;
1405 unsigned int parentOpDestType;
1406 unsigned int needTemplateCast;
1409 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1413 struct Initializer * prev;
1414 struct Initializer * next;
1415 struct Location loc;
1419 struct Expression * exp;
1420 struct __ecereNameSpace__ecere__sys__OldList * list;
1421 } ecere_gcc_struct __anon1;
1422 unsigned int isConstant;
1423 struct Identifier * id;
1426 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1428 extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
1430 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
1432 struct InitDeclarator
1434 struct InitDeclarator * prev;
1435 struct InitDeclarator * next;
1436 struct Location loc;
1437 struct Declarator * declarator;
1438 struct Initializer * initializer;
1441 void ApplyLocation(struct Expression * exp, struct Location * loc)
1447 if(exp->__anon1.op.exp1)
1448 ApplyLocation(exp->__anon1.op.exp1, loc);
1449 if(exp->__anon1.op.exp2)
1450 ApplyLocation(exp->__anon1.op.exp2, loc);
1453 if(exp->__anon1.list)
1455 struct Expression * e;
1457 for(e = (*exp->__anon1.list).first; e; e = e->next)
1458 ApplyLocation(e, loc);
1462 if(exp->__anon1.index.index)
1464 struct Expression * e;
1466 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
1467 ApplyLocation(e, loc);
1469 if(exp->__anon1.index.exp)
1470 ApplyLocation(exp->__anon1.index.exp, loc);
1473 if(exp->__anon1.call.arguments)
1475 struct Expression * arg;
1477 for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
1478 ApplyLocation(arg, loc);
1480 if(exp->__anon1.call.exp)
1481 ApplyLocation(exp->__anon1.call.exp, loc);
1485 if(exp->__anon1.member.exp)
1486 ApplyLocation(exp->__anon1.member.exp, loc);
1489 if(exp->__anon1.cast.exp)
1490 ApplyLocation(exp->__anon1.cast.exp, loc);
1493 if(exp->__anon1.cond.exp)
1495 struct Expression * e;
1497 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
1498 ApplyLocation(e, loc);
1500 if(exp->__anon1.cond.cond)
1501 ApplyLocation(exp->__anon1.cond.cond, loc);
1502 if(exp->__anon1.cond.elseExp)
1503 ApplyLocation(exp->__anon1.cond.elseExp, loc);
1506 if(exp->__anon1.vaArg.exp)
1507 ApplyLocation(exp->__anon1.vaArg.exp, loc);
1514 void __ecereMethod_Expression_Clear();
1520 struct MembersInit * prev;
1521 struct MembersInit * next;
1522 struct Location loc;
1526 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
1527 struct ClassFunction * function;
1528 } ecere_gcc_struct __anon1;
1531 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
1537 unsigned int (* Add)(struct Expression *, struct Operand *, struct Operand *);
1538 unsigned int (* Sub)(struct Expression *, struct Operand *, struct Operand *);
1539 unsigned int (* Mul)(struct Expression *, struct Operand *, struct Operand *);
1540 unsigned int (* Div)(struct Expression *, struct Operand *, struct Operand *);
1541 unsigned int (* Mod)(struct Expression *, struct Operand *, struct Operand *);
1542 unsigned int (* Neg)(struct Expression *, struct Operand *);
1543 unsigned int (* Inc)(struct Expression *, struct Operand *);
1544 unsigned int (* Dec)(struct Expression *, struct Operand *);
1545 unsigned int (* Asign)(struct Expression *, struct Operand *, struct Operand *);
1546 unsigned int (* AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1547 unsigned int (* SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1548 unsigned int (* MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1549 unsigned int (* DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1550 unsigned int (* ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1551 unsigned int (* BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1552 unsigned int (* BitOr)(struct Expression *, struct Operand *, struct Operand *);
1553 unsigned int (* BitXor)(struct Expression *, struct Operand *, struct Operand *);
1554 unsigned int (* LShift)(struct Expression *, struct Operand *, struct Operand *);
1555 unsigned int (* RShift)(struct Expression *, struct Operand *, struct Operand *);
1556 unsigned int (* BitNot)(struct Expression *, struct Operand *);
1557 unsigned int (* AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1558 unsigned int (* OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1559 unsigned int (* XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1560 unsigned int (* LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1561 unsigned int (* RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1562 unsigned int (* Not)(struct Expression *, struct Operand *);
1563 unsigned int (* Equ)(struct Expression *, struct Operand *, struct Operand *);
1564 unsigned int (* Nqu)(struct Expression *, struct Operand *, struct Operand *);
1565 unsigned int (* And)(struct Expression *, struct Operand *, struct Operand *);
1566 unsigned int (* Or)(struct Expression *, struct Operand *, struct Operand *);
1567 unsigned int (* Grt)(struct Expression *, struct Operand *, struct Operand *);
1568 unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *);
1569 unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1570 unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1571 unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1578 unsigned int ptrSize;
1591 } ecere_gcc_struct __anon1;
1595 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl);
1597 struct External * DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference)
1599 return _DeclareStruct(neededBy, name, skipNoHead, needDereference, 0);
1602 static void _DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef, unsigned int fwdDecl);
1604 void DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef)
1606 _DeclareType(neededFor, type, needDereference, forFunctionDef, 0);
1609 void DeclareTypeForwardDeclare(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef)
1611 _DeclareType(neededFor, type, needDereference, forFunctionDef, 1);
1614 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst);
1616 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
1618 _PrintType(type, string, printName, fullName, 1);
1621 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
1623 _PrintType(type, string, printName, fullName, 0);
1626 struct __ecereNameSpace__ecere__com__Method;
1628 struct __ecereNameSpace__ecere__com__Method
1631 struct __ecereNameSpace__ecere__com__Method * parent;
1632 struct __ecereNameSpace__ecere__com__Method * left;
1633 struct __ecereNameSpace__ecere__com__Method * right;
1638 struct __ecereNameSpace__ecere__com__Class * _class;
1640 const char * dataTypeString;
1641 struct Type * dataType;
1648 struct Symbol * parent;
1649 struct Symbol * left;
1650 struct Symbol * right;
1655 struct __ecereNameSpace__ecere__com__Method * method;
1656 struct __ecereNameSpace__ecere__com__Property * _property;
1657 struct __ecereNameSpace__ecere__com__Class * registered;
1658 } ecere_gcc_struct __anon1;
1659 unsigned int notYetDeclared;
1664 struct External * pointerExternal;
1665 struct External * structExternal;
1666 } ecere_gcc_struct __anon1;
1669 struct External * externalGet;
1670 struct External * externalSet;
1671 struct External * externalPtr;
1672 struct External * externalIsSet;
1673 } ecere_gcc_struct __anon2;
1676 struct External * methodExternal;
1677 struct External * methodCodeExternal;
1678 } ecere_gcc_struct __anon3;
1679 } ecere_gcc_struct __anon2;
1680 unsigned int imported;
1681 unsigned int declaredStructSym;
1682 struct __ecereNameSpace__ecere__com__Class * _class;
1683 unsigned int declaredStruct;
1684 unsigned int needConstructor;
1685 unsigned int needDestructor;
1686 char * constructorName;
1689 char * destructorName;
1690 struct ModuleImport * module;
1691 struct ClassImport * _import;
1692 struct Location nameLoc;
1693 unsigned int isParam;
1694 unsigned int isRemote;
1695 unsigned int isStruct;
1696 unsigned int fireWatchersDone;
1698 unsigned int classData;
1699 unsigned int isStatic;
1701 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
1702 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
1703 struct Context * ctx;
1705 struct Expression * propCategory;
1706 unsigned int mustRegister;
1709 struct __ecereNameSpace__ecere__com__ClassProperty;
1711 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
1713 struct __ecereNameSpace__ecere__com__ClassProperty
1716 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1717 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1718 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1720 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
1721 long long (* Get)(struct __ecereNameSpace__ecere__com__Class *);
1722 const char * dataTypeString;
1723 struct Type * dataType;
1724 unsigned int constant;
1727 struct __ecereNameSpace__ecere__com__BitMember;
1729 struct __ecereNameSpace__ecere__com__BitMember
1731 struct __ecereNameSpace__ecere__com__BitMember * prev;
1732 struct __ecereNameSpace__ecere__com__BitMember * next;
1734 unsigned int isProperty;
1737 struct __ecereNameSpace__ecere__com__Class * _class;
1738 const char * dataTypeString;
1739 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1740 struct Type * dataType;
1747 struct __ecereNameSpace__ecere__com__DataMember;
1749 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1755 const char * dataTypeString;
1756 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1757 } ecere_gcc_struct __anon1;
1758 struct __ecereNameSpace__ecere__com__DataValue expression;
1761 const char * memberString;
1764 struct __ecereNameSpace__ecere__com__DataMember * member;
1765 struct __ecereNameSpace__ecere__com__Property * prop;
1766 struct __ecereNameSpace__ecere__com__Method * method;
1767 } ecere_gcc_struct __anon1;
1768 } ecere_gcc_struct __anon2;
1769 } ecere_gcc_struct __anon1;
1772 extern void __ecereNameSpace__ecere__com__eClass_FindNextMember(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class ** curClass, struct __ecereNameSpace__ecere__com__DataMember ** curMember, struct __ecereNameSpace__ecere__com__DataMember ** subMemberStack, int * subMemberStackPos);
1774 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);
1776 struct TemplateParameter;
1778 struct TemplateParameter
1780 struct TemplateParameter * prev;
1781 struct TemplateParameter * next;
1782 struct Location loc;
1784 struct Identifier * identifier;
1787 struct TemplateDatatype * dataType;
1789 } ecere_gcc_struct __anon1;
1790 struct TemplateArgument * defaultArgument;
1791 const char * dataTypeString;
1792 struct Type * baseType;
1802 struct Symbol * _class;
1805 struct __ecereNameSpace__ecere__sys__OldList members;
1807 } ecere_gcc_struct __anon1;
1810 struct Type * returnType;
1811 struct __ecereNameSpace__ecere__sys__OldList params;
1812 struct Symbol * thisClass;
1813 unsigned int staticMethod;
1814 struct TemplateParameter * thisClassTemplate;
1815 } ecere_gcc_struct __anon2;
1818 struct __ecereNameSpace__ecere__com__Method * method;
1819 struct __ecereNameSpace__ecere__com__Class * methodClass;
1820 struct __ecereNameSpace__ecere__com__Class * usedClass;
1821 } ecere_gcc_struct __anon3;
1824 struct Type * arrayType;
1826 struct Expression * arraySizeExp;
1827 unsigned int freeExp;
1828 struct Symbol * enumClass;
1829 } ecere_gcc_struct __anon4;
1831 struct TemplateParameter * templateParameter;
1832 } ecere_gcc_struct __anon1;
1837 struct __ecereNameSpace__ecere__com__Class * thisClassFrom;
1839 int classObjectType;
1841 unsigned int offset;
1845 unsigned int isSigned : 1;
1846 unsigned int constant : 1;
1847 unsigned int truth : 1;
1848 unsigned int byReference : 1;
1849 unsigned int extraParam : 1;
1850 unsigned int directClassAccess : 1;
1851 unsigned int computing : 1;
1852 unsigned int keepCast : 1;
1853 unsigned int passAsTemplate : 1;
1854 unsigned int dllExport : 1;
1855 unsigned int attrStdcall : 1;
1856 unsigned int declaredWithStruct : 1;
1857 unsigned int typedByReference : 1;
1858 unsigned int casted : 1;
1859 unsigned int pointerAlignment : 1;
1860 unsigned int isLong : 1;
1861 unsigned int signedBeforePromotion : 1;
1866 struct Specifier * prev;
1867 struct Specifier * next;
1868 struct Location loc;
1875 struct ExtDecl * extDecl;
1877 struct Symbol * symbol;
1878 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
1879 struct Specifier * nsSpec;
1880 } ecere_gcc_struct __anon1;
1883 struct Identifier * id;
1884 struct __ecereNameSpace__ecere__sys__OldList * list;
1885 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
1886 struct __ecereNameSpace__ecere__sys__OldList * definitions;
1887 unsigned int addNameSpace;
1888 struct Context * ctx;
1889 struct ExtDecl * extDeclStruct;
1890 } ecere_gcc_struct __anon2;
1891 struct Expression * expression;
1892 struct Specifier * _class;
1893 struct TemplateParameter * templateParameter;
1894 } ecere_gcc_struct __anon1;
1897 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
1899 struct TemplatedType
1902 struct __ecereNameSpace__ecere__sys__BTNode * parent;
1903 struct __ecereNameSpace__ecere__sys__BTNode * left;
1904 struct __ecereNameSpace__ecere__sys__BTNode * right;
1906 struct TemplateParameter * param;
1909 struct Type * ProcessTemplateParameterType(struct TemplateParameter * param)
1911 if(param && param->type == 0 && (param->__anon1.dataType || param->dataTypeString))
1913 if(!param->baseType)
1915 if(param->dataTypeString)
1916 param->baseType = ProcessTypeString(param->dataTypeString, 0);
1918 param->baseType = ProcessType(param->__anon1.dataType->specifiers, param->__anon1.dataType->decl);
1920 return param->baseType;
1922 return (((void *)0));
1925 unsigned int NeedCast(struct Type * type1, struct Type * type2)
1927 if(!type1 || !type2 || type1->keepCast || type2->keepCast)
1929 if(type1->kind == 20 && type2->kind == 4 && type2->passAsTemplate == 0)
1933 if(type1->kind == type2->kind && type1->isLong == type2->isLong)
1944 if(type1->passAsTemplate && !type2->passAsTemplate)
1946 return type1->isSigned != type2->isSigned;
1948 return type1->__anon1._class != type2->__anon1._class;
1950 return (type1->__anon1.type && type2->__anon1.type && type1->__anon1.type->constant != type2->__anon1.type->constant) || NeedCast(type1->__anon1.type, type2->__anon1.type);
1958 unsigned int GetOpInt(struct Operand * op2, int * value2)
1960 if(op2->kind == 3 && op2->type->isSigned)
1961 *value2 = op2->__anon1.i;
1962 else if(op2->kind == 3)
1963 *value2 = (int)op2->__anon1.ui;
1964 else if(op2->kind == 4 && op2->type->isSigned)
1965 *value2 = (int)op2->__anon1.i64;
1966 else if(op2->kind == 4)
1967 *value2 = (int)op2->__anon1.ui64;
1968 else if(op2->kind == 23 && op2->type->isSigned)
1969 *value2 = (int)op2->__anon1.i64;
1970 else if(op2->kind == 23)
1971 *value2 = (int)op2->__anon1.ui64;
1972 else if(op2->kind == 22 && op2->type->isSigned)
1973 *value2 = (int)op2->__anon1.i64;
1974 else if(op2->kind == 22)
1975 *value2 = (int)op2->__anon1.ui64;
1976 else if(op2->kind == 2 && op2->type->isSigned)
1977 *value2 = (int)op2->__anon1.s;
1978 else if(op2->kind == 2)
1979 *value2 = (int)op2->__anon1.us;
1980 else if(op2->kind == 1 && op2->type->isSigned)
1981 *value2 = (int)op2->__anon1.c;
1982 else if(op2->kind == 24 || op2->kind == 1)
1983 *value2 = (int)op2->__anon1.uc;
1984 else if(op2->kind == 6)
1985 *value2 = (int)op2->__anon1.f;
1986 else if(op2->kind == 7)
1987 *value2 = (int)op2->__anon1.d;
1988 else if(op2->kind == 13)
1989 *value2 = (int)op2->__anon1.ui64;
1995 unsigned int GetOpUInt(struct Operand * op2, unsigned int * value2)
1997 if(op2->kind == 3 && op2->type->isSigned)
1998 *value2 = (unsigned int)op2->__anon1.i;
1999 else if(op2->kind == 3)
2000 *value2 = op2->__anon1.ui;
2001 else if(op2->kind == 4 && op2->type->isSigned)
2002 *value2 = (unsigned int)op2->__anon1.i64;
2003 else if(op2->kind == 4)
2004 *value2 = (unsigned int)op2->__anon1.ui64;
2005 else if(op2->kind == 23 && op2->type->isSigned)
2006 *value2 = (unsigned int)op2->__anon1.i64;
2007 else if(op2->kind == 23)
2008 *value2 = (unsigned int)op2->__anon1.ui64;
2009 else if(op2->kind == 22 && op2->type->isSigned)
2010 *value2 = (unsigned int)op2->__anon1.i64;
2011 else if(op2->kind == 22)
2012 *value2 = (unsigned int)op2->__anon1.ui64;
2013 else if(op2->kind == 2 && op2->type->isSigned)
2014 *value2 = (unsigned int)op2->__anon1.s;
2015 else if(op2->kind == 2)
2016 *value2 = (unsigned int)op2->__anon1.us;
2017 else if(op2->kind == 1 && op2->type->isSigned)
2018 *value2 = (unsigned int)op2->__anon1.c;
2019 else if(op2->kind == 24 || op2->kind == 1)
2020 *value2 = (unsigned int)op2->__anon1.uc;
2021 else if(op2->kind == 6)
2022 *value2 = (unsigned int)op2->__anon1.f;
2023 else if(op2->kind == 7)
2024 *value2 = (unsigned int)op2->__anon1.d;
2025 else if(op2->kind == 13)
2026 *value2 = (unsigned int)op2->__anon1.ui64;
2032 unsigned int GetOpInt64(struct Operand * op2, long long * value2)
2034 if(op2->kind == 3 && op2->type->isSigned)
2035 *value2 = (long long)op2->__anon1.i;
2036 else if(op2->kind == 3)
2037 *value2 = (long long)op2->__anon1.ui;
2038 else if(op2->kind == 4 && op2->type->isSigned)
2039 *value2 = op2->__anon1.i64;
2040 else if(op2->kind == 4)
2041 *value2 = (long long)op2->__anon1.ui64;
2042 else if(op2->kind == 23 && op2->type->isSigned)
2043 *value2 = op2->__anon1.i64;
2044 else if(op2->kind == 23)
2045 *value2 = (long long)op2->__anon1.ui64;
2046 else if(op2->kind == 22 && op2->type->isSigned)
2047 *value2 = op2->__anon1.i64;
2048 else if(op2->kind == 22)
2049 *value2 = (long long)op2->__anon1.ui64;
2050 else if(op2->kind == 2 && op2->type->isSigned)
2051 *value2 = (long long)op2->__anon1.s;
2052 else if(op2->kind == 2)
2053 *value2 = (long long)op2->__anon1.us;
2054 else if(op2->kind == 1 && op2->type->isSigned)
2055 *value2 = (long long)op2->__anon1.c;
2056 else if(op2->kind == 24 || op2->kind == 1)
2057 *value2 = (long long)op2->__anon1.uc;
2058 else if(op2->kind == 6)
2059 *value2 = (long long)op2->__anon1.f;
2060 else if(op2->kind == 7)
2061 *value2 = (long long)op2->__anon1.d;
2062 else if(op2->kind == 13)
2063 *value2 = (long long)op2->__anon1.ui64;
2069 unsigned int GetOpUInt64(struct Operand * op2, uint64 * value2)
2071 if(op2->kind == 3 && op2->type->isSigned)
2072 *value2 = (uint64)op2->__anon1.i;
2073 else if(op2->kind == 3)
2074 *value2 = (uint64)op2->__anon1.ui;
2075 else if(op2->kind == 4 && op2->type->isSigned)
2076 *value2 = (uint64)op2->__anon1.i64;
2077 else if(op2->kind == 4)
2078 *value2 = op2->__anon1.ui64;
2079 else if(op2->kind == 23 && op2->type->isSigned)
2080 *value2 = (uint64)op2->__anon1.i64;
2081 else if(op2->kind == 23)
2082 *value2 = op2->__anon1.ui64;
2083 else if(op2->kind == 22 && op2->type->isSigned)
2084 *value2 = (uint64)op2->__anon1.i64;
2085 else if(op2->kind == 22)
2086 *value2 = op2->__anon1.ui64;
2087 else if(op2->kind == 2 && op2->type->isSigned)
2088 *value2 = (uint64)op2->__anon1.s;
2089 else if(op2->kind == 2)
2090 *value2 = (uint64)op2->__anon1.us;
2091 else if(op2->kind == 1 && op2->type->isSigned)
2092 *value2 = (uint64)op2->__anon1.c;
2093 else if(op2->kind == 24 || op2->kind == 1)
2094 *value2 = (uint64)op2->__anon1.uc;
2095 else if(op2->kind == 6)
2096 *value2 = (uint64)op2->__anon1.f;
2097 else if(op2->kind == 7)
2098 *value2 = (uint64)op2->__anon1.d;
2099 else if(op2->kind == 13)
2100 *value2 = op2->__anon1.ui64;
2106 unsigned int GetOpIntPtr(struct Operand * op2, intptr_t * value2)
2108 if(op2->kind == 3 && op2->type->isSigned)
2109 *value2 = (intptr_t)op2->__anon1.i;
2110 else if(op2->kind == 3)
2111 *value2 = (intptr_t)op2->__anon1.ui;
2112 else if(op2->kind == 4 && op2->type->isSigned)
2113 *value2 = (intptr_t)op2->__anon1.i64;
2114 else if(op2->kind == 4)
2115 *value2 = (intptr_t)op2->__anon1.ui64;
2116 else if(op2->kind == 23 && op2->type->isSigned)
2117 *value2 = (intptr_t)op2->__anon1.i64;
2118 else if(op2->kind == 23)
2119 *value2 = (intptr_t)op2->__anon1.ui64;
2120 else if(op2->kind == 22 && op2->type->isSigned)
2121 *value2 = (intptr_t)op2->__anon1.i64;
2122 else if(op2->kind == 22)
2123 *value2 = (intptr_t)op2->__anon1.ui64;
2124 else if(op2->kind == 2 && op2->type->isSigned)
2125 *value2 = (intptr_t)op2->__anon1.s;
2126 else if(op2->kind == 2)
2127 *value2 = (intptr_t)op2->__anon1.us;
2128 else if(op2->kind == 1 && op2->type->isSigned)
2129 *value2 = (intptr_t)op2->__anon1.c;
2130 else if(op2->kind == 24 || op2->kind == 1)
2131 *value2 = (intptr_t)op2->__anon1.uc;
2132 else if(op2->kind == 6)
2133 *value2 = (intptr_t)op2->__anon1.f;
2134 else if(op2->kind == 7)
2135 *value2 = (intptr_t)op2->__anon1.d;
2136 else if(op2->kind == 13)
2137 *value2 = (intptr_t)op2->__anon1.ui64;
2143 unsigned int GetOpUIntPtr(struct Operand * op2, uintptr_t * value2)
2145 if(op2->kind == 3 && op2->type->isSigned)
2146 *value2 = (uintptr_t)op2->__anon1.i;
2147 else if(op2->kind == 3)
2148 *value2 = (uintptr_t)op2->__anon1.ui;
2149 else if(op2->kind == 4 && op2->type->isSigned)
2150 *value2 = (uintptr_t)op2->__anon1.i64;
2151 else if(op2->kind == 4)
2152 *value2 = (uintptr_t)op2->__anon1.ui64;
2153 else if(op2->kind == 23 && op2->type->isSigned)
2154 *value2 = (uintptr_t)op2->__anon1.i64;
2155 else if(op2->kind == 23)
2156 *value2 = (uintptr_t)op2->__anon1.ui64;
2157 else if(op2->kind == 22 && op2->type->isSigned)
2158 *value2 = (uintptr_t)op2->__anon1.i64;
2159 else if(op2->kind == 22)
2160 *value2 = (uintptr_t)op2->__anon1.ui64;
2161 else if(op2->kind == 2 && op2->type->isSigned)
2162 *value2 = (uintptr_t)op2->__anon1.s;
2163 else if(op2->kind == 2)
2164 *value2 = (uintptr_t)op2->__anon1.us;
2165 else if(op2->kind == 1 && op2->type->isSigned)
2166 *value2 = (uintptr_t)op2->__anon1.c;
2167 else if(op2->kind == 24 || op2->kind == 1)
2168 *value2 = (uintptr_t)op2->__anon1.uc;
2169 else if(op2->kind == 6)
2170 *value2 = (uintptr_t)op2->__anon1.f;
2171 else if(op2->kind == 7)
2172 *value2 = (uintptr_t)op2->__anon1.d;
2173 else if(op2->kind == 13)
2174 *value2 = (uintptr_t)op2->__anon1.ui64;
2180 unsigned int GetOpIntSize(struct Operand * op2, ssize_t * value2)
2182 if(op2->kind == 3 && op2->type->isSigned)
2183 *value2 = (ssize_t)op2->__anon1.i;
2184 else if(op2->kind == 3)
2185 *value2 = (ssize_t)op2->__anon1.ui;
2186 else if(op2->kind == 4 && op2->type->isSigned)
2187 *value2 = (ssize_t)op2->__anon1.i64;
2188 else if(op2->kind == 4)
2189 *value2 = (ssize_t)op2->__anon1.ui64;
2190 else if(op2->kind == 23 && op2->type->isSigned)
2191 *value2 = (ssize_t)op2->__anon1.i64;
2192 else if(op2->kind == 23)
2193 *value2 = (ssize_t)op2->__anon1.ui64;
2194 else if(op2->kind == 22 && op2->type->isSigned)
2195 *value2 = (ssize_t)op2->__anon1.i64;
2196 else if(op2->kind == 22)
2197 *value2 = (ssize_t)op2->__anon1.ui64;
2198 else if(op2->kind == 2 && op2->type->isSigned)
2199 *value2 = (ssize_t)op2->__anon1.s;
2200 else if(op2->kind == 2)
2201 *value2 = (ssize_t)op2->__anon1.us;
2202 else if(op2->kind == 1 && op2->type->isSigned)
2203 *value2 = (ssize_t)op2->__anon1.c;
2204 else if(op2->kind == 24 || op2->kind == 1)
2205 *value2 = (ssize_t)op2->__anon1.uc;
2206 else if(op2->kind == 6)
2207 *value2 = (ssize_t)op2->__anon1.f;
2208 else if(op2->kind == 7)
2209 *value2 = (ssize_t)op2->__anon1.d;
2210 else if(op2->kind == 13)
2211 *value2 = (ssize_t)op2->__anon1.ui64;
2217 unsigned int GetOpUIntSize(struct Operand * op2, size_t * value2)
2219 if(op2->kind == 3 && op2->type->isSigned)
2220 *value2 = (size_t)op2->__anon1.i;
2221 else if(op2->kind == 3)
2222 *value2 = (size_t)op2->__anon1.ui;
2223 else if(op2->kind == 4 && op2->type->isSigned)
2224 *value2 = (size_t)op2->__anon1.i64;
2225 else if(op2->kind == 4)
2226 *value2 = (size_t)op2->__anon1.ui64;
2227 else if(op2->kind == 23 && op2->type->isSigned)
2228 *value2 = (size_t)op2->__anon1.i64;
2229 else if(op2->kind == 23)
2230 *value2 = (size_t)op2->__anon1.ui64;
2231 else if(op2->kind == 22 && op2->type->isSigned)
2232 *value2 = (size_t)op2->__anon1.i64;
2233 else if(op2->kind == 22)
2234 *value2 = (size_t)op2->__anon1.ui64;
2235 else if(op2->kind == 2 && op2->type->isSigned)
2236 *value2 = (size_t)op2->__anon1.s;
2237 else if(op2->kind == 2)
2238 *value2 = (size_t)op2->__anon1.us;
2239 else if(op2->kind == 1 && op2->type->isSigned)
2240 *value2 = (size_t)op2->__anon1.c;
2241 else if(op2->kind == 24 || op2->kind == 1)
2242 *value2 = (size_t)op2->__anon1.uc;
2243 else if(op2->kind == 6)
2244 *value2 = (size_t)op2->__anon1.f;
2245 else if(op2->kind == 7)
2246 *value2 = (size_t)op2->__anon1.d;
2247 else if(op2->kind == 13)
2248 *value2 = (size_t)op2->__anon1.ui64;
2254 unsigned int GetOpShort(struct Operand * op2, short * value2)
2256 if(op2->kind == 3 && op2->type->isSigned)
2257 *value2 = (short)op2->__anon1.i;
2258 else if(op2->kind == 3)
2259 *value2 = (short)op2->__anon1.ui;
2260 else if(op2->kind == 4 && op2->type->isSigned)
2261 *value2 = (short)op2->__anon1.i64;
2262 else if(op2->kind == 4)
2263 *value2 = (short)op2->__anon1.ui64;
2264 else if(op2->kind == 23 && op2->type->isSigned)
2265 *value2 = (short)op2->__anon1.i64;
2266 else if(op2->kind == 23)
2267 *value2 = (short)op2->__anon1.ui64;
2268 else if(op2->kind == 22 && op2->type->isSigned)
2269 *value2 = (short)op2->__anon1.i64;
2270 else if(op2->kind == 22)
2271 *value2 = (short)op2->__anon1.ui64;
2272 else if(op2->kind == 2 && op2->type->isSigned)
2273 *value2 = op2->__anon1.s;
2274 else if(op2->kind == 2)
2275 *value2 = (short)op2->__anon1.us;
2276 else if(op2->kind == 1 && op2->type->isSigned)
2277 *value2 = (short)op2->__anon1.c;
2278 else if(op2->kind == 24 || op2->kind == 1)
2279 *value2 = (short)op2->__anon1.uc;
2280 else if(op2->kind == 6)
2281 *value2 = (short)op2->__anon1.f;
2282 else if(op2->kind == 7)
2283 *value2 = (short)op2->__anon1.d;
2284 else if(op2->kind == 13)
2285 *value2 = (short)op2->__anon1.ui64;
2291 unsigned int GetOpUShort(struct Operand * op2, unsigned short * value2)
2293 if(op2->kind == 3 && op2->type->isSigned)
2294 *value2 = (unsigned short)op2->__anon1.i;
2295 else if(op2->kind == 3)
2296 *value2 = (unsigned short)op2->__anon1.ui;
2297 else if(op2->kind == 4 && op2->type->isSigned)
2298 *value2 = (unsigned short)op2->__anon1.i64;
2299 else if(op2->kind == 4)
2300 *value2 = (unsigned short)op2->__anon1.ui64;
2301 else if(op2->kind == 23 && op2->type->isSigned)
2302 *value2 = (unsigned short)op2->__anon1.i64;
2303 else if(op2->kind == 23)
2304 *value2 = (unsigned short)op2->__anon1.ui64;
2305 else if(op2->kind == 22 && op2->type->isSigned)
2306 *value2 = (unsigned short)op2->__anon1.i64;
2307 else if(op2->kind == 22)
2308 *value2 = (unsigned short)op2->__anon1.ui64;
2309 else if(op2->kind == 2 && op2->type->isSigned)
2310 *value2 = (unsigned short)op2->__anon1.s;
2311 else if(op2->kind == 2)
2312 *value2 = op2->__anon1.us;
2313 else if(op2->kind == 1 && op2->type->isSigned)
2314 *value2 = (unsigned short)op2->__anon1.c;
2315 else if(op2->kind == 24 || op2->kind == 1)
2316 *value2 = (unsigned short)op2->__anon1.uc;
2317 else if(op2->kind == 6)
2318 *value2 = (unsigned short)op2->__anon1.f;
2319 else if(op2->kind == 7)
2320 *value2 = (unsigned short)op2->__anon1.d;
2321 else if(op2->kind == 13)
2322 *value2 = (unsigned short)op2->__anon1.ui64;
2328 unsigned int GetOpChar(struct Operand * op2, char * value2)
2330 if(op2->kind == 3 && op2->type->isSigned)
2331 *value2 = (char)op2->__anon1.i;
2332 else if(op2->kind == 3)
2333 *value2 = (char)op2->__anon1.ui;
2334 else if(op2->kind == 4 && op2->type->isSigned)
2335 *value2 = (char)op2->__anon1.i64;
2336 else if(op2->kind == 4)
2337 *value2 = (char)op2->__anon1.ui64;
2338 else if(op2->kind == 23 && op2->type->isSigned)
2339 *value2 = (char)op2->__anon1.i64;
2340 else if(op2->kind == 23)
2341 *value2 = (char)op2->__anon1.ui64;
2342 else if(op2->kind == 22 && op2->type->isSigned)
2343 *value2 = (char)op2->__anon1.i64;
2344 else if(op2->kind == 22)
2345 *value2 = (char)op2->__anon1.ui64;
2346 else if(op2->kind == 2 && op2->type->isSigned)
2347 *value2 = (char)op2->__anon1.s;
2348 else if(op2->kind == 2)
2349 *value2 = (char)op2->__anon1.us;
2350 else if(op2->kind == 1 && op2->type->isSigned)
2351 *value2 = op2->__anon1.c;
2352 else if(op2->kind == 24 || op2->kind == 1)
2353 *value2 = (char)op2->__anon1.uc;
2354 else if(op2->kind == 6)
2355 *value2 = (char)op2->__anon1.f;
2356 else if(op2->kind == 7)
2357 *value2 = (char)op2->__anon1.d;
2358 else if(op2->kind == 13)
2359 *value2 = (char)op2->__anon1.ui64;
2365 unsigned int GetOpUChar(struct Operand * op2, unsigned char * value2)
2367 if(op2->kind == 3 && op2->type->isSigned)
2368 *value2 = (unsigned char)op2->__anon1.i;
2369 else if(op2->kind == 3)
2370 *value2 = (unsigned char)op2->__anon1.ui;
2371 else if(op2->kind == 4 && op2->type->isSigned)
2372 *value2 = (unsigned char)op2->__anon1.i64;
2373 else if(op2->kind == 4)
2374 *value2 = (unsigned char)op2->__anon1.ui64;
2375 else if(op2->kind == 23 && op2->type->isSigned)
2376 *value2 = (unsigned char)op2->__anon1.i64;
2377 else if(op2->kind == 23)
2378 *value2 = (unsigned char)op2->__anon1.ui64;
2379 else if(op2->kind == 22 && op2->type->isSigned)
2380 *value2 = (unsigned char)op2->__anon1.i64;
2381 else if(op2->kind == 22)
2382 *value2 = (unsigned char)op2->__anon1.ui64;
2383 else if(op2->kind == 2 && op2->type->isSigned)
2384 *value2 = (unsigned char)op2->__anon1.s;
2385 else if(op2->kind == 2)
2386 *value2 = (unsigned char)op2->__anon1.us;
2387 else if(op2->kind == 1 && op2->type->isSigned)
2388 *value2 = (unsigned char)op2->__anon1.c;
2389 else if(op2->kind == 24 || op2->kind == 1)
2390 *value2 = op2->__anon1.uc;
2391 else if(op2->kind == 6)
2392 *value2 = (unsigned char)op2->__anon1.f;
2393 else if(op2->kind == 7)
2394 *value2 = (unsigned char)op2->__anon1.d;
2395 else if(op2->kind == 13)
2396 *value2 = (unsigned char)op2->__anon1.ui64;
2402 unsigned int GetOpFloat(struct Operand * op2, float * value2)
2404 if(op2->kind == 3 && op2->type->isSigned)
2405 *value2 = (float)(float)op2->__anon1.i;
2406 else if(op2->kind == 3)
2407 *value2 = (float)(float)op2->__anon1.ui;
2408 else if(op2->kind == 4 && op2->type->isSigned)
2409 *value2 = (float)(float)op2->__anon1.i64;
2410 else if(op2->kind == 4)
2411 *value2 = (float)(float)op2->__anon1.ui64;
2412 else if(op2->kind == 23 && op2->type->isSigned)
2413 *value2 = (float)(float)op2->__anon1.i64;
2414 else if(op2->kind == 23)
2415 *value2 = (float)(float)op2->__anon1.ui64;
2416 else if(op2->kind == 22 && op2->type->isSigned)
2417 *value2 = (float)(float)op2->__anon1.i64;
2418 else if(op2->kind == 22)
2419 *value2 = (float)(float)op2->__anon1.ui64;
2420 else if(op2->kind == 2 && op2->type->isSigned)
2421 *value2 = (float)(float)op2->__anon1.s;
2422 else if(op2->kind == 2)
2423 *value2 = (float)(float)op2->__anon1.us;
2424 else if(op2->kind == 1 && op2->type->isSigned)
2425 *value2 = (float)(float)op2->__anon1.c;
2426 else if(op2->kind == 24 || op2->kind == 1)
2427 *value2 = (float)(float)op2->__anon1.uc;
2428 else if(op2->kind == 6)
2429 *value2 = (float)op2->__anon1.f;
2430 else if(op2->kind == 7)
2431 *value2 = (float)op2->__anon1.d;
2432 else if(op2->kind == 13)
2433 *value2 = (float)(float)op2->__anon1.ui64;
2439 unsigned int GetOpDouble(struct Operand * op2, double * value2)
2441 if(op2->kind == 3 && op2->type->isSigned)
2442 *value2 = (double)(double)op2->__anon1.i;
2443 else if(op2->kind == 3)
2444 *value2 = (double)(double)op2->__anon1.ui;
2445 else if(op2->kind == 4 && op2->type->isSigned)
2446 *value2 = (double)(double)op2->__anon1.i64;
2447 else if(op2->kind == 4)
2448 *value2 = (double)(double)op2->__anon1.ui64;
2449 else if(op2->kind == 23 && op2->type->isSigned)
2450 *value2 = (double)(double)op2->__anon1.i64;
2451 else if(op2->kind == 23)
2452 *value2 = (double)(double)op2->__anon1.ui64;
2453 else if(op2->kind == 22 && op2->type->isSigned)
2454 *value2 = (double)(double)op2->__anon1.i64;
2455 else if(op2->kind == 22)
2456 *value2 = (double)(double)op2->__anon1.ui64;
2457 else if(op2->kind == 2 && op2->type->isSigned)
2458 *value2 = (double)(double)op2->__anon1.s;
2459 else if(op2->kind == 2)
2460 *value2 = (double)(double)op2->__anon1.us;
2461 else if(op2->kind == 1 && op2->type->isSigned)
2462 *value2 = (double)(double)op2->__anon1.c;
2463 else if(op2->kind == 24 || op2->kind == 1)
2464 *value2 = (double)(double)op2->__anon1.uc;
2465 else if(op2->kind == 6)
2466 *value2 = (double)op2->__anon1.f;
2467 else if(op2->kind == 7)
2468 *value2 = (double)op2->__anon1.d;
2469 else if(op2->kind == 13)
2470 *value2 = (double)(double)op2->__anon1.ui64;
2476 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2478 int value2 = op2->__anon1.i;
2481 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
2484 exp->expType = op1->type;
2486 op1->type->refCount++;
2491 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2493 unsigned int value2 = op2->__anon1.ui;
2496 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
2499 exp->expType = op1->type;
2501 op1->type->refCount++;
2506 static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2508 long long value2 = op2->__anon1.i64;
2511 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
2514 exp->expType = op1->type;
2516 op1->type->refCount++;
2521 static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2523 uint64 value2 = op2->__anon1.ui64;
2526 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
2529 exp->expType = op1->type;
2531 op1->type->refCount++;
2536 static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2538 short value2 = op2->__anon1.s;
2541 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s + value2));
2544 exp->expType = op1->type;
2546 op1->type->refCount++;
2551 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2553 unsigned short value2 = op2->__anon1.us;
2556 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us + value2));
2559 exp->expType = op1->type;
2561 op1->type->refCount++;
2566 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2568 char value2 = op2->__anon1.c;
2571 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c + value2));
2574 exp->expType = op1->type;
2576 op1->type->refCount++;
2581 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2583 unsigned char value2 = op2->__anon1.uc;
2586 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc + value2));
2589 exp->expType = op1->type;
2591 op1->type->refCount++;
2596 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2598 float value2 = op2->__anon1.f;
2601 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
2604 exp->expType = op1->type;
2606 op1->type->refCount++;
2611 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2613 double value2 = op2->__anon1.d;
2616 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
2619 exp->expType = op1->type;
2621 op1->type->refCount++;
2626 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2628 int value2 = op2->__anon1.i;
2631 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
2634 exp->expType = op1->type;
2636 op1->type->refCount++;
2641 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2643 unsigned int value2 = op2->__anon1.ui;
2646 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
2649 exp->expType = op1->type;
2651 op1->type->refCount++;
2656 static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2658 long long value2 = op2->__anon1.i64;
2661 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
2664 exp->expType = op1->type;
2666 op1->type->refCount++;
2671 static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2673 uint64 value2 = op2->__anon1.ui64;
2676 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
2679 exp->expType = op1->type;
2681 op1->type->refCount++;
2686 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2688 short value2 = op2->__anon1.s;
2691 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s - value2));
2694 exp->expType = op1->type;
2696 op1->type->refCount++;
2701 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2703 unsigned short value2 = op2->__anon1.us;
2706 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us - value2));
2709 exp->expType = op1->type;
2711 op1->type->refCount++;
2716 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2718 char value2 = op2->__anon1.c;
2721 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c - value2));
2724 exp->expType = op1->type;
2726 op1->type->refCount++;
2731 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2733 unsigned char value2 = op2->__anon1.uc;
2736 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc - value2));
2739 exp->expType = op1->type;
2741 op1->type->refCount++;
2746 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2748 float value2 = op2->__anon1.f;
2751 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
2754 exp->expType = op1->type;
2756 op1->type->refCount++;
2761 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2763 double value2 = op2->__anon1.d;
2766 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
2769 exp->expType = op1->type;
2771 op1->type->refCount++;
2776 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2778 int value2 = op2->__anon1.i;
2781 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
2784 exp->expType = op1->type;
2786 op1->type->refCount++;
2791 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2793 unsigned int value2 = op2->__anon1.ui;
2796 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
2799 exp->expType = op1->type;
2801 op1->type->refCount++;
2806 static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2808 long long value2 = op2->__anon1.i64;
2811 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
2814 exp->expType = op1->type;
2816 op1->type->refCount++;
2821 static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2823 uint64 value2 = op2->__anon1.ui64;
2826 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
2829 exp->expType = op1->type;
2831 op1->type->refCount++;
2836 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2838 short value2 = op2->__anon1.s;
2841 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s * value2));
2844 exp->expType = op1->type;
2846 op1->type->refCount++;
2851 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2853 unsigned short value2 = op2->__anon1.us;
2856 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us * value2));
2859 exp->expType = op1->type;
2861 op1->type->refCount++;
2866 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2868 char value2 = op2->__anon1.c;
2871 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c * value2));
2874 exp->expType = op1->type;
2876 op1->type->refCount++;
2881 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2883 unsigned char value2 = op2->__anon1.uc;
2886 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc * value2));
2889 exp->expType = op1->type;
2891 op1->type->refCount++;
2896 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2898 float value2 = op2->__anon1.f;
2901 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
2904 exp->expType = op1->type;
2906 op1->type->refCount++;
2911 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2913 double value2 = op2->__anon1.d;
2916 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
2919 exp->expType = op1->type;
2921 op1->type->refCount++;
2926 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2928 int value2 = op2->__anon1.i;
2931 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i / value2)) : 0);
2934 exp->expType = op1->type;
2936 op1->type->refCount++;
2941 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2943 unsigned int value2 = op2->__anon1.ui;
2946 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui / value2)) : 0);
2949 exp->expType = op1->type;
2951 op1->type->refCount++;
2956 static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2958 long long value2 = op2->__anon1.i64;
2961 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 / value2)) : 0);
2964 exp->expType = op1->type;
2966 op1->type->refCount++;
2971 static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2973 uint64 value2 = op2->__anon1.ui64;
2976 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 / value2)) : 0);
2979 exp->expType = op1->type;
2981 op1->type->refCount++;
2986 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2988 short value2 = op2->__anon1.s;
2991 exp->__anon1.__anon2.string = PrintShort(value2 ? ((short)(op1->__anon1.s / value2)) : 0);
2994 exp->expType = op1->type;
2996 op1->type->refCount++;
3001 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3003 unsigned short value2 = op2->__anon1.us;
3006 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((unsigned short)(op1->__anon1.us / value2)) : 0);
3009 exp->expType = op1->type;
3011 op1->type->refCount++;
3016 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3018 char value2 = op2->__anon1.c;
3021 exp->__anon1.__anon2.string = PrintChar(value2 ? ((char)(op1->__anon1.c / value2)) : 0);
3024 exp->expType = op1->type;
3026 op1->type->refCount++;
3031 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3033 unsigned char value2 = op2->__anon1.uc;
3036 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((unsigned char)(op1->__anon1.uc / value2)) : 0);
3039 exp->expType = op1->type;
3041 op1->type->refCount++;
3046 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3048 float value2 = op2->__anon1.f;
3051 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f / value2));
3054 exp->expType = op1->type;
3056 op1->type->refCount++;
3061 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3063 double value2 = op2->__anon1.d;
3066 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d / value2));
3069 exp->expType = op1->type;
3071 op1->type->refCount++;
3076 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3078 int value2 = op2->__anon1.i;
3081 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i % value2)) : 0);
3084 exp->expType = op1->type;
3086 op1->type->refCount++;
3091 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3093 unsigned int value2 = op2->__anon1.ui;
3096 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui % value2)) : 0);
3099 exp->expType = op1->type;
3101 op1->type->refCount++;
3106 static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3108 long long value2 = op2->__anon1.i64;
3111 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 % value2)) : 0);
3114 exp->expType = op1->type;
3116 op1->type->refCount++;
3121 static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3123 uint64 value2 = op2->__anon1.ui64;
3126 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 % value2)) : 0);
3129 exp->expType = op1->type;
3131 op1->type->refCount++;
3136 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3138 short value2 = op2->__anon1.s;
3141 exp->__anon1.__anon2.string = PrintShort(value2 ? ((short)(op1->__anon1.s % value2)) : 0);
3144 exp->expType = op1->type;
3146 op1->type->refCount++;
3151 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3153 unsigned short value2 = op2->__anon1.us;
3156 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((unsigned short)(op1->__anon1.us % value2)) : 0);
3159 exp->expType = op1->type;
3161 op1->type->refCount++;
3166 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3168 char value2 = op2->__anon1.c;
3171 exp->__anon1.__anon2.string = PrintChar(value2 ? ((char)(op1->__anon1.c % value2)) : 0);
3174 exp->expType = op1->type;
3176 op1->type->refCount++;
3181 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3183 unsigned char value2 = op2->__anon1.uc;
3186 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((unsigned char)(op1->__anon1.uc % value2)) : 0);
3189 exp->expType = op1->type;
3191 op1->type->refCount++;
3196 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
3199 exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
3202 exp->expType = op1->type;
3204 op1->type->refCount++;
3209 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
3212 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
3215 exp->expType = op1->type;
3217 op1->type->refCount++;
3222 static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
3225 exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
3228 exp->expType = op1->type;
3230 op1->type->refCount++;
3235 static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
3238 exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
3241 exp->expType = op1->type;
3243 op1->type->refCount++;
3248 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
3251 exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
3254 exp->expType = op1->type;
3256 op1->type->refCount++;
3261 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
3264 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
3267 exp->expType = op1->type;
3269 op1->type->refCount++;
3274 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
3277 exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
3280 exp->expType = op1->type;
3282 op1->type->refCount++;
3287 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
3290 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
3293 exp->expType = op1->type;
3295 op1->type->refCount++;
3300 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
3303 exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
3306 exp->expType = op1->type;
3308 op1->type->refCount++;
3313 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
3316 exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
3319 exp->expType = op1->type;
3321 op1->type->refCount++;
3326 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
3329 exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
3332 exp->expType = op1->type;
3334 op1->type->refCount++;
3339 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
3342 exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
3345 exp->expType = op1->type;
3347 op1->type->refCount++;
3352 static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
3355 exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
3358 exp->expType = op1->type;
3360 op1->type->refCount++;
3365 static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
3368 exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
3371 exp->expType = op1->type;
3373 op1->type->refCount++;
3378 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
3381 exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
3384 exp->expType = op1->type;
3386 op1->type->refCount++;
3391 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
3394 exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
3397 exp->expType = op1->type;
3399 op1->type->refCount++;
3404 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
3407 exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
3410 exp->expType = op1->type;
3412 op1->type->refCount++;
3417 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
3420 exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
3423 exp->expType = op1->type;
3425 op1->type->refCount++;
3430 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
3433 exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
3436 exp->expType = op1->type;
3438 op1->type->refCount++;
3443 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
3446 exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
3449 exp->expType = op1->type;
3451 op1->type->refCount++;
3456 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
3459 exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
3462 exp->expType = op1->type;
3464 op1->type->refCount++;
3469 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
3472 exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
3475 exp->expType = op1->type;
3477 op1->type->refCount++;
3482 static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
3485 exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
3488 exp->expType = op1->type;
3490 op1->type->refCount++;
3495 static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
3498 exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
3501 exp->expType = op1->type;
3503 op1->type->refCount++;
3508 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
3511 exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
3514 exp->expType = op1->type;
3516 op1->type->refCount++;
3521 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
3524 exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
3527 exp->expType = op1->type;
3529 op1->type->refCount++;
3534 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
3537 exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
3540 exp->expType = op1->type;
3542 op1->type->refCount++;
3547 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
3550 exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
3553 exp->expType = op1->type;
3555 op1->type->refCount++;
3560 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
3563 exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
3566 exp->expType = op1->type;
3568 op1->type->refCount++;
3573 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
3576 exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
3579 exp->expType = op1->type;
3581 op1->type->refCount++;
3586 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3588 int value2 = op2->__anon1.i;
3591 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
3594 exp->expType = op1->type;
3596 op1->type->refCount++;
3601 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3603 unsigned int value2 = op2->__anon1.ui;
3606 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
3609 exp->expType = op1->type;
3611 op1->type->refCount++;
3616 static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3618 long long value2 = op2->__anon1.i64;
3621 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
3624 exp->expType = op1->type;
3626 op1->type->refCount++;
3631 static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3633 uint64 value2 = op2->__anon1.ui64;
3636 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
3639 exp->expType = op1->type;
3641 op1->type->refCount++;
3646 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3648 short value2 = op2->__anon1.s;
3651 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
3654 exp->expType = op1->type;
3656 op1->type->refCount++;
3661 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3663 unsigned short value2 = op2->__anon1.us;
3666 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
3669 exp->expType = op1->type;
3671 op1->type->refCount++;
3676 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3678 char value2 = op2->__anon1.c;
3681 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
3684 exp->expType = op1->type;
3686 op1->type->refCount++;
3691 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3693 unsigned char value2 = op2->__anon1.uc;
3696 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
3699 exp->expType = op1->type;
3701 op1->type->refCount++;
3706 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3708 float value2 = op2->__anon1.f;
3711 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
3714 exp->expType = op1->type;
3716 op1->type->refCount++;
3721 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3723 double value2 = op2->__anon1.d;
3726 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
3729 exp->expType = op1->type;
3731 op1->type->refCount++;
3736 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3738 int value2 = op2->__anon1.i;
3741 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
3744 exp->expType = op1->type;
3746 op1->type->refCount++;
3751 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3753 unsigned int value2 = op2->__anon1.ui;
3756 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
3759 exp->expType = op1->type;
3761 op1->type->refCount++;
3766 static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3768 long long value2 = op2->__anon1.i64;
3771 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
3774 exp->expType = op1->type;
3776 op1->type->refCount++;
3781 static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3783 uint64 value2 = op2->__anon1.ui64;
3786 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
3789 exp->expType = op1->type;
3791 op1->type->refCount++;
3796 static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3798 short value2 = op2->__anon1.s;
3801 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
3804 exp->expType = op1->type;
3806 op1->type->refCount++;
3811 static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3813 unsigned short value2 = op2->__anon1.us;
3816 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
3819 exp->expType = op1->type;
3821 op1->type->refCount++;
3826 static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3828 char value2 = op2->__anon1.c;
3831 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
3834 exp->expType = op1->type;
3836 op1->type->refCount++;
3841 static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3843 unsigned char value2 = op2->__anon1.uc;
3846 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
3849 exp->expType = op1->type;
3851 op1->type->refCount++;
3856 static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3858 float value2 = op2->__anon1.f;
3861 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
3864 exp->expType = op1->type;
3866 op1->type->refCount++;
3871 static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3873 double value2 = op2->__anon1.d;
3876 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
3879 exp->expType = op1->type;
3881 op1->type->refCount++;
3886 static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3888 int value2 = op2->__anon1.i;
3891 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
3894 exp->expType = op1->type;
3896 op1->type->refCount++;
3901 static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3903 unsigned int value2 = op2->__anon1.ui;
3906 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
3909 exp->expType = op1->type;
3911 op1->type->refCount++;
3916 static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3918 long long value2 = op2->__anon1.i64;
3921 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
3924 exp->expType = op1->type;
3926 op1->type->refCount++;
3931 static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3933 uint64 value2 = op2->__anon1.ui64;
3936 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
3939 exp->expType = op1->type;
3941 op1->type->refCount++;
3946 static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3948 short value2 = op2->__anon1.s;
3951 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
3954 exp->expType = op1->type;
3956 op1->type->refCount++;
3961 static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3963 unsigned short value2 = op2->__anon1.us;
3966 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
3969 exp->expType = op1->type;
3971 op1->type->refCount++;
3976 static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3978 char value2 = op2->__anon1.c;
3981 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
3984 exp->expType = op1->type;
3986 op1->type->refCount++;
3991 static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3993 unsigned char value2 = op2->__anon1.uc;
3996 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
3999 exp->expType = op1->type;
4001 op1->type->refCount++;
4006 static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4008 float value2 = op2->__anon1.f;
4011 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
4014 exp->expType = op1->type;
4016 op1->type->refCount++;
4021 static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4023 double value2 = op2->__anon1.d;
4026 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
4029 exp->expType = op1->type;
4031 op1->type->refCount++;
4036 static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4038 int value2 = op2->__anon1.i;
4041 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
4044 exp->expType = op1->type;
4046 op1->type->refCount++;
4051 static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4053 unsigned int value2 = op2->__anon1.ui;
4056 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
4059 exp->expType = op1->type;
4061 op1->type->refCount++;
4066 static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4068 long long value2 = op2->__anon1.i64;
4071 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
4074 exp->expType = op1->type;
4076 op1->type->refCount++;
4081 static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4083 uint64 value2 = op2->__anon1.ui64;
4086 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
4089 exp->expType = op1->type;
4091 op1->type->refCount++;
4096 static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4098 short value2 = op2->__anon1.s;
4101 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
4104 exp->expType = op1->type;
4106 op1->type->refCount++;
4111 static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4113 unsigned short value2 = op2->__anon1.us;
4116 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
4119 exp->expType = op1->type;
4121 op1->type->refCount++;
4126 static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4128 char value2 = op2->__anon1.c;
4131 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
4134 exp->expType = op1->type;
4136 op1->type->refCount++;
4141 static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4143 unsigned char value2 = op2->__anon1.uc;
4146 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
4149 exp->expType = op1->type;
4151 op1->type->refCount++;
4156 static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4158 float value2 = op2->__anon1.f;
4161 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
4164 exp->expType = op1->type;
4166 op1->type->refCount++;
4171 static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4173 double value2 = op2->__anon1.d;
4176 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
4179 exp->expType = op1->type;
4181 op1->type->refCount++;
4186 static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4188 int value2 = op2->__anon1.i;
4191 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i /= value2)) : 0);
4194 exp->expType = op1->type;
4196 op1->type->refCount++;
4201 static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4203 unsigned int value2 = op2->__anon1.ui;
4206 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui /= value2)) : 0);
4209 exp->expType = op1->type;
4211 op1->type->refCount++;
4216 static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4218 long long value2 = op2->__anon1.i64;
4221 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 /= value2)) : 0);
4224 exp->expType = op1->type;
4226 op1->type->refCount++;
4231 static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4233 uint64 value2 = op2->__anon1.ui64;
4236 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 /= value2)) : 0);
4239 exp->expType = op1->type;
4241 op1->type->refCount++;
4246 static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4248 short value2 = op2->__anon1.s;
4251 exp->__anon1.__anon2.string = PrintShort(value2 ? ((op1->__anon1.s /= value2)) : 0);
4254 exp->expType = op1->type;
4256 op1->type->refCount++;
4261 static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4263 unsigned short value2 = op2->__anon1.us;
4266 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((op1->__anon1.us /= value2)) : 0);
4269 exp->expType = op1->type;
4271 op1->type->refCount++;
4276 static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4278 char value2 = op2->__anon1.c;
4281 exp->__anon1.__anon2.string = PrintChar(value2 ? ((op1->__anon1.c /= value2)) : 0);
4284 exp->expType = op1->type;
4286 op1->type->refCount++;
4291 static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4293 unsigned char value2 = op2->__anon1.uc;
4296 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((op1->__anon1.uc /= value2)) : 0);
4299 exp->expType = op1->type;
4301 op1->type->refCount++;
4306 static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4308 float value2 = op2->__anon1.f;
4311 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f /= value2));
4314 exp->expType = op1->type;
4316 op1->type->refCount++;
4321 static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4323 double value2 = op2->__anon1.d;
4326 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d /= value2));
4329 exp->expType = op1->type;
4331 op1->type->refCount++;
4336 static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4338 int value2 = op2->__anon1.i;
4341 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i %= value2)) : 0);
4344 exp->expType = op1->type;
4346 op1->type->refCount++;
4351 static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4353 unsigned int value2 = op2->__anon1.ui;
4356 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui %= value2)) : 0);
4359 exp->expType = op1->type;
4361 op1->type->refCount++;
4366 static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4368 long long value2 = op2->__anon1.i64;
4371 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 %= value2)) : 0);
4374 exp->expType = op1->type;
4376 op1->type->refCount++;
4381 static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4383 uint64 value2 = op2->__anon1.ui64;
4386 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 %= value2)) : 0);
4389 exp->expType = op1->type;
4391 op1->type->refCount++;
4396 static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4398 short value2 = op2->__anon1.s;
4401 exp->__anon1.__anon2.string = PrintShort(value2 ? ((op1->__anon1.s %= value2)) : 0);
4404 exp->expType = op1->type;
4406 op1->type->refCount++;
4411 static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4413 unsigned short value2 = op2->__anon1.us;
4416 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((op1->__anon1.us %= value2)) : 0);
4419 exp->expType = op1->type;
4421 op1->type->refCount++;
4426 static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4428 char value2 = op2->__anon1.c;
4431 exp->__anon1.__anon2.string = PrintChar(value2 ? ((op1->__anon1.c %= value2)) : 0);
4434 exp->expType = op1->type;
4436 op1->type->refCount++;
4441 static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4443 unsigned char value2 = op2->__anon1.uc;
4446 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((op1->__anon1.uc %= value2)) : 0);
4449 exp->expType = op1->type;
4451 op1->type->refCount++;
4456 static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4458 int value2 = op2->__anon1.i;
4461 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
4464 exp->expType = op1->type;
4466 op1->type->refCount++;
4471 static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4473 unsigned int value2 = op2->__anon1.ui;
4476 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
4479 exp->expType = op1->type;
4481 op1->type->refCount++;
4486 static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4488 long long value2 = op2->__anon1.i64;
4491 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
4494 exp->expType = op1->type;
4496 op1->type->refCount++;
4501 static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4503 uint64 value2 = op2->__anon1.ui64;
4506 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
4509 exp->expType = op1->type;
4511 op1->type->refCount++;
4516 static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4518 short value2 = op2->__anon1.s;
4521 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s & value2));
4524 exp->expType = op1->type;
4526 op1->type->refCount++;
4531 static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4533 unsigned short value2 = op2->__anon1.us;
4536 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us & value2));
4539 exp->expType = op1->type;
4541 op1->type->refCount++;
4546 static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4548 char value2 = op2->__anon1.c;
4551 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c & value2));
4554 exp->expType = op1->type;
4556 op1->type->refCount++;
4561 static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4563 unsigned char value2 = op2->__anon1.uc;
4566 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc & value2));
4569 exp->expType = op1->type;
4571 op1->type->refCount++;
4576 static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4578 int value2 = op2->__anon1.i;
4581 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
4584 exp->expType = op1->type;
4586 op1->type->refCount++;
4591 static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4593 unsigned int value2 = op2->__anon1.ui;
4596 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
4599 exp->expType = op1->type;
4601 op1->type->refCount++;
4606 static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4608 long long value2 = op2->__anon1.i64;
4611 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
4614 exp->expType = op1->type;
4616 op1->type->refCount++;
4621 static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4623 uint64 value2 = op2->__anon1.ui64;
4626 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
4629 exp->expType = op1->type;
4631 op1->type->refCount++;
4636 static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4638 short value2 = op2->__anon1.s;
4641 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s | value2));
4644 exp->expType = op1->type;
4646 op1->type->refCount++;
4651 static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4653 unsigned short value2 = op2->__anon1.us;
4656 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us | value2));
4659 exp->expType = op1->type;
4661 op1->type->refCount++;
4666 static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4668 char value2 = op2->__anon1.c;
4671 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c | value2));
4674 exp->expType = op1->type;
4676 op1->type->refCount++;
4681 static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4683 unsigned char value2 = op2->__anon1.uc;
4686 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc | value2));
4689 exp->expType = op1->type;
4691 op1->type->refCount++;
4696 static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4698 int value2 = op2->__anon1.i;
4701 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
4704 exp->expType = op1->type;
4706 op1->type->refCount++;
4711 static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4713 unsigned int value2 = op2->__anon1.ui;
4716 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
4719 exp->expType = op1->type;
4721 op1->type->refCount++;
4726 static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4728 long long value2 = op2->__anon1.i64;
4731 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
4734 exp->expType = op1->type;
4736 op1->type->refCount++;
4741 static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4743 uint64 value2 = op2->__anon1.ui64;
4746 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
4749 exp->expType = op1->type;
4751 op1->type->refCount++;
4756 static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4758 short value2 = op2->__anon1.s;
4761 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s ^ value2));
4764 exp->expType = op1->type;
4766 op1->type->refCount++;
4771 static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4773 unsigned short value2 = op2->__anon1.us;
4776 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us ^ value2));
4779 exp->expType = op1->type;
4781 op1->type->refCount++;
4786 static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4788 char value2 = op2->__anon1.c;
4791 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c ^ value2));
4794 exp->expType = op1->type;
4796 op1->type->refCount++;
4801 static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4803 unsigned char value2 = op2->__anon1.uc;
4806 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc ^ value2));
4809 exp->expType = op1->type;
4811 op1->type->refCount++;
4816 static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4818 int value2 = op2->__anon1.i;
4821 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
4824 exp->expType = op1->type;
4826 op1->type->refCount++;
4831 static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4833 unsigned int value2 = op2->__anon1.ui;
4836 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
4839 exp->expType = op1->type;
4841 op1->type->refCount++;
4846 static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4848 long long value2 = op2->__anon1.i64;
4851 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
4854 exp->expType = op1->type;
4856 op1->type->refCount++;
4861 static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4863 uint64 value2 = op2->__anon1.ui64;
4866 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
4869 exp->expType = op1->type;
4871 op1->type->refCount++;
4876 static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4878 short value2 = op2->__anon1.s;
4881 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s << value2));
4884 exp->expType = op1->type;
4886 op1->type->refCount++;
4891 static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4893 unsigned short value2 = op2->__anon1.us;
4896 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us << value2));
4899 exp->expType = op1->type;
4901 op1->type->refCount++;
4906 static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4908 char value2 = op2->__anon1.c;
4911 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c << value2));
4914 exp->expType = op1->type;
4916 op1->type->refCount++;
4921 static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4923 unsigned char value2 = op2->__anon1.uc;
4926 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc << value2));
4929 exp->expType = op1->type;
4931 op1->type->refCount++;
4936 static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4938 int value2 = op2->__anon1.i;
4941 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
4944 exp->expType = op1->type;
4946 op1->type->refCount++;
4951 static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4953 unsigned int value2 = op2->__anon1.ui;
4956 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
4959 exp->expType = op1->type;
4961 op1->type->refCount++;
4966 static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4968 long long value2 = op2->__anon1.i64;
4971 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
4974 exp->expType = op1->type;
4976 op1->type->refCount++;
4981 static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4983 uint64 value2 = op2->__anon1.ui64;
4986 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
4989 exp->expType = op1->type;
4991 op1->type->refCount++;
4996 static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4998 short value2 = op2->__anon1.s;
5001 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >> value2));
5004 exp->expType = op1->type;
5006 op1->type->refCount++;
5011 static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5013 unsigned short value2 = op2->__anon1.us;
5016 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >> value2));
5019 exp->expType = op1->type;
5021 op1->type->refCount++;
5026 static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5028 char value2 = op2->__anon1.c;
5031 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >> value2));
5034 exp->expType = op1->type;
5036 op1->type->refCount++;
5041 static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5043 unsigned char value2 = op2->__anon1.uc;
5046 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >> value2));
5049 exp->expType = op1->type;
5051 op1->type->refCount++;
5056 static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
5059 exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
5062 exp->expType = op1->type;
5064 op1->type->refCount++;
5069 static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
5072 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
5075 exp->expType = op1->type;
5077 op1->type->refCount++;
5082 static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
5085 exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
5088 exp->expType = op1->type;
5090 op1->type->refCount++;
5095 static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
5098 exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
5101 exp->expType = op1->type;
5103 op1->type->refCount++;
5108 static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
5111 exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
5114 exp->expType = op1->type;
5116 op1->type->refCount++;
5121 static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
5124 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
5127 exp->expType = op1->type;
5129 op1->type->refCount++;
5134 static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
5137 exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
5140 exp->expType = op1->type;
5142 op1->type->refCount++;
5147 static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
5150 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
5153 exp->expType = op1->type;
5155 op1->type->refCount++;
5160 static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5162 int value2 = op2->__anon1.i;
5165 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
5168 exp->expType = op1->type;
5170 op1->type->refCount++;
5175 static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5177 unsigned int value2 = op2->__anon1.ui;
5180 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
5183 exp->expType = op1->type;
5185 op1->type->refCount++;
5190 static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5192 long long value2 = op2->__anon1.i64;
5195 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
5198 exp->expType = op1->type;
5200 op1->type->refCount++;
5205 static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5207 uint64 value2 = op2->__anon1.ui64;
5210 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
5213 exp->expType = op1->type;
5215 op1->type->refCount++;
5220 static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5222 short value2 = op2->__anon1.s;
5225 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
5228 exp->expType = op1->type;
5230 op1->type->refCount++;
5235 static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5237 unsigned short value2 = op2->__anon1.us;
5240 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
5243 exp->expType = op1->type;
5245 op1->type->refCount++;
5250 static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5252 char value2 = op2->__anon1.c;
5255 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
5258 exp->expType = op1->type;
5260 op1->type->refCount++;
5265 static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5267 unsigned char value2 = op2->__anon1.uc;
5270 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
5273 exp->expType = op1->type;
5275 op1->type->refCount++;
5280 static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5282 int value2 = op2->__anon1.i;
5285 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
5288 exp->expType = op1->type;
5290 op1->type->refCount++;
5295 static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5297 unsigned int value2 = op2->__anon1.ui;
5300 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
5303 exp->expType = op1->type;
5305 op1->type->refCount++;
5310 static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5312 long long value2 = op2->__anon1.i64;
5315 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
5318 exp->expType = op1->type;
5320 op1->type->refCount++;
5325 static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5327 uint64 value2 = op2->__anon1.ui64;
5330 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
5333 exp->expType = op1->type;
5335 op1->type->refCount++;
5340 static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5342 short value2 = op2->__anon1.s;
5345 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
5348 exp->expType = op1->type;
5350 op1->type->refCount++;
5355 static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5357 unsigned short value2 = op2->__anon1.us;
5360 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
5363 exp->expType = op1->type;
5365 op1->type->refCount++;
5370 static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5372 char value2 = op2->__anon1.c;
5375 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
5378 exp->expType = op1->type;
5380 op1->type->refCount++;
5385 static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5387 unsigned char value2 = op2->__anon1.uc;
5390 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
5393 exp->expType = op1->type;
5395 op1->type->refCount++;
5400 static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5402 int value2 = op2->__anon1.i;
5405 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
5408 exp->expType = op1->type;
5410 op1->type->refCount++;
5415 static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5417 unsigned int value2 = op2->__anon1.ui;
5420 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
5423 exp->expType = op1->type;
5425 op1->type->refCount++;
5430 static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5432 long long value2 = op2->__anon1.i64;
5435 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
5438 exp->expType = op1->type;
5440 op1->type->refCount++;
5445 static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5447 uint64 value2 = op2->__anon1.ui64;
5450 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
5453 exp->expType = op1->type;
5455 op1->type->refCount++;
5460 static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5462 short value2 = op2->__anon1.s;
5465 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
5468 exp->expType = op1->type;
5470 op1->type->refCount++;
5475 static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5477 unsigned short value2 = op2->__anon1.us;
5480 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
5483 exp->expType = op1->type;
5485 op1->type->refCount++;
5490 static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5492 char value2 = op2->__anon1.c;
5495 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
5498 exp->expType = op1->type;
5500 op1->type->refCount++;
5505 static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5507 unsigned char value2 = op2->__anon1.uc;
5510 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
5513 exp->expType = op1->type;
5515 op1->type->refCount++;
5520 static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5522 int value2 = op2->__anon1.i;
5525 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
5528 exp->expType = op1->type;
5530 op1->type->refCount++;
5535 static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5537 unsigned int value2 = op2->__anon1.ui;
5540 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
5543 exp->expType = op1->type;
5545 op1->type->refCount++;
5550 static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5552 long long value2 = op2->__anon1.i64;
5555 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
5558 exp->expType = op1->type;
5560 op1->type->refCount++;
5565 static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5567 uint64 value2 = op2->__anon1.ui64;
5570 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
5573 exp->expType = op1->type;
5575 op1->type->refCount++;
5580 static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5582 short value2 = op2->__anon1.s;
5585 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
5588 exp->expType = op1->type;
5590 op1->type->refCount++;
5595 static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5597 unsigned short value2 = op2->__anon1.us;
5600 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
5603 exp->expType = op1->type;
5605 op1->type->refCount++;
5610 static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5612 char value2 = op2->__anon1.c;
5615 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
5618 exp->expType = op1->type;
5620 op1->type->refCount++;
5625 static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5627 unsigned char value2 = op2->__anon1.uc;
5630 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
5633 exp->expType = op1->type;
5635 op1->type->refCount++;
5640 static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5642 int value2 = op2->__anon1.i;
5645 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
5648 exp->expType = op1->type;
5650 op1->type->refCount++;
5655 static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5657 unsigned int value2 = op2->__anon1.ui;
5660 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
5663 exp->expType = op1->type;
5665 op1->type->refCount++;
5670 static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5672 long long value2 = op2->__anon1.i64;
5675 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
5678 exp->expType = op1->type;
5680 op1->type->refCount++;
5685 static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5687 uint64 value2 = op2->__anon1.ui64;
5690 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
5693 exp->expType = op1->type;
5695 op1->type->refCount++;
5700 static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5702 short value2 = op2->__anon1.s;
5705 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
5708 exp->expType = op1->type;
5710 op1->type->refCount++;
5715 static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5717 unsigned short value2 = op2->__anon1.us;
5720 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
5723 exp->expType = op1->type;
5725 op1->type->refCount++;
5730 static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5732 char value2 = op2->__anon1.c;
5735 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
5738 exp->expType = op1->type;
5740 op1->type->refCount++;
5745 static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5747 unsigned char value2 = op2->__anon1.uc;
5750 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
5753 exp->expType = op1->type;
5755 op1->type->refCount++;
5760 static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
5763 exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
5766 exp->expType = op1->type;
5768 op1->type->refCount++;
5773 static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
5776 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
5779 exp->expType = op1->type;
5781 op1->type->refCount++;
5786 static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
5789 exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
5792 exp->expType = op1->type;
5794 op1->type->refCount++;
5799 static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
5802 exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
5805 exp->expType = op1->type;
5807 op1->type->refCount++;
5812 static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
5815 exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
5818 exp->expType = op1->type;
5820 op1->type->refCount++;
5825 static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
5828 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
5831 exp->expType = op1->type;
5833 op1->type->refCount++;
5838 static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
5841 exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
5844 exp->expType = op1->type;
5846 op1->type->refCount++;
5851 static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
5854 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
5857 exp->expType = op1->type;
5859 op1->type->refCount++;
5864 static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5866 int value2 = op2->__anon1.i;
5869 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
5872 exp->expType = op1->type;
5874 op1->type->refCount++;
5879 static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5881 unsigned int value2 = op2->__anon1.ui;
5884 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
5887 exp->expType = op1->type;
5889 op1->type->refCount++;
5894 static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5896 long long value2 = op2->__anon1.i64;
5899 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
5902 exp->expType = op1->type;
5904 op1->type->refCount++;
5909 static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5911 uint64 value2 = op2->__anon1.ui64;
5914 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
5917 exp->expType = op1->type;
5919 op1->type->refCount++;
5924 static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5926 short value2 = op2->__anon1.s;
5929 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
5932 exp->expType = op1->type;
5934 op1->type->refCount++;
5939 static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5941 unsigned short value2 = op2->__anon1.us;
5944 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
5947 exp->expType = op1->type;
5949 op1->type->refCount++;
5954 static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5956 char value2 = op2->__anon1.c;
5959 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
5962 exp->expType = op1->type;
5964 op1->type->refCount++;
5969 static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5971 unsigned char value2 = op2->__anon1.uc;
5974 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
5977 exp->expType = op1->type;
5979 op1->type->refCount++;
5984 static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5986 float value2 = op2->__anon1.f;
5989 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
5992 exp->expType = op1->type;
5994 op1->type->refCount++;
5999 static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6001 double value2 = op2->__anon1.d;
6004 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
6007 exp->expType = op1->type;
6009 op1->type->refCount++;
6014 static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6016 int value2 = op2->__anon1.i;
6019 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
6022 exp->expType = op1->type;
6024 op1->type->refCount++;
6029 static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6031 unsigned int value2 = op2->__anon1.ui;
6034 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
6037 exp->expType = op1->type;
6039 op1->type->refCount++;
6044 static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6046 long long value2 = op2->__anon1.i64;
6049 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
6052 exp->expType = op1->type;
6054 op1->type->refCount++;
6059 static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6061 uint64 value2 = op2->__anon1.ui64;
6064 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
6067 exp->expType = op1->type;
6069 op1->type->refCount++;
6074 static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6076 short value2 = op2->__anon1.s;
6079 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
6082 exp->expType = op1->type;
6084 op1->type->refCount++;
6089 static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6091 unsigned short value2 = op2->__anon1.us;
6094 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
6097 exp->expType = op1->type;
6099 op1->type->refCount++;
6104 static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6106 char value2 = op2->__anon1.c;
6109 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
6112 exp->expType = op1->type;
6114 op1->type->refCount++;
6119 static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6121 unsigned char value2 = op2->__anon1.uc;
6124 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
6127 exp->expType = op1->type;
6129 op1->type->refCount++;
6134 static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6136 float value2 = op2->__anon1.f;
6139 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
6142 exp->expType = op1->type;
6144 op1->type->refCount++;
6149 static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6151 double value2 = op2->__anon1.d;
6154 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
6157 exp->expType = op1->type;
6159 op1->type->refCount++;
6164 static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6166 int value2 = op2->__anon1.i;
6169 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
6172 exp->expType = op1->type;
6174 op1->type->refCount++;
6179 static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6181 unsigned int value2 = op2->__anon1.ui;
6184 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
6187 exp->expType = op1->type;
6189 op1->type->refCount++;
6194 static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6196 long long value2 = op2->__anon1.i64;
6199 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
6202 exp->expType = op1->type;
6204 op1->type->refCount++;
6209 static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6211 uint64 value2 = op2->__anon1.ui64;
6214 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
6217 exp->expType = op1->type;
6219 op1->type->refCount++;
6224 static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6226 short value2 = op2->__anon1.s;
6229 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
6232 exp->expType = op1->type;
6234 op1->type->refCount++;
6239 static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6241 unsigned short value2 = op2->__anon1.us;
6244 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
6247 exp->expType = op1->type;
6249 op1->type->refCount++;
6254 static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6256 char value2 = op2->__anon1.c;
6259 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
6262 exp->expType = op1->type;
6264 op1->type->refCount++;
6269 static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6271 unsigned char value2 = op2->__anon1.uc;
6274 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
6277 exp->expType = op1->type;
6279 op1->type->refCount++;
6284 static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6286 float value2 = op2->__anon1.f;
6289 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
6292 exp->expType = op1->type;
6294 op1->type->refCount++;
6299 static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6301 double value2 = op2->__anon1.d;
6304 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
6307 exp->expType = op1->type;
6309 op1->type->refCount++;
6314 static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6316 int value2 = op2->__anon1.i;
6319 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
6322 exp->expType = op1->type;
6324 op1->type->refCount++;
6329 static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6331 unsigned int value2 = op2->__anon1.ui;
6334 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
6337 exp->expType = op1->type;
6339 op1->type->refCount++;
6344 static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6346 long long value2 = op2->__anon1.i64;
6349 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
6352 exp->expType = op1->type;
6354 op1->type->refCount++;
6359 static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6361 uint64 value2 = op2->__anon1.ui64;
6364 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
6367 exp->expType = op1->type;
6369 op1->type->refCount++;
6374 static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6376 short value2 = op2->__anon1.s;
6379 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
6382 exp->expType = op1->type;
6384 op1->type->refCount++;
6389 static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6391 unsigned short value2 = op2->__anon1.us;
6394 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
6397 exp->expType = op1->type;
6399 op1->type->refCount++;
6404 static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6406 char value2 = op2->__anon1.c;
6409 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
6412 exp->expType = op1->type;
6414 op1->type->refCount++;
6419 static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6421 unsigned char value2 = op2->__anon1.uc;
6424 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
6427 exp->expType = op1->type;
6429 op1->type->refCount++;
6434 static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6436 float value2 = op2->__anon1.f;
6439 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
6442 exp->expType = op1->type;
6444 op1->type->refCount++;
6449 static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6451 double value2 = op2->__anon1.d;
6454 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
6457 exp->expType = op1->type;
6459 op1->type->refCount++;
6464 static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6466 int value2 = op2->__anon1.i;
6469 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
6472 exp->expType = op1->type;
6474 op1->type->refCount++;
6479 static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6481 unsigned int value2 = op2->__anon1.ui;
6484 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
6487 exp->expType = op1->type;
6489 op1->type->refCount++;
6494 static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6496 long long value2 = op2->__anon1.i64;
6499 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
6502 exp->expType = op1->type;
6504 op1->type->refCount++;
6509 static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6511 uint64 value2 = op2->__anon1.ui64;
6514 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
6517 exp->expType = op1->type;
6519 op1->type->refCount++;
6524 static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6526 short value2 = op2->__anon1.s;
6529 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
6532 exp->expType = op1->type;
6534 op1->type->refCount++;
6539 static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6541 unsigned short value2 = op2->__anon1.us;
6544 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
6547 exp->expType = op1->type;
6549 op1->type->refCount++;
6554 static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6556 char value2 = op2->__anon1.c;
6559 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
6562 exp->expType = op1->type;
6564 op1->type->refCount++;
6569 static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6571 unsigned char value2 = op2->__anon1.uc;
6574 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
6577 exp->expType = op1->type;
6579 op1->type->refCount++;
6584 static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6586 float value2 = op2->__anon1.f;
6589 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
6592 exp->expType = op1->type;
6594 op1->type->refCount++;
6599 static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6601 double value2 = op2->__anon1.d;
6604 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
6607 exp->expType = op1->type;
6609 op1->type->refCount++;
6614 static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6616 int value2 = op2->__anon1.i;
6619 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
6622 exp->expType = op1->type;
6624 op1->type->refCount++;
6629 static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6631 unsigned int value2 = op2->__anon1.ui;
6634 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
6637 exp->expType = op1->type;
6639 op1->type->refCount++;
6644 static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6646 long long value2 = op2->__anon1.i64;
6649 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
6652 exp->expType = op1->type;
6654 op1->type->refCount++;
6659 static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6661 uint64 value2 = op2->__anon1.ui64;
6664 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
6667 exp->expType = op1->type;
6669 op1->type->refCount++;
6674 static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6676 short value2 = op2->__anon1.s;
6679 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
6682 exp->expType = op1->type;
6684 op1->type->refCount++;
6689 static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6691 unsigned short value2 = op2->__anon1.us;
6694 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
6697 exp->expType = op1->type;
6699 op1->type->refCount++;
6704 static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6706 char value2 = op2->__anon1.c;
6709 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
6712 exp->expType = op1->type;
6714 op1->type->refCount++;
6719 static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6721 unsigned char value2 = op2->__anon1.uc;
6724 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
6727 exp->expType = op1->type;
6729 op1->type->refCount++;
6734 static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6736 float value2 = op2->__anon1.f;
6739 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
6742 exp->expType = op1->type;
6744 op1->type->refCount++;
6749 static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6751 double value2 = op2->__anon1.d;
6754 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
6757 exp->expType = op1->type;
6759 op1->type->refCount++;
6764 static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6766 int value2 = op2->__anon1.i;
6769 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
6772 exp->expType = op1->type;
6774 op1->type->refCount++;
6779 static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6781 unsigned int value2 = op2->__anon1.ui;
6784 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
6787 exp->expType = op1->type;
6789 op1->type->refCount++;
6794 static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6796 long long value2 = op2->__anon1.i64;
6799 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
6802 exp->expType = op1->type;
6804 op1->type->refCount++;
6809 static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6811 uint64 value2 = op2->__anon1.ui64;
6814 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
6817 exp->expType = op1->type;
6819 op1->type->refCount++;
6824 static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6826 short value2 = op2->__anon1.s;
6829 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
6832 exp->expType = op1->type;
6834 op1->type->refCount++;
6839 static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6841 unsigned short value2 = op2->__anon1.us;
6844 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
6847 exp->expType = op1->type;
6849 op1->type->refCount++;
6854 static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6856 char value2 = op2->__anon1.c;
6859 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
6862 exp->expType = op1->type;
6864 op1->type->refCount++;
6869 static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6871 unsigned char value2 = op2->__anon1.uc;
6874 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
6877 exp->expType = op1->type;
6879 op1->type->refCount++;
6884 static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6886 float value2 = op2->__anon1.f;
6889 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
6892 exp->expType = op1->type;
6894 op1->type->refCount++;
6899 static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6901 double value2 = op2->__anon1.d;
6904 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
6907 exp->expType = op1->type;
6909 op1->type->refCount++;
6914 static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6916 int value2 = op2->__anon1.i;
6919 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
6922 exp->expType = op1->type;
6924 op1->type->refCount++;
6929 static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6931 unsigned int value2 = op2->__anon1.ui;
6934 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
6937 exp->expType = op1->type;
6939 op1->type->refCount++;
6944 static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6946 long long value2 = op2->__anon1.i64;
6949 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
6952 exp->expType = op1->type;
6954 op1->type->refCount++;
6959 static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6961 uint64 value2 = op2->__anon1.ui64;
6964 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
6967 exp->expType = op1->type;
6969 op1->type->refCount++;
6974 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6976 short value2 = op2->__anon1.s;
6979 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
6982 exp->expType = op1->type;
6984 op1->type->refCount++;
6989 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6991 unsigned short value2 = op2->__anon1.us;
6994 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
6997 exp->expType = op1->type;
6999 op1->type->refCount++;
7004 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7006 char value2 = op2->__anon1.c;
7009 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
7012 exp->expType = op1->type;
7014 op1->type->refCount++;
7019 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7021 unsigned char value2 = op2->__anon1.uc;
7024 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
7027 exp->expType = op1->type;
7029 op1->type->refCount++;
7034 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7036 float value2 = op2->__anon1.f;
7039 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
7042 exp->expType = op1->type;
7044 op1->type->refCount++;
7049 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7051 double value2 = op2->__anon1.d;
7054 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
7057 exp->expType = op1->type;
7059 op1->type->refCount++;
7064 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7067 exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
7070 exp->expType = op1->type;
7072 op1->type->refCount++;
7077 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7080 exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
7083 exp->expType = op1->type;
7085 op1->type->refCount++;
7090 static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7093 exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
7096 exp->expType = op1->type;
7098 op1->type->refCount++;
7103 static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7106 exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
7109 exp->expType = op1->type;
7111 op1->type->refCount++;
7116 static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7119 exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
7122 exp->expType = op1->type;
7124 op1->type->refCount++;
7129 static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7132 exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
7135 exp->expType = op1->type;
7137 op1->type->refCount++;
7142 static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7145 exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
7148 exp->expType = op1->type;
7150 op1->type->refCount++;
7155 static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7158 exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
7161 exp->expType = op1->type;
7163 op1->type->refCount++;
7168 static void PrintName(struct Type * type, char * string, unsigned int fullName)
7170 if(type->name && type->name[0])
7173 strcat(string, type->name);
7176 char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
7182 strcat(string, name);
7187 static void PrintAttribs(struct Type * type, char * string)
7192 strcat(string, "dllexport ");
7193 if(type->attrStdcall)
7194 strcat(string, "stdcall ");
7198 static struct Type * FindMember(struct Type * type, char * string)
7200 struct Type * memberType;
7202 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
7204 if(!memberType->name)
7206 struct Type * subType = FindMember(memberType, string);
7211 else if(!strcmp(memberType->name, string))
7214 return (((void *)0));
7217 unsigned int __ecereProp_Type_Get_isPointerType(struct Type * this);
7219 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
7221 static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
7223 unsigned int result = 0;
7228 if(op->kind == 1 || op->kind == 15 || op->kind == 24)
7229 result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
7233 if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
7234 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
7237 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)
7238 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7241 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)
7242 result = GetOpFloat(op, &op->__anon1.f);
7245 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)
7246 result = GetOpDouble(op, &op->__anon1.d);
7249 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)
7250 result = GetOpUInt64(op, &op->__anon1.ui64);
7253 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)
7254 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
7257 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
7258 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7261 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
7262 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7268 struct OpTable floatOps =
7270 (void *)(FloatAdd), (void *)(FloatSub), (void *)(FloatMul), (void *)(FloatDiv), (((void *)0)), (void *)(FloatNeg), (void *)(FloatInc), (void *)(FloatDec), (void *)(FloatAsign), (void *)(FloatAddAsign), (void *)(FloatSubAsign), (void *)(FloatMulAsign), (void *)(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)), (void *)(FloatEqu), (void *)(FloatNqu), (void *)(FloatAnd), (void *)(FloatOr), (void *)(FloatGrt), (void *)(FloatSma), (void *)(FloatGrtEqu), (void *)(FloatSmaEqu)
7273 struct OpTable doubleOps =
7275 (void *)(DoubleAdd), (void *)(DoubleSub), (void *)(DoubleMul), (void *)(DoubleDiv), (((void *)0)), (void *)(DoubleNeg), (void *)(DoubleInc), (void *)(DoubleDec), (void *)(DoubleAsign), (void *)(DoubleAddAsign), (void *)(DoubleSubAsign), (void *)(DoubleMulAsign), (void *)(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)), (void *)(DoubleEqu), (void *)(DoubleNqu), (void *)(DoubleAnd), (void *)(DoubleOr), (void *)(DoubleGrt), (void *)(DoubleSma), (void *)(DoubleGrtEqu), (void *)(DoubleSmaEqu)
7278 struct OpTable intOps =
7280 (void *)(IntAdd), (void *)(IntSub), (void *)(IntMul), (void *)(IntDiv), (void *)(IntMod), (void *)(IntNeg), (void *)(IntInc), (void *)(IntDec), (void *)(IntAsign), (void *)(IntAddAsign), (void *)(IntSubAsign), (void *)(IntMulAsign), (void *)(IntDivAsign), (void *)(IntModAsign), (void *)(IntBitAnd), (void *)(IntBitOr), (void *)(IntBitXor), (void *)(IntLShift), (void *)(IntRShift), (void *)(IntBitNot), (void *)(IntAndAsign), (void *)(IntOrAsign), (void *)(IntXorAsign), (void *)(IntLShiftAsign), (void *)(IntRShiftAsign), (void *)(IntNot), (void *)(IntEqu), (void *)(IntNqu), (void *)(IntAnd), (void *)(IntOr), (void *)(IntGrt), (void *)(IntSma), (void *)(IntGrtEqu), (void *)(IntSmaEqu), (void *)(IntCond)
7283 struct OpTable uintOps =
7285 (void *)(UIntAdd), (void *)(UIntSub), (void *)(UIntMul), (void *)(UIntDiv), (void *)(UIntMod), (void *)(UIntNeg), (void *)(UIntInc), (void *)(UIntDec), (void *)(UIntAsign), (void *)(UIntAddAsign), (void *)(UIntSubAsign), (void *)(UIntMulAsign), (void *)(UIntDivAsign), (void *)(UIntModAsign), (void *)(UIntBitAnd), (void *)(UIntBitOr), (void *)(UIntBitXor), (void *)(UIntLShift), (void *)(UIntRShift), (void *)(UIntBitNot), (void *)(UIntAndAsign), (void *)(UIntOrAsign), (void *)(UIntXorAsign), (void *)(UIntLShiftAsign), (void *)(UIntRShiftAsign), (void *)(UIntNot), (void *)(UIntEqu), (void *)(UIntNqu), (void *)(UIntAnd), (void *)(UIntOr), (void *)(UIntGrt), (void *)(UIntSma), (void *)(UIntGrtEqu), (void *)(UIntSmaEqu), (void *)(UIntCond)
7288 struct OpTable int64Ops =
7290 (void *)(Int64Add), (void *)(Int64Sub), (void *)(Int64Mul), (void *)(Int64Div), (void *)(Int64Mod), (void *)(Int64Neg), (void *)(Int64Inc), (void *)(Int64Dec), (void *)(Int64Asign), (void *)(Int64AddAsign), (void *)(Int64SubAsign), (void *)(Int64MulAsign), (void *)(Int64DivAsign), (void *)(Int64ModAsign), (void *)(Int64BitAnd), (void *)(Int64BitOr), (void *)(Int64BitXor), (void *)(Int64LShift), (void *)(Int64RShift), (void *)(Int64BitNot), (void *)(Int64AndAsign), (void *)(Int64OrAsign), (void *)(Int64XorAsign), (void *)(Int64LShiftAsign), (void *)(Int64RShiftAsign), (void *)(Int64Not), (void *)(Int64Equ), (void *)(Int64Nqu), (void *)(Int64And), (void *)(Int64Or), (void *)(Int64Grt), (void *)(Int64Sma), (void *)(Int64GrtEqu), (void *)(Int64SmaEqu), (void *)(Int64Cond)
7293 struct OpTable uint64Ops =
7295 (void *)(UInt64Add), (void *)(UInt64Sub), (void *)(UInt64Mul), (void *)(UInt64Div), (void *)(UInt64Mod), (void *)(UInt64Neg), (void *)(UInt64Inc), (void *)(UInt64Dec), (void *)(UInt64Asign), (void *)(UInt64AddAsign), (void *)(UInt64SubAsign), (void *)(UInt64MulAsign), (void *)(UInt64DivAsign), (void *)(UInt64ModAsign), (void *)(UInt64BitAnd), (void *)(UInt64BitOr), (void *)(UInt64BitXor), (void *)(UInt64LShift), (void *)(UInt64RShift), (void *)(UInt64BitNot), (void *)(UInt64AndAsign), (void *)(UInt64OrAsign), (void *)(UInt64XorAsign), (void *)(UInt64LShiftAsign), (void *)(UInt64RShiftAsign), (void *)(UInt64Not), (void *)(UInt64Equ), (void *)(UInt64Nqu), (void *)(UInt64And), (void *)(UInt64Or), (void *)(UInt64Grt), (void *)(UInt64Sma), (void *)(UInt64GrtEqu), (void *)(UInt64SmaEqu), (void *)(UInt64Cond)
7298 struct OpTable shortOps =
7300 (void *)(ShortAdd), (void *)(ShortSub), (void *)(ShortMul), (void *)(ShortDiv), (void *)(ShortMod), (void *)(ShortNeg), (void *)(ShortInc), (void *)(ShortDec), (void *)(ShortAsign), (void *)(ShortAddAsign), (void *)(ShortSubAsign), (void *)(ShortMulAsign), (void *)(ShortDivAsign), (void *)(ShortModAsign), (void *)(ShortBitAnd), (void *)(ShortBitOr), (void *)(ShortBitXor), (void *)(ShortLShift), (void *)(ShortRShift), (void *)(ShortBitNot), (void *)(ShortAndAsign), (void *)(ShortOrAsign), (void *)(ShortXorAsign), (void *)(ShortLShiftAsign), (void *)(ShortRShiftAsign), (void *)(ShortNot), (void *)(ShortEqu), (void *)(ShortNqu), (void *)(ShortAnd), (void *)(ShortOr), (void *)(ShortGrt), (void *)(ShortSma), (void *)(ShortGrtEqu), (void *)(ShortSmaEqu), (void *)(ShortCond)
7303 struct OpTable ushortOps =
7305 (void *)(UShortAdd), (void *)(UShortSub), (void *)(UShortMul), (void *)(UShortDiv), (void *)(UShortMod), (void *)(UShortNeg), (void *)(UShortInc), (void *)(UShortDec), (void *)(UShortAsign), (void *)(UShortAddAsign), (void *)(UShortSubAsign), (void *)(UShortMulAsign), (void *)(UShortDivAsign), (void *)(UShortModAsign), (void *)(UShortBitAnd), (void *)(UShortBitOr), (void *)(UShortBitXor), (void *)(UShortLShift), (void *)(UShortRShift), (void *)(UShortBitNot), (void *)(UShortAndAsign), (void *)(UShortOrAsign), (void *)(UShortXorAsign), (void *)(UShortLShiftAsign), (void *)(UShortRShiftAsign), (void *)(UShortNot), (void *)(UShortEqu), (void *)(UShortNqu), (void *)(UShortAnd), (void *)(UShortOr), (void *)(UShortGrt), (void *)(UShortSma), (void *)(UShortGrtEqu), (void *)(UShortSmaEqu), (void *)(UShortCond)
7308 struct OpTable charOps =
7310 (void *)(CharAdd), (void *)(CharSub), (void *)(CharMul), (void *)(CharDiv), (void *)(CharMod), (void *)(CharNeg), (void *)(CharInc), (void *)(CharDec), (void *)(CharAsign), (void *)(CharAddAsign), (void *)(CharSubAsign), (void *)(CharMulAsign), (void *)(CharDivAsign), (void *)(CharModAsign), (void *)(CharBitAnd), (void *)(CharBitOr), (void *)(CharBitXor), (void *)(CharLShift), (void *)(CharRShift), (void *)(CharBitNot), (void *)(CharAndAsign), (void *)(CharOrAsign), (void *)(CharXorAsign), (void *)(CharLShiftAsign), (void *)(CharRShiftAsign), (void *)(CharNot), (void *)(CharEqu), (void *)(CharNqu), (void *)(CharAnd), (void *)(CharOr), (void *)(CharGrt), (void *)(CharSma), (void *)(CharGrtEqu), (void *)(CharSmaEqu), (void *)(CharCond)
7313 struct OpTable ucharOps =
7315 (void *)(UCharAdd), (void *)(UCharSub), (void *)(UCharMul), (void *)(UCharDiv), (void *)(UCharMod), (void *)(UCharNeg), (void *)(UCharInc), (void *)(UCharDec), (void *)(UCharAsign), (void *)(UCharAddAsign), (void *)(UCharSubAsign), (void *)(UCharMulAsign), (void *)(UCharDivAsign), (void *)(UCharModAsign), (void *)(UCharBitAnd), (void *)(UCharBitOr), (void *)(UCharBitXor), (void *)(UCharLShift), (void *)(UCharRShift), (void *)(UCharBitNot), (void *)(UCharAndAsign), (void *)(UCharOrAsign), (void *)(UCharXorAsign), (void *)(UCharLShiftAsign), (void *)(UCharRShiftAsign), (void *)(UCharNot), (void *)(UCharEqu), (void *)(UCharNqu), (void *)(UCharAnd), (void *)(UCharOr), (void *)(UCharGrt), (void *)(UCharSma), (void *)(UCharGrtEqu), (void *)(UCharSmaEqu), (void *)(UCharCond)
7318 struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned int * offset)
7320 struct Type * memberType;
7322 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
7324 if(!memberType->name)
7326 struct Type * subType = FindMember(memberType, string);
7330 *offset += memberType->offset;
7334 else if(!strcmp(memberType->name, string))
7336 *offset += memberType->offset;
7340 return (((void *)0));
7343 struct __ecereNameSpace__ecere__com__Module;
7345 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);
7347 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
7349 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);
7351 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);
7353 extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Instance * moduleToFind);
7355 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
7360 struct __ecereNameSpace__ecere__sys__BTNode * parent;
7361 struct __ecereNameSpace__ecere__sys__BTNode * left;
7362 struct __ecereNameSpace__ecere__sys__BTNode * right;
7364 struct __ecereNameSpace__ecere__com__Instance * module;
7365 char * dataTypeString;
7366 struct Type * dataType;
7371 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);
7373 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
7375 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);
7377 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
7379 struct __ecereNameSpace__ecere__com__DefinedExpression;
7381 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
7383 struct __ecereNameSpace__ecere__com__DefinedExpression
7385 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
7386 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
7389 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
7392 struct __ecereNameSpace__ecere__sys__BinaryTree;
7394 struct __ecereNameSpace__ecere__sys__BinaryTree
7396 struct __ecereNameSpace__ecere__sys__BTNode * root;
7398 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
7399 void (* FreeKey)(void * key);
7402 struct __ecereNameSpace__ecere__com__Class
7404 struct __ecereNameSpace__ecere__com__Class * prev;
7405 struct __ecereNameSpace__ecere__com__Class * next;
7411 unsigned int (* Constructor)(void * );
7412 void (* Destructor)(void * );
7415 struct __ecereNameSpace__ecere__com__Class * base;
7416 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
7417 struct __ecereNameSpace__ecere__sys__BinaryTree members;
7418 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
7419 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
7420 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
7421 struct __ecereNameSpace__ecere__sys__OldList derivatives;
7425 struct __ecereNameSpace__ecere__com__Instance * module;
7426 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
7427 const char * dataTypeString;
7428 struct Type * dataType;
7430 int defaultAlignment;
7431 void (* Initialize)();
7433 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
7434 const char * designerClass;
7435 unsigned int noExpansion;
7436 const char * defaultProperty;
7437 unsigned int comRedefinition;
7440 unsigned int internalDecl;
7442 unsigned int computeSize;
7443 short structAlignment;
7444 short pointerAlignment;
7445 int destructionWatchOffset;
7447 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
7448 int inheritanceAccess;
7449 const char * fullName;
7451 struct __ecereNameSpace__ecere__sys__OldList conversions;
7452 struct __ecereNameSpace__ecere__sys__OldList templateParams;
7453 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
7454 struct __ecereNameSpace__ecere__com__Class * templateClass;
7455 struct __ecereNameSpace__ecere__sys__OldList templatized;
7457 unsigned int isInstanceClass;
7458 unsigned int byValueSystemClass;
7461 struct __ecereNameSpace__ecere__com__NameSpace
7464 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
7465 struct __ecereNameSpace__ecere__com__NameSpace * left;
7466 struct __ecereNameSpace__ecere__com__NameSpace * right;
7468 struct __ecereNameSpace__ecere__com__NameSpace * parent;
7469 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
7470 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
7471 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
7472 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
7475 struct __ecereNameSpace__ecere__com__DataMember
7477 struct __ecereNameSpace__ecere__com__DataMember * prev;
7478 struct __ecereNameSpace__ecere__com__DataMember * next;
7480 unsigned int isProperty;
7483 struct __ecereNameSpace__ecere__com__Class * _class;
7484 const char * dataTypeString;
7485 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
7486 struct Type * dataType;
7490 struct __ecereNameSpace__ecere__sys__OldList members;
7491 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
7493 short structAlignment;
7494 short pointerAlignment;
7497 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
7499 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
7501 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
7503 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
7505 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
7507 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Conversion;
7509 static void _DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef, unsigned int fwdDecl)
7513 if(type->kind == 11)
7515 struct Type * param;
7517 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
7518 _DeclareType(neededFor, param, forFunctionDef, 0, fwdDecl);
7519 _DeclareType(neededFor, type->__anon1.__anon2.returnType, forFunctionDef, 0, fwdDecl);
7521 else if(type->kind == 13)
7522 _DeclareType(neededFor, type->__anon1.type, 0, 0, fwdDecl);
7523 else if(type->kind == 8)
7525 struct __ecereNameSpace__ecere__com__Class * c = type->__anon1._class->__anon1.registered;
7527 _DeclareStruct(neededFor, c ? c->fullName : "ecere::com::Instance", c ? c->type == 5 : 0, needDereference && c && c->type == 1, fwdDecl);
7529 else if(type->kind == 9 || type->kind == 10)
7531 struct Type * member;
7533 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
7534 _DeclareType(neededFor, member, needDereference, forFunctionDef, fwdDecl);
7536 else if(type->kind == 12)
7537 _DeclareType(neededFor, type->__anon1.__anon4.arrayType, 1, 0, fwdDecl);
7541 static unsigned int CheckConstCompatibility(struct Type * source, struct Type * dest, unsigned int warn)
7543 unsigned int status = 1;
7545 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))
7547 struct __ecereNameSpace__ecere__com__Class * sourceClass = source->kind == 8 ? source->__anon1._class->__anon1.registered : (((void *)0));
7548 struct __ecereNameSpace__ecere__com__Class * destClass = dest->kind == 8 ? dest->__anon1._class->__anon1.registered : (((void *)0));
7550 if((!sourceClass || (sourceClass && sourceClass->type == 0 && !sourceClass->structSize)) && (!destClass || (destClass && destClass->type == 0 && !destClass->structSize)))
7552 struct Type * sourceType = source, * destType = dest;
7554 while((sourceType->kind == 13 || sourceType->kind == 12) && sourceType->__anon1.type)
7555 sourceType = sourceType->__anon1.type;
7556 while((destType->kind == 13 || destType->kind == 12) && destType->__anon1.type)
7557 destType = destType->__anon1.type;
7558 if(!destType->constant && sourceType->constant)
7562 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "discarding const qualifier\n", (((void *)0))));
7569 struct Operand GetOperand(struct Expression * exp)
7578 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
7581 struct Type * type = exp->expType;
7585 while(type->kind == 8 && type->__anon1._class && 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))
7587 if(!type->__anon1._class->__anon1.registered->dataType)
7588 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
7589 type = type->__anon1._class->__anon1.registered->dataType;
7591 if(exp->type == 3 && op.kind == 13)
7593 op.__anon1.ui64 = (uint64)(uintptr_t)exp->__anon1.__anon2.string;
7597 else if(exp->isConstant && exp->type == 2)
7599 op.kind = type->kind;
7606 if(exp->__anon1.__anon1.constant[0] == '\'')
7608 op.__anon1.c = exp->__anon1.__anon1.constant[1];
7611 else if(type->isSigned)
7613 op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7618 op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7624 if(exp->__anon1.__anon1.constant[0] == '\'')
7626 op.__anon1.s = exp->__anon1.__anon1.constant[1];
7629 else if(type->isSigned)
7631 op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7636 op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7642 if(exp->__anon1.__anon1.constant[0] == '\'')
7644 op.__anon1.i = exp->__anon1.__anon1.constant[1];
7647 else if(type->isSigned)
7649 op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7654 op.__anon1.ui = (unsigned int)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7662 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7667 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7675 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7680 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7688 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7693 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7699 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
7700 op.__anon1.f = __ecereMethod_float_inf();
7701 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
7702 op.__anon1.f = -__ecereMethod_float_inf();
7703 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
7704 op.__anon1.f = __ecereMethod_float_nan();
7705 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
7706 op.__anon1.f = -__ecereMethod_float_nan();
7708 op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
7712 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
7713 op.__anon1.d = __ecereMethod_double_inf();
7714 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
7715 op.__anon1.d = -__ecereMethod_double_inf();
7716 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
7717 op.__anon1.d = __ecereMethod_double_nan();
7718 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
7719 op.__anon1.d = -__ecereMethod_double_nan();
7721 op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
7727 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7737 static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
7741 switch(_class->typeSize)
7744 if(!strcmp(_class->dataTypeString, "uint64"))
7745 v = (long long)*(uint64 *)ptr;
7747 v = *(long long *)ptr;
7750 if(!strcmp(_class->dataTypeString, "uint"))
7751 v = (long long)*(unsigned int *)ptr;
7753 v = (long long)*(int *)ptr;
7756 if(!strcmp(_class->dataTypeString, "uint16"))
7757 v = (long long)*(unsigned short *)ptr;
7759 v = (long long)*(short *)ptr;
7762 if(!strcmp(_class->dataTypeString, "byte"))
7763 v = (long long)*(unsigned char *)ptr;
7765 v = (long long)*(char *)ptr;
7771 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
7773 if(!type->isSigned && type->kind != 22 && type->kind != 23)
7774 ListAdd(specs, MkSpecifier(UNSIGNED));
7779 if(type->__anon1._class->__anon1.registered)
7781 if(!type->__anon1._class->__anon1.registered->dataType)
7782 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
7783 GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
7788 ListAdd(specs, MkSpecifier(DOUBLE));
7791 ListAdd(specs, MkSpecifier(FLOAT));
7794 ListAdd(specs, MkSpecifier(CHAR));
7797 ListAdd(specs, MkSpecifier(_BOOL));
7800 ListAdd(specs, MkSpecifier(SHORT));
7803 ListAdd(specs, MkSpecifier(INT64));
7806 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
7809 ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
7813 ListAdd(specs, MkSpecifier(INT));
7818 static void PrintTypeSpecs(struct Type * type, char * string, unsigned int fullName, unsigned int printConst)
7822 if(printConst && type->constant)
7823 strcat(string, "const ");
7828 struct Symbol * c = type->__anon1._class;
7829 unsigned int isObjectBaseClass = !c || !c->string || !strcmp(c->string, "class");
7831 if(type->classObjectType == 2 && isObjectBaseClass)
7832 strcat(string, "typed_object");
7833 else if(type->classObjectType == 3 && isObjectBaseClass)
7834 strcat(string, "any_object");
7838 strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
7840 if(type->byReference)
7841 strcat(string, " &");
7845 strcat(string, "void");
7848 strcat(string, type->isSigned ? "int" : "uint");
7851 strcat(string, type->isSigned ? "int64" : "uint64");
7854 strcat(string, type->isSigned ? "intptr" : "uintptr");
7857 strcat(string, type->isSigned ? "intsize" : "uintsize");
7860 strcat(string, type->isSigned ? "char" : "byte");
7863 strcat(string, "_Bool");
7866 strcat(string, type->isSigned ? "short" : "uint16");
7869 strcat(string, "float");
7872 strcat(string, "double");
7875 if(type->__anon1.__anon1.enumName)
7877 strcat(string, "struct ");
7878 strcat(string, type->__anon1.__anon1.enumName);
7880 else if(type->typeName)
7881 strcat(string, type->typeName);
7884 struct Type * member;
7886 strcat(string, "struct { ");
7887 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
7889 PrintType(member, string, 1, fullName);
7890 strcat(string, "; ");
7892 strcat(string, "}");
7896 if(type->__anon1.__anon1.enumName)
7898 strcat(string, "union ");
7899 strcat(string, type->__anon1.__anon1.enumName);
7901 else if(type->typeName)
7902 strcat(string, type->typeName);
7905 strcat(string, "union ");
7906 strcat(string, "(unnamed)");
7910 if(type->__anon1.__anon1.enumName)
7912 strcat(string, "enum ");
7913 strcat(string, type->__anon1.__anon1.enumName);
7915 else if(type->typeName)
7916 strcat(string, type->typeName);
7918 strcat(string, "int");
7921 strcat(string, "...");
7924 strcat(string, "subclass(");
7925 strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
7926 strcat(string, ")");
7929 strcat(string, type->__anon1.templateParameter->identifier->string);
7932 strcat(string, "thisclass");
7935 strcat(string, "__builtin_va_list");
7941 unsigned int RelatedUnits(struct __ecereNameSpace__ecere__com__Class * c1, struct __ecereNameSpace__ecere__com__Class * c2)
7943 if(c1->base->type == 3)
7945 if(c2->base->type == 3)
7950 extern char * __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
7952 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
7954 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
7956 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
7958 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyImport;
7960 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
7962 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType;
7964 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
7966 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MethodImport;
7968 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionImport;
7970 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
7972 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
7974 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
7976 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
7978 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
7980 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
7982 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
7984 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
7986 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
7988 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
7990 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
7992 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
7994 struct __ecereNameSpace__ecere__com__Application
7997 const char * * argv;
7999 unsigned int isGUIApp;
8000 struct __ecereNameSpace__ecere__sys__OldList allModules;
8001 char * parsedCommand;
8002 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
8005 static void FindNextDataMember(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)
8009 *curMember = (*curMember)->next;
8010 if(subMemberStackPos && *subMemberStackPos > 0 && subMemberStack[*subMemberStackPos - 1]->type == 1)
8012 *curMember = subMemberStack[--(*subMemberStackPos)];
8013 *curMember = (*curMember)->next;
8015 while((*curMember) && (*curMember)->isProperty)
8016 *curMember = (*curMember)->next;
8017 if(subMemberStackPos)
8019 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
8021 subMemberStack[(*subMemberStackPos)++] = *curMember;
8022 *curMember = (*curMember)->members.first;
8023 while(*curMember && (*curMember)->isProperty)
8024 *curMember = (*curMember)->next;
8032 if(subMemberStackPos && *subMemberStackPos)
8034 *curMember = subMemberStack[--(*subMemberStackPos)];
8035 *curMember = (*curMember)->next;
8039 struct __ecereNameSpace__ecere__com__Class * lastCurClass = *curClass;
8041 if(*curClass == _class)
8043 for(*curClass = _class; (*curClass)->base != lastCurClass && (*curClass)->base->type != 1000; *curClass = (*curClass)->base)
8045 *curMember = (*curClass)->membersAndProperties.first;
8047 while((*curMember) && (*curMember)->isProperty)
8048 *curMember = (*curMember)->next;
8049 if(subMemberStackPos)
8051 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
8053 subMemberStack[(*subMemberStackPos)++] = *curMember;
8054 *curMember = (*curMember)->members.first;
8055 while(*curMember && (*curMember)->isProperty)
8056 *curMember = (*curMember)->next;
8063 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
8065 struct __ecereNameSpace__ecere__sys__BinaryTree * tree = &nameSpace->functions;
8066 struct GlobalData * data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((&*tree), name);
8067 struct __ecereNameSpace__ecere__com__NameSpace * child;
8071 for(child = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->nameSpaces); child; child = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)child)))
8073 data = ScanGlobalData(child, name);
8081 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
8083 int nsLen = strlen(nameSpace);
8084 struct Symbol * symbol;
8086 for(symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(tree, nameSpace); symbol; symbol = (struct Symbol *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)symbol)))
8088 char * s = symbol->string;
8090 if(!strncmp(s, nameSpace, nsLen))
8095 for(c = strlen(s) - 1; c >= 0; c--)
8098 namePart = s + c + 1;
8099 if(!strcmp(namePart, name))
8107 return (((void *)0));
8110 unsigned int GetInt(struct Expression * exp, int * value2)
8112 struct Operand op2 = GetOperand(exp);
8114 return GetOpInt(&op2, value2);
8117 unsigned int GetUInt(struct Expression * exp, unsigned int * value2)
8119 struct Operand op2 = GetOperand(exp);
8121 return GetOpUInt(&op2, value2);
8124 unsigned int GetInt64(struct Expression * exp, long long * value2)
8126 struct Operand op2 = GetOperand(exp);
8128 return GetOpInt64(&op2, value2);
8131 unsigned int GetUInt64(struct Expression * exp, uint64 * value2)
8133 struct Operand op2 = GetOperand(exp);
8135 return GetOpUInt64(&op2, value2);
8138 unsigned int GetIntPtr(struct Expression * exp, intptr_t * value2)
8140 struct Operand op2 = GetOperand(exp);
8142 return GetOpIntPtr(&op2, value2);
8145 unsigned int GetUIntPtr(struct Expression * exp, uintptr_t * value2)
8147 struct Operand op2 = GetOperand(exp);
8149 return GetOpUIntPtr(&op2, value2);
8152 unsigned int GetIntSize(struct Expression * exp, ssize_t * value2)
8154 struct Operand op2 = GetOperand(exp);
8156 return GetOpIntSize(&op2, value2);
8159 unsigned int GetUIntSize(struct Expression * exp, size_t * value2)
8161 struct Operand op2 = GetOperand(exp);
8163 return GetOpUIntSize(&op2, value2);
8166 unsigned int GetShort(struct Expression * exp, short * value2)
8168 struct Operand op2 = GetOperand(exp);
8170 return GetOpShort(&op2, value2);
8173 unsigned int GetUShort(struct Expression * exp, unsigned short * value2)
8175 struct Operand op2 = GetOperand(exp);
8177 return GetOpUShort(&op2, value2);
8180 unsigned int GetChar(struct Expression * exp, char * value2)
8182 struct Operand op2 = GetOperand(exp);
8184 return GetOpChar(&op2, value2);
8187 unsigned int GetUChar(struct Expression * exp, unsigned char * value2)
8189 struct Operand op2 = GetOperand(exp);
8191 return GetOpUChar(&op2, value2);
8194 unsigned int GetFloat(struct Expression * exp, float * value2)
8196 struct Operand op2 = GetOperand(exp);
8198 return GetOpFloat(&op2, value2);
8201 unsigned int GetDouble(struct Expression * exp, double * value2)
8203 struct Operand op2 = GetOperand(exp);
8205 return GetOpDouble(&op2, value2);
8208 static void PrePrintType(struct Type * type, char * string, unsigned int fullName, struct Type * parentType, unsigned int printConst)
8210 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8212 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
8213 PrintAttribs(type, string);
8214 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
8215 strcat(string, " const");
8216 PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
8217 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8218 strcat(string, " (");
8219 if(type->kind == 13)
8221 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
8222 PrintAttribs(type->__anon1.type, string);
8224 if(type->kind == 13)
8226 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
8227 strcat(string, "*");
8229 strcat(string, " *");
8231 if(printConst && type->constant && type->kind == 13)
8232 strcat(string, " const");
8235 PrintTypeSpecs(type, string, fullName, printConst);
8238 void PrintExpression(struct Expression * exp, char * string)
8241 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8243 unsigned int backOutputLineNumbers = outputLineNumbers;
8245 outputLineNumbers = 0;
8247 OutputExpression(exp, f);
8248 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8249 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8251 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8252 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
8253 count = strlen(string);
8254 count += ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void * buffer, unsigned int size, unsigned int count))__extension__ ({
8255 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8257 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8258 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(f, string + count, 1, 1023);
8259 string[count] = '\0';
8260 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
8261 outputLineNumbers = backOutputLineNumbers;
8265 struct Type * Dereference(struct Type * source)
8267 struct Type * type = (((void *)0));
8271 if(source->kind == 13 || source->kind == 12)
8273 type = source->__anon1.type;
8274 source->__anon1.type->refCount++;
8276 else if(source->kind == 8 && !strcmp(source->__anon1._class->string, "String"))
8278 type = __extension__ ({
8279 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8281 __ecereInstance1->kind = 1, __ecereInstance1->refCount = 1, __ecereInstance1;
8284 else if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 5)
8290 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot dereference type\n", (((void *)0))));
8295 static struct Type * Reference(struct Type * source)
8297 struct Type * type = (((void *)0));
8301 type = __extension__ ({
8302 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8304 __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
8311 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
8313 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
8315 FreeExpContents(checkedExp);
8316 FreeType(checkedExp->expType);
8317 FreeType(checkedExp->destType);
8318 *checkedExp = *newExp;
8319 ((newExp ? __extension__ ({
8320 void * __ecerePtrToDelete = (newExp);
8322 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8323 }) : 0), newExp = 0);
8324 checkedExp->prev = prev;
8325 checkedExp->next = next;
8328 void FinishTemplatesContext(struct Context * context)
8330 PopContext(context);
8331 FreeContext(context);
8332 ((context ? __extension__ ({
8333 void * __ecerePtrToDelete = (context);
8335 __ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8336 }) : 0), context = 0);
8339 static __attribute__((unused)) void UnusedFunction()
8343 ((const char * (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char * tempString, void * fieldData, unsigned int * needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int, (void *)&a, 0, 0, 0);
8346 struct Expression * ParseExpressionString(char * expression)
8349 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8350 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
8351 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8353 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8354 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
8355 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8356 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8358 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8359 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
8361 parsedExpression = (((void *)0));
8363 expression_yyparse();
8364 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
8365 return parsedExpression;
8368 struct __ecereNameSpace__ecere__com__Module
8370 struct __ecereNameSpace__ecere__com__Instance * application;
8371 struct __ecereNameSpace__ecere__sys__OldList classes;
8372 struct __ecereNameSpace__ecere__sys__OldList defines;
8373 struct __ecereNameSpace__ecere__sys__OldList functions;
8374 struct __ecereNameSpace__ecere__sys__OldList modules;
8375 struct __ecereNameSpace__ecere__com__Instance * prev;
8376 struct __ecereNameSpace__ecere__com__Instance * next;
8382 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
8383 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
8386 static struct GlobalData * FindGlobalData(char * name)
8389 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
8391 nameSpace = globalData;
8392 for(c = 0; name[c]; c++)
8394 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
8396 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
8397 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
8399 strncpy(spaceName, name + start, c - start);
8400 spaceName[c - start] = '\0';
8401 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
8402 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
8404 return (((void *)0));
8405 nameSpace = newSpace;
8413 return ScanGlobalData(nameSpace, name + start);
8415 return (((void *)0));
8418 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
8421 char nameSpace[1024];
8422 const char * namePart;
8423 unsigned int gotColon = 0;
8425 nameSpace[0] = '\0';
8426 for(c = strlen(name) - 1; c >= 0; c--)
8432 namePart = name + c + 1;
8433 while(c >= 0 && name[c] == ':')
8437 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
8441 memcpy(nameSpace, name, c + 1);
8442 nameSpace[c + 1] = 0;
8443 return ScanWithNameSpace(tree, nameSpace, namePart);
8447 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8453 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8457 return ScanWithNameSpace(tree, "", namePart);
8459 return (((void *)0));
8462 static void PrintArraySize(struct Type * arrayType, char * string)
8468 if(arrayType->__anon1.__anon4.enumClass)
8469 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
8470 else if(arrayType->__anon1.__anon4.arraySizeExp)
8471 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
8473 strcat(string, size);
8476 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
8481 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
8483 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8484 strcat(string, ")");
8485 if(type->kind == 12)
8486 PrintArraySize(type, string);
8487 else if(type->kind == 11)
8489 struct Type * param;
8491 strcat(string, "(");
8492 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
8494 PrintType(param, string, 1, fullName);
8496 strcat(string, ", ");
8498 strcat(string, ")");
8500 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8501 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
8504 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
8506 PrePrintType(type, string, fullName, (((void *)0)), printConst);
8507 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
8508 strcat(string, " ");
8509 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
8511 struct Symbol * _class = type->__anon1.__anon2.thisClass;
8513 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
8515 if(type->classObjectType == 1)
8516 strcat(string, "class");
8518 strcat(string, type->byReference ? "typed_object&" : "typed_object");
8520 else if(_class && _class->string)
8522 char * s = _class->string;
8528 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
8534 strcat(string, name);
8537 strcat(string, "::");
8539 if(printName && type->name)
8540 PrintName(type, string, fullName);
8541 PostPrintType(type, string, fullName);
8542 if(type->bitFieldCount)
8546 sprintf(count, ":%d", type->bitFieldCount);
8547 strcat(string, count);
8555 struct Conversion * prev, * next;
8556 struct __ecereNameSpace__ecere__com__Property * convert;
8558 struct Type * resultType;
8561 static void FreeConvert(struct Conversion * convert)
8563 if(convert->resultType)
8564 FreeType(convert->resultType);
8571 struct Enumerator * prev;
8572 struct Enumerator * next;
8573 struct Location loc;
8574 struct Identifier * id;
8575 struct Expression * exp;
8582 struct AsmField * prev;
8583 struct AsmField * next;
8584 struct Location loc;
8586 struct Expression * expression;
8587 struct Identifier * symbolic;
8590 struct ClassDefinition;
8594 struct Context * parent;
8595 struct __ecereNameSpace__ecere__sys__BinaryTree types;
8596 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
8597 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
8598 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
8601 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
8602 struct ClassDefinition * classDef;
8603 unsigned int templateTypesOnly;
8604 unsigned int hasNameSpace;
8609 struct External * prev;
8610 struct External * next;
8611 struct Location loc;
8613 struct Symbol * symbol;
8616 struct FunctionDefinition * function;
8617 struct ClassDefinition * _class;
8618 struct Declaration * declaration;
8619 char * importString;
8620 struct Identifier * id;
8621 struct DBTableDef * table;
8622 } ecere_gcc_struct __anon1;
8624 struct External * fwdDecl;
8625 struct __ecereNameSpace__ecere__com__Instance * outgoing;
8626 struct __ecereNameSpace__ecere__com__Instance * incoming;
8627 int nonBreakableIncoming;
8630 struct ClassDefinition
8632 struct ClassDefinition * prev;
8633 struct ClassDefinition * next;
8634 struct Location loc;
8635 struct Specifier * _class;
8636 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
8637 struct __ecereNameSpace__ecere__sys__OldList * definitions;
8638 struct Symbol * symbol;
8639 struct Location blockStart;
8640 struct Location nameLoc;
8642 unsigned int deleteWatchable;
8645 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
8647 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
8649 void DeclareGlobalData(struct External * neededFor, struct GlobalData * data)
8651 struct Symbol * symbol = data->symbol;
8653 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
8658 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
8661 data->dataType = ProcessTypeString(data->dataTypeString, 0);
8664 struct Declaration * decl;
8665 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
8666 struct Declarator * d;
8667 struct External * external;
8669 specifiers = MkList();
8670 declarators = MkList();
8671 ListAdd(specifiers, MkSpecifier(EXTERN));
8672 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
8673 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
8674 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
8675 decl = MkDeclaration(specifiers, declarators);
8676 external = MkExternalDeclaration(decl);
8678 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
8679 external->symbol = symbol;
8680 symbol->__anon2.__anon1.pointerExternal = external;
8681 DeclareType(external, data->dataType, 1, 1);
8684 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
8685 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, 0);
8688 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
8690 struct Context * ctx;
8691 struct Symbol * symbol = (((void *)0));
8693 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
8695 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
8697 symbol = (((void *)0));
8702 strcpy(curName, thisNameSpace);
8703 strcat(curName, "::");
8704 strcat(curName, name);
8705 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
8708 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
8711 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
8712 if(symbol || ctx == endContext)
8715 if(inCompiler && symbol && ctx == globalContext && symbol->__anon2.__anon1.pointerExternal && curExternal && symbol->__anon2.__anon1.pointerExternal != curExternal)
8716 __ecereMethod_External_CreateUniqueEdge(curExternal, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
8724 struct ClassDef * prev;
8725 struct ClassDef * next;
8726 struct Location loc;
8730 struct Declaration * decl;
8731 struct ClassFunction * function;
8732 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
8733 struct PropertyDef * propertyDef;
8734 struct PropertyWatch * propertyWatch;
8736 struct Identifier * defaultProperty;
8739 struct Identifier * id;
8740 struct Initializer * initializer;
8741 } ecere_gcc_struct __anon1;
8742 } ecere_gcc_struct __anon1;
8749 struct PropertyDef * prev;
8750 struct PropertyDef * next;
8751 struct Location loc;
8752 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
8753 struct Declarator * declarator;
8754 struct Identifier * id;
8755 struct Statement * getStmt;
8756 struct Statement * setStmt;
8757 struct Statement * issetStmt;
8758 struct Symbol * symbol;
8759 struct Expression * category;
8762 unsigned int conversion : 1;
8763 unsigned int isWatchable : 1;
8764 unsigned int isDBProp : 1;
8765 } ecere_gcc_struct __anon1;
8768 static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
8770 struct ClassDef * def;
8773 for(def = (*definitions).first; def; def = def->next)
8777 struct Declaration * decl = def->__anon1.decl;
8779 if(decl && decl->__anon1.__anon1.specifiers)
8781 struct Specifier * spec;
8782 unsigned int isStruct = 0;
8784 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
8786 if(spec->type == 3 || spec->type == 4)
8788 if(spec->__anon1.__anon2.definitions)
8789 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
8795 struct Declarator * d = (((void *)0));
8797 if(decl->__anon1.__anon1.declarators)
8799 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
8801 struct Identifier * idDecl = GetDeclId(d);
8811 sprintf(id, "__anon%d", anonID++);
8812 if(!decl->__anon1.__anon1.declarators)
8813 decl->__anon1.__anon1.declarators = MkList();
8814 ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
8824 typedef union YYSTYPE
8829 struct Identifier * id;
8830 struct Expression * exp;
8831 struct Specifier * specifier;
8832 struct __ecereNameSpace__ecere__sys__OldList * list;
8833 struct Enumerator * enumerator;
8834 struct Declarator * declarator;
8835 struct Pointer * pointer;
8836 struct Initializer * initializer;
8837 struct InitDeclarator * initDeclarator;
8838 struct TypeName * typeName;
8839 struct Declaration * declaration;
8840 struct Statement * stmt;
8841 struct FunctionDefinition * function;
8842 struct External * external;
8843 struct Context * context;
8844 struct AsmField * asmField;
8845 struct Attrib * attrib;
8846 struct ExtDecl * extDecl;
8847 struct Attribute * attribute;
8848 struct Instantiation * instance;
8849 struct MembersInit * membersInit;
8850 struct MemberInit * memberInit;
8851 struct ClassFunction * classFunction;
8852 struct ClassDefinition * _class;
8853 struct ClassDef * classDef;
8854 struct PropertyDef * prop;
8856 struct Symbol * symbol;
8857 struct PropertyWatch * propertyWatch;
8858 struct TemplateParameter * templateParameter;
8859 struct TemplateArgument * templateArgument;
8860 struct TemplateDatatype * templateDatatype;
8861 struct DBTableEntry * dbtableEntry;
8862 struct DBIndexItem * dbindexItem;
8863 struct DBTableDef * dbtableDef;
8864 } ecere_gcc_struct YYSTYPE;
8866 extern YYSTYPE yylval;
8870 struct MemberInit * prev;
8871 struct MemberInit * next;
8872 struct Location loc;
8873 struct Location realLoc;
8874 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
8875 struct Initializer * initializer;
8877 unsigned int variable;
8878 unsigned int takeOutExp;
8881 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
8883 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
8885 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
8887 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
8888 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
8893 const char * dataTypeString;
8895 } ecere_gcc_struct __anon1;
8896 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
8900 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
8902 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
8904 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
8905 struct __ecereNameSpace__ecere__com__Class * sClass;
8907 for(sClass = _class; sClass; sClass = sClass->base)
8910 if(sClass->templateClass)
8911 sClass = sClass->templateClass;
8912 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
8914 if(curParam->type == 0 && !strcmp(param->identifier->string, curParam->name))
8916 for(sClass = sClass->base; sClass; sClass = sClass->base)
8918 if(sClass->templateClass)
8919 sClass = sClass->templateClass;
8920 id += sClass->templateParams.count;
8931 arg = &_class->templateArgs[id];
8932 if(arg && param->type == 0)
8933 (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
8938 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class)
8940 struct Context * context = PushContext();
8942 context->templateTypesOnly = 1;
8943 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
8945 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
8947 for(; param; param = param->next)
8949 if(param->type == 0 && param->identifier)
8951 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
8953 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8959 struct __ecereNameSpace__ecere__com__Class * sClass;
8961 for(sClass = _class; sClass; sClass = sClass->base)
8963 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * p;
8965 for(p = sClass->templateParams.first; p; p = p->next)
8969 struct TemplateParameter * param = p->param;
8970 struct TemplatedType * type;
8974 p->param = param = __extension__ ({
8975 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
8977 __ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
8980 type = __extension__ ({
8981 struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType);
8983 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
8985 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8993 char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
8995 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
8997 unsigned int first = 1;
8999 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9001 char className[1024];
9003 strcpy(className, _class->fullName);
9004 for(param = _class->templateParams.first; param; param = param->next)
9008 strcat(className, "<");
9010 strcat(className, ", ");
9011 if(lastParam + 1 != p)
9013 strcat(className, param->name);
9014 strcat(className, " = ");
9016 strcat(className, param->name);
9024 int len = strlen(className);
9026 if(className[len - 1] == '>')
9027 className[len++] = ' ';
9028 className[len++] = '>';
9029 className[len++] = '\0';
9031 return __ecereNameSpace__ecere__sys__CopyString(className);
9034 return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
9037 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
9041 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9043 unsigned int first = 1;
9045 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9047 char className[1024];
9049 strcpy(className, _class->fullName);
9050 for(param = _class->templateParams.first; param; param = param->next)
9054 strcat(className, "<");
9056 strcat(className, ", ");
9057 if(lastParam + 1 != p)
9059 strcat(className, param->name);
9060 strcat(className, " = ");
9062 strcat(className, param->name);
9070 int len = strlen(className);
9072 if(className[len - 1] == '>')
9073 className[len++] = ' ';
9074 className[len++] = '>';
9075 className[len++] = '\0';
9077 type = MkClassType(className);
9081 type = MkClassType(_class->fullName);
9086 static int DeclareMembers(struct External * neededBy, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
9088 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
9089 struct __ecereNameSpace__ecere__com__DataMember * member;
9090 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
9092 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
9093 DeclareMembers(neededBy, _class->base, 0);
9094 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
9096 if(!member->isProperty)
9098 switch(member->type)
9102 if(!member->dataType && member->dataTypeString)
9103 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9104 if(member->dataType)
9105 DeclareType(neededBy, member->dataType, 1, 0);
9111 DeclareMembers(neededBy, (struct __ecereNameSpace__ecere__com__Class *)member, 1);
9118 FinishTemplatesContext(context);
9119 return topMember ? topMember->memberID : _class->memberID;
9122 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
9124 if(!method->dataType)
9126 struct Context * context = SetupTemplatesContext(method->_class);
9128 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9129 FinishTemplatesContext(context);
9130 if(method->type != 1 && method->dataType)
9132 if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
9134 if(!method->_class->symbol)
9135 method->_class->symbol = FindClass(method->_class->fullName);
9136 method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
9142 void ProcessPropertyType(struct __ecereNameSpace__ecere__com__Property * prop)
9146 struct Context * context = SetupTemplatesContext(prop->_class);
9148 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
9149 FinishTemplatesContext(context);
9153 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
9155 if(specs != (((void *)0)) && _class)
9157 struct Specifier * spec;
9159 for(spec = specs->first; spec; spec = spec->next)
9161 if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
9164 spec->__anon1.__anon1.name = ReplaceThisClass(_class);
9165 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
9171 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
9173 struct Identifier * id = exp->__anon1.__anon1.identifier;
9174 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9175 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
9176 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9177 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9179 if(_class && _class->type == 4)
9181 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
9182 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9186 struct __ecereNameSpace__ecere__com__Class * baseClass;
9188 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
9190 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
9192 for(value = e->values.first; value; value = value->next)
9194 if(!strcmp(value->name, id->string))
9199 exp->isConstant = 1;
9200 if(inCompiler || inPreCompiler || inDebugger)
9204 FreeExpContents(exp);
9206 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
9207 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
9209 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
9210 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9212 exp->expType = MkClassType(baseClass->fullName);
9220 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
9222 ProcessMethodType(method);
9223 exp->expType = __extension__ ({
9224 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
9226 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
9230 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
9233 ProcessPropertyType(prop);
9234 exp->expType = prop->dataType;
9236 prop->dataType->refCount++;
9239 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
9241 if(!member->dataType)
9242 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9243 exp->expType = member->dataType;
9244 if(member->dataType)
9245 member->dataType->refCount++;
9248 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
9250 if(!classProp->dataType)
9251 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
9252 if(classProp->constant)
9254 FreeExpContents(exp);
9255 exp->isConstant = 1;
9256 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
9259 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
9266 sprintf(constant, "%d", (int)classProp->Get(_class));
9267 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9273 exp->expType = classProp->dataType;
9274 if(classProp->dataType)
9275 classProp->dataType->refCount++;
9281 void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
9283 struct Symbol * symbol = prop->symbol;
9284 unsigned int imported = 0;
9285 unsigned int dllImport = 0;
9286 struct External * structExternal = (((void *)0));
9287 struct External * instExternal = (((void *)0));
9289 strcpy(setName, "__ecereProp_");
9290 FullClassNameCat(setName, prop->_class->fullName, 0);
9291 strcat(setName, "_Set_");
9292 FullClassNameCat(setName, prop->name, 1);
9293 strcpy(getName, "__ecereProp_");
9294 FullClassNameCat(getName, prop->_class->fullName, 0);
9295 strcat(getName, "_Get_");
9296 FullClassNameCat(getName, prop->name, 1);
9297 if(!symbol || symbol->_import)
9301 struct Symbol * classSym;
9303 if(!prop->_class->symbol)
9304 prop->_class->symbol = FindClass(prop->_class->fullName);
9305 classSym = prop->_class->symbol;
9306 if(classSym && !classSym->_import)
9308 struct ModuleImport * module;
9310 if(prop->_class->module)
9311 module = FindModule(prop->_class->module);
9313 module = mainModule;
9314 classSym->_import = __extension__ ({
9315 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9317 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->_class->fullName), __ecereInstance1->isRemote = prop->_class->isRemote, __ecereInstance1;
9319 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9321 symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9322 symbol->_import = (struct ClassImport *)__extension__ ({
9323 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
9325 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
9328 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
9331 if((prop->_class->module != privateModule || !strcmp(prop->_class->name, "float") || !strcmp(prop->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)prop->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9336 struct Context * context = SetupTemplatesContext(prop->_class);
9338 symbol->type = ProcessTypeString(prop->dataTypeString, 0);
9339 FinishTemplatesContext(context);
9341 if((prop->Get && !symbol->__anon2.__anon2.externalGet) || (prop->Set && !symbol->__anon2.__anon2.externalSet))
9343 if(prop->_class->type == 0 && prop->_class->structSize)
9344 instExternal = DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
9345 structExternal = DeclareStruct((((void *)0)), prop->_class->fullName, prop->_class->type != 1, 0);
9347 if(prop->Get && !symbol->__anon2.__anon2.externalGet)
9349 struct Declaration * decl;
9350 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9351 struct Declarator * d;
9352 struct __ecereNameSpace__ecere__sys__OldList * params;
9353 struct Specifier * spec = (((void *)0));
9354 struct External * external;
9355 struct Declarator * typeDecl;
9356 unsigned int simple = 0;
9357 unsigned int needReference;
9359 specifiers = MkList();
9360 declarators = MkList();
9362 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9363 d = MkDeclaratorIdentifier(MkIdentifier(getName));
9365 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9367 struct Context * context = SetupTemplatesContext(prop->_class);
9369 typeDecl = SpecDeclFromString(prop->dataTypeString, specifiers, (((void *)0)));
9370 FinishTemplatesContext(context);
9372 needReference = !typeDecl || typeDecl->type == 1;
9373 for(spec = (*specifiers).first; spec; spec = spec->next)
9377 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9381 symbol->_class = classSym->__anon1.registered;
9382 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
9389 d = PlugDeclarator(typeDecl, d);
9392 ListAdd(params, MkTypeName(specifiers, PlugDeclarator(typeDecl, MkDeclaratorIdentifier(MkIdentifier("value")))));
9393 specifiers = MkList();
9395 d = MkDeclaratorFunction(d, params);
9397 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9398 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9399 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9401 ListAdd(specifiers, MkSpecifier(VOID));
9402 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9403 decl = MkDeclaration(specifiers, declarators);
9404 external = MkExternalDeclaration(decl);
9406 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9408 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9410 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9411 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9412 external->symbol = symbol;
9413 symbol->__anon2.__anon2.externalGet = external;
9414 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9416 FreeDeclarator(typeDecl);
9418 if(prop->Set && !symbol->__anon2.__anon2.externalSet)
9420 struct Declaration * decl;
9421 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9422 struct Declarator * d;
9423 struct __ecereNameSpace__ecere__sys__OldList * params;
9424 struct Specifier * spec = (((void *)0));
9425 struct External * external;
9426 struct Declarator * typeDecl;
9427 unsigned int needReference;
9429 declarators = MkList();
9431 if(!prop->conversion || prop->_class->type == 1)
9433 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9435 specifiers = MkList();
9437 struct Context * context = SetupTemplatesContext(prop->_class);
9439 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
9440 FinishTemplatesContext(context);
9442 if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
9443 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
9444 ListAdd(params, MkTypeName(specifiers, d));
9445 d = MkDeclaratorIdentifier(MkIdentifier(setName));
9447 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9448 d = MkDeclaratorFunction(d, params);
9449 needReference = !typeDecl || typeDecl->type == 1;
9450 for(spec = (*specifiers).first; spec; spec = spec->next)
9454 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9457 symbol->_class = classSym->__anon1.registered;
9461 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9462 specifiers = MkList();
9464 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9465 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9466 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9467 if(!prop->conversion || prop->_class->type == 1)
9468 ListAdd(specifiers, MkSpecifier(VOID));
9470 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
9471 decl = MkDeclaration(specifiers, declarators);
9472 external = MkExternalDeclaration(decl);
9474 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9476 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9478 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9479 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9480 external->symbol = symbol;
9481 symbol->__anon2.__anon2.externalSet = external;
9482 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9484 if(!symbol->__anon2.__anon2.externalPtr)
9486 struct Declaration * decl;
9487 struct External * external;
9488 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
9489 char propName[1024];
9492 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9495 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9496 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*specifiers), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
9498 ListAdd(specifiers, MkSpecifierName("Property"));
9499 strcpy(propName, "__ecereProp_");
9500 FullClassNameCat(propName, prop->_class->fullName, 0);
9501 strcat(propName, "_");
9502 FullClassNameCat(propName, prop->name, 1);
9504 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
9506 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9509 strcpy(propName, "__ecerePropM_");
9510 FullClassNameCat(propName, prop->_class->fullName, 0);
9511 strcat(propName, "_");
9512 FullClassNameCat(propName, prop->name, 1);
9513 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9515 decl = MkDeclaration(specifiers, list);
9517 external = MkExternalDeclaration(decl);
9518 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
9519 external->symbol = symbol;
9520 symbol->__anon2.__anon2.externalPtr = external;
9522 if(inCompiler && neededBy)
9524 if(symbol->__anon2.__anon2.externalPtr)
9525 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalPtr, 0);
9526 if(symbol->__anon2.__anon2.externalGet)
9527 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalGet, symbol->__anon2.__anon2.externalGet->type == 0);
9528 if(symbol->__anon2.__anon2.externalSet)
9529 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalSet, symbol->__anon2.__anon2.externalSet->type == 0);
9533 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction);
9535 void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char * name)
9537 struct Symbol * symbol = method->symbol;
9539 if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && (!symbol->__anon2.__anon3.methodCodeExternal || method->type == 1)))
9541 unsigned int dllImport = 0;
9543 if(!method->dataType)
9544 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9546 if(!symbol || method->type == 1)
9548 struct Symbol * classSym;
9550 if(!method->_class->symbol)
9551 method->_class->symbol = FindClass(method->_class->fullName);
9552 classSym = method->_class->symbol;
9553 if(!classSym->_import)
9555 struct ModuleImport * module;
9557 if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->name)
9558 module = FindModule(method->_class->module);
9560 module = mainModule;
9561 classSym->_import = __extension__ ({
9562 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9564 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->_class->fullName), __ecereInstance1->isRemote = method->_class->isRemote, __ecereInstance1;
9566 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9570 symbol = method->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9572 if(!symbol->_import)
9574 symbol->_import = (struct ClassImport *)__extension__ ({
9575 struct MethodImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodImport);
9577 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
9579 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->methods, symbol->_import);
9583 symbol->type = method->dataType;
9585 symbol->type->refCount++;
9588 if(!method->dataType->dllExport)
9590 if((method->_class->module != privateModule || !strcmp(method->_class->name, "float") || !strcmp(method->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9596 struct Declaration * decl;
9597 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9598 struct Declarator * d;
9599 struct Declarator * funcDecl;
9600 struct External * external;
9602 specifiers = MkList();
9603 declarators = MkList();
9605 ListAdd(specifiers, MkSpecifier(EXTERN));
9606 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
9607 ListAdd(specifiers, MkSpecifier(STATIC));
9608 if(method->type == 1)
9610 ListAdd(specifiers, MkSpecifier(INT));
9611 d = MkDeclaratorIdentifier(MkIdentifier(name));
9615 d = MkDeclaratorIdentifier(MkIdentifier(name));
9617 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9619 struct Context * context = SetupTemplatesContext(method->_class);
9621 d = SpecDeclFromString(method->dataTypeString, specifiers, d);
9622 FinishTemplatesContext(context);
9624 funcDecl = GetFuncDecl(d);
9627 struct Specifier * spec, * next;
9629 for(spec = (*specifiers).first; spec; spec = next)
9634 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9635 FreeSpecifier(spec);
9639 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
9641 if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
9643 struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
9644 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")));
9645 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
9646 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
9648 if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
9650 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
9652 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
9653 FreeTypeName(param);
9655 if(!funcDecl->__anon1.function.parameters)
9656 funcDecl->__anon1.function.parameters = MkList();
9657 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
9661 ProcessDeclarator(d, 1);
9662 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9663 decl = MkDeclaration(specifiers, declarators);
9664 ReplaceThisClassSpecifiers(specifiers, method->_class);
9665 external = MkExternalDeclaration(decl);
9666 external->symbol = symbol;
9667 symbol->__anon2.__anon1.pointerExternal = external;
9668 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9669 DeclareStruct(external, method->_class->fullName, 1, 1);
9670 if(method->dataType)
9671 DeclareType(external, method->dataType, 1, 1);
9674 if(inCompiler && neededFor)
9676 struct External * external = symbol->__anon2.__anon1.pointerExternal ? symbol->__anon2.__anon1.pointerExternal : symbol->__anon2.__anon3.methodCodeExternal;
9678 __ecereMethod_External_CreateUniqueEdge(neededFor, external, external->type == 0);
9682 struct __ecereNameSpace__ecere__com__GlobalFunction;
9684 struct __ecereNameSpace__ecere__com__GlobalFunction
9686 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
9687 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
9690 struct __ecereNameSpace__ecere__com__Instance * module;
9691 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
9692 const char * dataTypeString;
9693 struct Type * dataType;
9697 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
9699 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);
9701 unsigned int DeclareFunction(struct External * neededFor, struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
9703 struct Symbol * symbol = function->symbol;
9705 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
9707 unsigned int imported = 0;
9708 unsigned int dllImport = 0;
9710 if(!function->dataType)
9712 function->dataType = ProcessTypeString(function->dataTypeString, 0);
9713 if(!function->dataType->__anon1.__anon2.thisClass)
9714 function->dataType->__anon1.__anon2.staticMethod = 1;
9720 struct ModuleImport * module = FindModule(function->module);
9722 symbol = function->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9725 if(!function->dataType->dllExport)
9727 symbol->_import = (struct ClassImport *)__extension__ ({
9728 struct FunctionImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionImport);
9730 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->name), __ecereInstance1;
9732 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symbol->_import);
9736 symbol->type = ProcessTypeString(function->dataTypeString, 0);
9737 if(!symbol->type->__anon1.__anon2.thisClass)
9738 symbol->type->__anon1.__anon2.staticMethod = 1;
9741 imported = symbol->_import ? 1 : 0;
9742 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9748 struct Declaration * decl;
9749 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9750 struct Declarator * d;
9751 struct Declarator * funcDecl;
9752 struct External * external;
9754 specifiers = MkList();
9755 declarators = MkList();
9756 ListAdd(specifiers, MkSpecifier(EXTERN));
9757 d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
9759 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9760 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
9761 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType == 1)
9763 struct Specifier * spec;
9765 for(spec = (*specifiers).first; spec; spec = spec->next)
9766 if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
9768 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9769 FreeSpecifier(spec);
9773 funcDecl = GetFuncDecl(d);
9774 if(funcDecl && !funcDecl->__anon1.function.parameters)
9776 funcDecl->__anon1.function.parameters = MkList();
9777 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
9779 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9781 struct Context * oldCtx = curContext;
9783 curContext = globalContext;
9784 decl = MkDeclaration(specifiers, declarators);
9785 curContext = oldCtx;
9787 external = MkExternalDeclaration(decl);
9788 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9789 external->symbol = symbol;
9790 symbol->__anon2.__anon1.pointerExternal = external;
9791 DeclareType(external, function->dataType, 1, 1);
9795 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
9796 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
9797 return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1) ? 1 : 0;
9800 void DeclareFunctionUtil(struct External * neededBy, const char * s)
9802 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
9809 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
9810 strcpy(name, "__ecereFunction_");
9811 FullClassNameCat(name, s, 0);
9812 DeclareFunction(neededBy, function, name);
9815 FindSymbol(s, globalContext, globalContext, 0, 0);
9818 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
9820 char propName[1024], propNameM[1024];
9821 char getName[1024], setName[1024];
9822 struct __ecereNameSpace__ecere__sys__OldList * args;
9824 DeclareProperty(curExternal, prop, setName, getName);
9825 strcpy(propName, "__ecereProp_");
9826 FullClassNameCat(propName, prop->_class->fullName, 0);
9827 strcat(propName, "_");
9828 FullClassNameCat(propName, prop->name, 1);
9829 strcpy(propNameM, "__ecerePropM_");
9830 FullClassNameCat(propNameM, prop->_class->fullName, 0);
9831 strcat(propNameM, "_");
9832 FullClassNameCat(propNameM, prop->name, 1);
9833 if(prop->isWatchable)
9836 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9837 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9838 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9840 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9841 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9842 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9843 DeclareFunctionUtil(curExternal, "eInstance_FireWatchers");
9847 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9848 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9849 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9851 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9852 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9853 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9854 DeclareFunctionUtil(curExternal, "eInstance_FireSelfWatchers");
9856 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
9857 curFunction->propSet->fireWatchersDone = 1;
9860 struct __ecereNameSpace__ecere__com__SubModule;
9862 struct __ecereNameSpace__ecere__com__SubModule
9864 struct __ecereNameSpace__ecere__com__SubModule * prev;
9865 struct __ecereNameSpace__ecere__com__SubModule * next;
9866 struct __ecereNameSpace__ecere__com__Instance * module;
9870 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
9872 struct __ecereNameSpace__ecere__com__SubModule * subModule;
9874 if(searchFor == searchIn)
9876 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
9878 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
9880 if(ModuleVisibility(subModule->module, searchFor))
9887 void ProcessExpressionType(struct Expression * exp);
9889 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
9891 if(exp->type == 0 && exp->__anon1.__anon1.identifier)
9893 struct Identifier * id = exp->__anon1.__anon1.identifier;
9894 struct Context * ctx;
9895 struct Symbol * symbol = (((void *)0));
9897 if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
9899 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
9903 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, id->string);
9908 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))))
9910 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
9911 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9912 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9913 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9917 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
9919 if(!prop && !method)
9920 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
9921 if(!prop && !method && !member)
9923 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string);
9925 if(prop || method || member || classProp)
9928 exp->__anon1.member.member = id;
9929 exp->__anon1.member.memberType = 0;
9930 exp->__anon1.member.exp = QMkExpId("this");
9933 else if(_class && _class->templateParams.first)
9935 struct __ecereNameSpace__ecere__com__Class * sClass;
9937 for(sClass = _class; sClass; sClass = sClass->base)
9939 if(sClass->templateParams.first)
9941 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9943 for(param = sClass->templateParams.first; param; param = param->next)
9945 if(param->type == 2 && !strcmp(param->name, id->string))
9947 struct Expression * argExp = GetTemplateArgExpByName(param->name, _class, 2);
9951 struct Declarator * decl;
9952 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
9954 FreeIdentifier(exp->__anon1.member.member);
9955 ProcessExpressionType(argExp);
9956 decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
9957 exp->expType = ProcessType(specs, decl);
9959 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
9970 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
9972 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
9974 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
9976 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
9977 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
9980 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
9981 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
9983 void * ptr = inst->data + dataMember->offset + offset;
9984 char * result = (((void *)0));
9986 exp->loc = member->loc = inst->loc;
9987 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
9988 if(!dataMember->dataType)
9989 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
9990 type = dataMember->dataType;
9993 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
9995 if(_class->type == 4)
9997 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10001 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10002 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10004 for(item = e->values.first; item; item = item->next)
10006 if(item->data == GetEnumValue(_class, ptr))
10008 result = item->name;
10014 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10016 exp->destType = MkClassType(_class->fullName);
10017 ProcessExpressionType(exp);
10021 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10023 if(!_class->dataType)
10024 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10025 type = _class->dataType;
10034 FreeExpContents(exp);
10035 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10041 FreeExpContents(exp);
10042 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10048 FreeExpContents(exp);
10049 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10055 FreeExpContents(exp);
10056 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10062 FreeExpContents(exp);
10063 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10069 FreeExpContents(exp);
10070 exp->__anon1.__anon1.constant = PrintInt64((long long)*(ssize_t *)ptr);
10075 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10078 ListAdd(memberList, member);
10080 if(parentDataMember->type == 1)
10085 void CheckTemplateTypes(struct Expression * exp)
10087 struct Expression * nbExp = GetNonBracketsExp(exp);
10089 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
10091 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10092 struct Context * context;
10093 int kind = exp->expType->kind;
10097 exp->destType->refCount++;
10099 exp->expType->refCount++;
10100 newExp->prev = (((void *)0));
10101 newExp->next = (((void *)0));
10102 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10104 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10106 if(c->type == 2 || c->type == 4 || c->type == 3)
10109 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10110 kind = c->dataType->kind;
10116 if(exp->destType->classObjectType)
10119 exp->destType->refCount--;
10121 exp->expType->refCount--;
10122 ((newExp ? __extension__ ({
10123 void * __ecerePtrToDelete = (newExp);
10125 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10126 }) : 0), newExp = 0);
10130 struct __ecereNameSpace__ecere__sys__OldList * specs;
10131 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10132 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10134 context = PushContext();
10135 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10136 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10137 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10139 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10140 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
10141 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
10142 exp->__anon1.compound->__anon1.compound.context = context;
10143 PopContext(context);
10148 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
10149 if((exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1) || __ecereProp_Type_Get_isPointerType(exp->expType))
10150 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
10152 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10157 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
10159 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10160 struct Context * context;
10161 int kind = exp->expType->kind;
10165 exp->destType->refCount++;
10167 exp->expType->refCount++;
10168 newExp->prev = (((void *)0));
10169 newExp->next = (((void *)0));
10170 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10172 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10174 if(c->type == 2 || c->type == 4 || c->type == 3)
10177 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10178 kind = c->dataType->kind;
10184 if(exp->destType->classObjectType)
10187 exp->destType->refCount--;
10189 exp->expType->refCount--;
10190 ((newExp ? __extension__ ({
10191 void * __ecerePtrToDelete = (newExp);
10193 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10194 }) : 0), newExp = 0);
10198 struct __ecereNameSpace__ecere__sys__OldList * specs;
10199 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10200 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10202 context = PushContext();
10203 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10204 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10205 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10207 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10208 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
10209 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
10210 exp->__anon1.compound->__anon1.compound.context = context;
10211 PopContext(context);
10216 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
10219 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10220 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)));
10221 ProcessExpressionType((*exp->__anon1.list).first);
10227 if(__ecereProp_Type_Get_isPointerType(exp->expType))
10229 exp->needTemplateCast = 2;
10230 newExp->needCast = 1;
10231 newExp->needTemplateCast = 2;
10232 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10234 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
10235 exp->needTemplateCast = 2;
10236 newExp->needCast = 1;
10237 newExp->needTemplateCast = 2;
10238 ProcessExpressionType((*exp->__anon1.list).first);
10244 if(exp->expType->kind == 20)
10246 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
10250 FreeType(exp->destType);
10251 FreeType(exp->expType);
10252 ((newExp ? __extension__ ({
10253 void * __ecerePtrToDelete = (newExp);
10255 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10256 }) : 0), newExp = 0);
10261 char typeString[1024];
10262 struct Declarator * decl;
10263 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
10265 typeString[0] = '\0';
10266 PrintType(exp->expType, typeString, 0, 0);
10267 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
10269 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
10270 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10271 exp->__anon1.cast.exp->needCast = 1;
10272 exp->needTemplateCast = 2;
10273 newExp->needTemplateCast = 2;
10281 static void ProcessInitializer(struct Initializer * init, struct Type * type)
10286 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
10288 if(init->__anon1.exp && !init->__anon1.exp->destType)
10290 FreeType(init->__anon1.exp->destType);
10291 init->__anon1.exp->destType = type;
10295 if(init->__anon1.exp)
10297 ProcessExpressionType(init->__anon1.exp);
10298 init->isConstant = init->__anon1.exp->isConstant;
10304 struct Expression * exp = init->__anon1.exp;
10305 struct Instantiation * inst = exp->__anon1.instance;
10306 struct MembersInit * members;
10309 init->__anon1.list = MkList();
10312 for(members = (*inst->members).first; members; members = members->next)
10314 if(members->type == 0)
10316 struct MemberInit * member;
10318 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
10320 ListAdd(init->__anon1.list, member->initializer);
10321 member->initializer = (((void *)0));
10326 FreeExpression(exp);
10330 struct Initializer * i;
10331 struct Type * initializerType = (((void *)0));
10332 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
10333 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
10334 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
10335 int subMemberStackPos = 0;
10337 if(type && type->kind == 12)
10338 initializerType = Dereference(type);
10339 else if(type && (type->kind == 9 || type->kind == 10))
10340 initializerType = type->__anon1.__anon1.members.first;
10341 for(i = (*init->__anon1.list).first; i; i = i->next)
10343 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
10345 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
10348 if(!curMember->dataType)
10349 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
10350 initializerType = curMember->dataType;
10353 ProcessInitializer(i, initializerType);
10354 if(initializerType && type && (type->kind == 9 || type->kind == 10))
10355 initializerType = initializerType->next;
10357 init->isConstant = 0;
10359 if(type && type->kind == 12)
10360 FreeType(initializerType);
10361 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))
10363 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
10370 void PopulateInstance(struct Instantiation * inst)
10372 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
10373 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
10374 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10375 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
10378 inst->members = MkListOne(MkMembersInitList(memberList));
10380 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
10381 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10383 if(!dataMember->isProperty)
10385 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10386 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
10389 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10390 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10391 struct Type * type;
10392 void * ptr = inst->data + dataMember->offset;
10393 char * result = (((void *)0));
10395 exp->loc = member->loc = inst->loc;
10396 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10397 if(!dataMember->dataType)
10398 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10399 type = dataMember->dataType;
10400 if(type->kind == 8)
10402 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10404 if(_class->type == 4)
10406 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10410 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10411 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10413 for(item = e->values.first; item; item = item->next)
10415 if(item->data == GetEnumValue(_class, ptr))
10417 result = item->name;
10424 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10426 exp->destType = MkClassType(_class->fullName);
10427 ProcessExpressionType(exp);
10430 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10432 if(!_class->dataType)
10433 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10434 type = _class->dataType;
10443 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10449 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10455 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10461 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10467 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10472 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10475 ListAdd(memberList, member);
10481 int ComputeTypeSize(struct Type * type);
10483 void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
10485 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10486 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10488 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))
10490 int unionMemberOffset = 0;
10495 member->memberOffset = 0;
10496 if(targetBits < sizeof(void *) * 8)
10497 member->structAlignment = 0;
10499 else if(targetBits < sizeof(void *) * 8)
10500 _class->structAlignment = 0;
10501 if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
10502 _class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
10503 if(!member && _class->destructionWatchOffset)
10504 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10506 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10508 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10510 if(!dataMember->isProperty)
10512 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
10514 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10520 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10522 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10524 if(!dataMember->isProperty && (dataMember->type != 0 || dataMember->dataTypeString))
10526 if(!isMember && _class->type == 2 && dataMember->dataType)
10528 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
10532 ComputeTypeSize(dataMember->dataType);
10533 if(bitMember->pos == -1)
10534 bitMember->pos = _class->memberOffset;
10535 if(!bitMember->size)
10536 bitMember->size = dataMember->dataType->size * 8;
10537 _class->memberOffset = bitMember->pos + bitMember->size;
10538 for(d = 0; d < bitMember->size; d++)
10544 bitMember->mask = mask << bitMember->pos;
10546 else if(dataMember->type == 0 && dataMember->dataType)
10551 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)))
10552 ComputeTypeSize(dataMember->dataType);
10553 if(dataMember->dataType->bitFieldCount)
10555 bitFields += dataMember->dataType->bitFieldCount;
10562 int size = (bitFields + 7) / 8;
10566 int __simpleStruct0;
10570 short __simpleStruct0;
10572 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10573 if(member->memberOffset % alignment)
10574 member->memberOffset += alignment - (member->memberOffset % alignment);
10576 dataMember->offset = member->memberOffset;
10577 if(member->type == 1)
10578 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10581 member->memberOffset += size;
10588 short __simpleStruct0;
10590 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10591 if(_class->memberOffset % alignment)
10592 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10594 dataMember->offset = _class->memberOffset;
10595 _class->memberOffset += size;
10599 size = dataMember->dataType->size;
10600 alignment = dataMember->dataType->alignment;
10604 int __simpleStruct0;
10608 short __simpleStruct0;
10610 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10611 if(member->memberOffset % alignment)
10612 member->memberOffset += alignment - (member->memberOffset % alignment);
10614 dataMember->offset = member->memberOffset;
10615 if(member->type == 1)
10616 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10619 member->memberOffset += size;
10626 short __simpleStruct0;
10628 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10629 if(_class->memberOffset % alignment)
10630 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10632 dataMember->offset = _class->memberOffset;
10633 _class->memberOffset += size;
10640 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
10641 alignment = dataMember->structAlignment;
10644 int __simpleStruct0;
10648 short __simpleStruct0;
10650 if(member->memberOffset % alignment)
10651 member->memberOffset += alignment - (member->memberOffset % alignment);
10652 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10654 dataMember->offset = member->memberOffset;
10655 if(member->type == 1)
10656 unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10658 member->memberOffset += dataMember->memberOffset;
10664 short __simpleStruct0;
10666 if(_class->memberOffset % alignment)
10667 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10668 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10670 dataMember->offset = _class->memberOffset;
10671 _class->memberOffset += dataMember->memberOffset;
10679 int size = (bitFields + 7) / 8;
10683 int __simpleStruct0;
10687 short __simpleStruct0;
10689 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10690 if(member->memberOffset % alignment)
10691 member->memberOffset += alignment - (member->memberOffset % alignment);
10693 if(member->type == 1)
10694 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10697 member->memberOffset += size;
10704 short __simpleStruct0;
10706 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10707 if(_class->memberOffset % alignment)
10708 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10710 _class->memberOffset += size;
10715 if(member && member->type == 1)
10717 member->memberOffset = unionMemberOffset;
10721 if(_class->type != 2)
10725 if(_class->structAlignment)
10727 if(_class->memberOffset % _class->structAlignment)
10728 extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
10730 _class->structSize = (_class->base ? (_class->base->templateClass ? (_class->base->type == 5 ? _class->base->templateClass->memberOffset : _class->base->templateClass->structSize) : (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize)) : 0) + _class->memberOffset + extra;
10733 struct __ecereNameSpace__ecere__com__Property * prop;
10735 for(prop = _class->membersAndProperties.first; prop; prop = prop->next)
10737 if(prop->isProperty && prop->isWatchable)
10739 prop->watcherOffset = _class->structSize;
10740 _class->structSize += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10745 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
10747 for(derivative = _class->derivatives.first; derivative; derivative = derivative->next)
10749 struct __ecereNameSpace__ecere__com__Class * deriv = derivative->data;
10751 if(deriv->computeSize)
10753 deriv->offset = (_class->type == 5 ? _class->memberOffset : _class->structSize);
10754 deriv->memberOffset = 0;
10755 deriv->structSize = deriv->offset;
10756 ComputeClassMembers(deriv, 0);
10764 FinishTemplatesContext(context);
10767 int AddMembers(struct External * neededBy, 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)
10769 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10770 unsigned int totalSize = 0;
10771 unsigned int maxSize = 0;
10774 struct __ecereNameSpace__ecere__com__DataMember * member;
10776 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10780 if(!isMember && _class->base)
10782 maxSize = _class->structSize;
10784 if(_class->type == 1 || _class->type == 5)
10785 AddMembers(neededBy, declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
10788 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
10790 if(maxSize > baseSize)
10791 maxSize -= baseSize;
10797 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
10799 if(!member->isProperty)
10801 switch(member->type)
10805 if(member->dataTypeString)
10807 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
10808 struct Declarator * decl;
10810 decl = SpecDeclFromString(member->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(member->name)));
10811 ListAdd(decls, MkStructDeclarator(decl, (((void *)0))));
10812 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, decls, (((void *)0)))));
10813 if(!member->dataType)
10814 member->dataType = ProcessType(specs, decl);
10815 ReplaceThisClassSpecifiers(specs, topClass);
10817 struct Type * type = ProcessType(specs, decl);
10819 DeclareType(neededBy, member->dataType, 1, 0);
10822 ComputeTypeSize(member->dataType);
10823 size = member->dataType->size;
10824 alignment = member->dataType->alignment;
10827 if(totalSize % alignment)
10828 totalSize += alignment - (totalSize % alignment);
10837 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
10840 sprintf(id, "__anon%d", anonID++);
10842 AddMembers(neededBy, list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
10843 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
10844 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
10845 alignment = member->structAlignment;
10848 if(totalSize % alignment)
10849 totalSize += alignment - (totalSize % alignment);
10859 unsigned int __simpleStruct0;
10861 if(topMember && topMember->type == 1)
10862 *retSize = (__simpleStruct0 = *retSize, (__simpleStruct0 > totalSize) ? __simpleStruct0 : totalSize);
10864 *retSize += totalSize;
10866 else if(totalSize < maxSize && _class->type != 1000)
10868 int autoPadding = 0;
10870 if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
10871 autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
10872 if(totalSize + autoPadding < maxSize)
10874 char sizeString[50];
10876 sprintf(sizeString, "%d", maxSize - totalSize);
10877 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
10883 FinishTemplatesContext(context);
10884 return topMember ? topMember->memberID : _class->memberID;
10887 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)
10892 CheckConstCompatibility(source, dest, 1);
10893 if(source->kind == 20 && dest->kind != 20)
10895 struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
10900 if(dest->kind == 20 && source->kind != 20)
10902 struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
10907 if(dest->classObjectType == 2 && dest->kind != 11)
10909 if(source->classObjectType != 3)
10913 if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
10921 if(source->kind != 11 && source->classObjectType == 3)
10923 if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
10926 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
10928 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))
10931 if(dest->kind == 14 && source->kind != 0)
10933 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))
10935 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))
10937 if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
10939 if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
10941 if(conversions != (((void *)0)))
10943 if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
10948 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
10950 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
10952 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
10954 if(sourceBase == destBase)
10958 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))
10962 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && source->__anon1._class && source->__anon1._class->__anon1.registered && (dest->casted || (enumBaseType && dest->__anon1._class->__anon1.registered->type == 4 && (source->kind == 8 || source->__anon1._class->__anon1.registered->type != 4))))
10964 if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
10971 if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
10975 if(source->kind == 8)
10977 struct __ecereNameSpace__ecere__com__Class * _class;
10979 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
10981 struct __ecereNameSpace__ecere__com__Property * convert;
10983 for(convert = _class->conversions.first; convert; convert = convert->next)
10985 if(convert->memberAccess == 1 || _class->module == privateModule)
10987 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
10989 if(!convert->dataType)
10990 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
10991 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))
10993 if(!conversions && !convert->Get)
10995 else if(conversions != (((void *)0)))
10997 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))
11001 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11003 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11012 if(dest->kind == 8)
11014 struct __ecereNameSpace__ecere__com__Class * _class;
11016 for(_class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11018 struct __ecereNameSpace__ecere__com__Property * convert;
11020 for(convert = _class->conversions.first; convert; convert = convert->next)
11022 if(convert->memberAccess == 1 || _class->module == privateModule)
11024 struct Type * constType = (((void *)0));
11025 unsigned int success = 0;
11027 if(!convert->dataType)
11028 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11029 if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
11031 struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11033 constType = __extension__ ({
11034 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11036 __ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
11038 CopyTypeInto(ptrType, convert->dataType->__anon1.type);
11039 ptrType->constant = 1;
11041 if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
11043 if(!conversions && !convert->Set)
11045 else if(conversions != (((void *)0)))
11047 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))
11051 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
11053 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
11059 FreeType(constType);
11065 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
11067 if(!dest->__anon1._class->__anon1.registered->dataType)
11068 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
11069 if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
11071 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))
11078 if(source->kind == 8)
11080 struct __ecereNameSpace__ecere__com__Class * _class;
11082 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11084 struct __ecereNameSpace__ecere__com__Property * convert;
11086 for(convert = _class->conversions.first; convert; convert = convert->next)
11088 if(convert->memberAccess == 1 || _class->module == privateModule)
11090 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11092 if(!convert->dataType)
11093 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11094 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))
11096 if(!conversions && !convert->Get)
11098 else if(conversions != (((void *)0)))
11100 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))
11104 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11106 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11114 if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
11116 if(!source->__anon1._class->__anon1.registered->dataType)
11117 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
11118 if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
11120 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))
11122 else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
11128 if(source->kind == 8 || source->kind == 19)
11130 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
11132 else if(dest->kind == 7 && source->kind == 6)
11134 else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
11136 else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
11138 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
11140 else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
11142 else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
11144 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))
11146 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))
11148 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)))
11150 struct Type * paramSource, * paramDest;
11152 if(dest->kind == 16)
11153 owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
11154 if(source->kind == 16)
11155 owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
11156 if(dest->kind == 13 && dest->__anon1.type->kind == 11)
11157 dest = dest->__anon1.type;
11158 if(source->kind == 13 && source->__anon1.type->kind == 11)
11159 source = source->__anon1.type;
11160 if(dest->kind == 16)
11161 dest = dest->__anon1.__anon3.method->dataType;
11162 if(source->kind == 16)
11163 source = source->__anon1.__anon3.method->dataType;
11164 paramSource = source->__anon1.__anon2.params.first;
11165 if(paramSource && paramSource->kind == 0)
11166 paramSource = (((void *)0));
11167 paramDest = dest->__anon1.__anon2.params.first;
11168 if(paramDest && paramDest->kind == 0)
11169 paramDest = (((void *)0));
11170 if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11172 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))))
11174 if(paramDest && paramDest->kind == 8)
11175 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
11177 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
11180 paramDest = paramDest->next;
11182 else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
11184 if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11186 if(dest->__anon1.__anon2.thisClass)
11188 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
11190 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11196 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
11198 if(owningClassDest)
11199 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
11201 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
11205 paramSource = paramSource->next;
11209 if(dest->__anon1.__anon2.thisClass)
11211 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
11213 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11219 if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
11221 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
11227 if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11229 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
11233 CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
11234 for(; paramDest; paramDest = paramDest->next)
11238 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
11242 struct Type * paramDestType = paramDest;
11243 struct Type * paramSourceType = paramSource;
11244 struct Type * type = paramDestType;
11246 if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
11249 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
11250 struct __ecereNameSpace__ecere__com__Class * sClass;
11252 for(sClass = owningClassSource; sClass; sClass = sClass->base)
11255 if(sClass->templateClass)
11256 sClass = sClass->templateClass;
11257 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
11259 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
11261 for(sClass = sClass->base; sClass; sClass = sClass->base)
11263 if(sClass->templateClass)
11264 sClass = sClass->templateClass;
11265 id += sClass->templateParams.count;
11276 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
11278 paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
11281 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)))
11286 PrintType(paramDest, type, 0, 1);
11287 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
11288 if(paramDestType != paramDest)
11289 FreeType(paramDestType);
11292 if(paramDestType != paramDest)
11293 FreeType(paramDestType);
11295 paramSource = paramSource->next;
11299 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
11304 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
11308 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
11310 if(!(dest->__anon1.type && dest->__anon1.type->kind == 13 && source->__anon1.type->kind == 8 && source->__anon1.type->__anon1._class && source->__anon1.type->__anon1._class->__anon1.registered && (source->__anon1.type->__anon1._class->__anon1.registered->type != 0 && source->__anon1.type->__anon1._class->__anon1.registered->type != 5) && !source->__anon1.type->byReference))
11312 ComputeTypeSize(source->__anon1.type);
11313 ComputeTypeSize(dest->__anon1.type);
11314 if(source->__anon1.type->size == dest->__anon1.type->size && MatchTypes(source->__anon1.type, dest->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11322 void ComputeInstantiation(struct Expression * exp)
11324 struct Instantiation * inst = exp->__anon1.instance;
11325 struct MembersInit * members;
11326 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11327 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11328 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11329 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11330 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11331 int subMemberStackPos = 0;
11334 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11338 if(_class->type == 0 || _class->type == 5)
11340 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11341 if(_class->type == 0)
11342 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11345 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11349 for(members = (*inst->members).first; members; members = members->next)
11351 switch(members->type)
11355 if(members->__anon1.dataMembers)
11357 struct MemberInit * member;
11359 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11361 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11362 unsigned int found = 0;
11363 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11364 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11365 unsigned int dataMemberOffset;
11369 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11372 if(curMember->isProperty)
11373 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11376 dataMember = curMember;
11377 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11378 if(_class->type == 0)
11379 dataMemberOffset += _class->base->structSize;
11386 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11390 if(prop->memberAccess == 1)
11392 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11393 curClass = prop->_class;
11398 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11399 int _subMemberStackPos = 0;
11401 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11405 if(dataMember->memberAccess == 1)
11407 curMember = dataMember;
11408 curClass = dataMember->_class;
11409 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11410 subMemberStackPos = _subMemberStackPos;
11415 if(found && member->initializer && member->initializer->type == 0)
11417 struct Expression * value = member->initializer->__anon1.exp;
11418 struct Type * type = (((void *)0));
11419 unsigned int deepMember = 0;
11423 type = prop->dataType;
11425 else if(dataMember)
11427 if(!dataMember->dataType)
11428 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11429 type = dataMember->dataType;
11431 if(ident && ident->next)
11434 for(ident = ident->next; ident && type; ident = ident->next)
11436 if(type->kind == 8)
11438 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11440 type = prop->dataType;
11443 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11445 type = dataMember->dataType;
11448 else if(type->kind == 9 || type->kind == 10)
11450 struct Type * memberType;
11452 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11454 if(!strcmp(memberType->name, ident->string))
11465 FreeType(value->destType);
11466 value->destType = type;
11469 ComputeExpression(value);
11471 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11473 if(type->kind == 8)
11475 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11477 if(_class && (_class->type == 2 || _class->type == 3 || _class->type == 4))
11479 if(!_class->dataType)
11480 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11481 type = _class->dataType;
11486 void * ptr = inst->data + dataMemberOffset;
11488 if(value->type == 2)
11494 GetInt(value, (int *)ptr);
11499 GetInt64(value, (long long *)ptr);
11504 GetIntPtr(value, (intptr_t *)ptr);
11509 GetIntSize(value, (ssize_t *)ptr);
11514 GetFloat(value, (float *)ptr);
11519 GetDouble(value, (double *)ptr);
11524 else if(value->type == 1)
11526 if(type->kind == 8)
11528 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11530 if(_class->type == 1)
11532 ComputeTypeSize(type);
11533 if(value->__anon1.instance->data)
11534 memcpy(ptr, value->__anon1.instance->data, type->size);
11539 else if(prop && prop->Set != (void *)(intptr_t)1)
11541 if(value->type == 1 && value->__anon1.instance->data)
11543 if(type->kind == 8)
11545 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11547 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)))
11549 void (* Set)(void *, void *) = (void *)prop->Set;
11551 Set(inst->data, value->__anon1.instance->data);
11552 PopulateInstance(inst);
11556 else if(value->type == 2)
11562 void (* Set)(void *, double) = (void *)prop->Set;
11564 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11569 void (* Set)(void *, float) = (void *)prop->Set;
11571 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11576 void (* Set)(void *, int) = (void *)prop->Set;
11578 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11583 void (* Set)(void *, long long) = (void *)prop->Set;
11585 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11590 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11592 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11597 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11599 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11604 else if(value->type == 3)
11608 ReadString(temp, value->__anon1.__anon2.string);
11609 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11613 else if(!deepMember && type && _class->type == 3)
11617 if(value->type == 2)
11619 if(type->kind == 8)
11621 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11623 if(_class->type == 3)
11625 if(!_class->dataType)
11626 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11627 type = _class->dataType;
11635 float (* Set)(float) = (void *)prop->Set;
11637 GetFloat(member->initializer->__anon1.exp, &fValue);
11638 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11645 double (* Set)(double) = (void *)prop->Set;
11647 GetDouble(member->initializer->__anon1.exp, &dValue);
11648 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11656 else if(!deepMember && type && _class->type == 2)
11660 if(value->type == 1 && value->__anon1.instance->data)
11662 unsigned int (* Set)(void *) = (void *)prop->Set;
11664 bits = Set(value->__anon1.instance->data);
11666 else if(value->type == 2)
11670 else if(dataMember)
11672 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11673 struct Type * type;
11676 bits = (bits & ~bitMember->mask);
11677 if(!bitMember->dataType)
11678 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11679 type = bitMember->dataType;
11680 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11682 if(!type->__anon1._class->__anon1.registered->dataType)
11683 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11684 type = type->__anon1._class->__anon1.registered->dataType;
11693 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11701 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11710 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11718 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11726 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11734 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11739 bits |= part << bitMember->pos;
11745 if(_class && _class->type == 3)
11747 ComputeExpression(member->initializer->__anon1.exp);
11748 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11750 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11760 if(_class && _class->type == 2)
11762 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11767 FreeInstance(inst);
11771 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11773 if(exp->__anon1.op.op == SIZEOF)
11775 FreeExpContents(exp);
11777 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11781 if(!exp->__anon1.op.exp1)
11783 switch(exp->__anon1.op.op)
11787 struct Expression * exp2 = exp->__anon1.op.exp2;
11789 exp->__anon1.op.exp2 = (((void *)0));
11790 FreeExpContents(exp);
11791 FreeType(exp->expType);
11792 FreeType(exp->destType);
11794 ((exp2 ? __extension__ ({
11795 void * __ecerePtrToDelete = (exp2);
11797 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
11798 }) : 0), exp2 = 0);
11804 FreeExpContents(exp);
11805 op1->ops.Neg(exp, op1);
11809 if(op1->ops.BitNot)
11811 FreeExpContents(exp);
11812 op1->ops.BitNot(exp, op1);
11818 FreeExpContents(exp);
11819 op1->ops.Not(exp, op1);
11826 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11828 if(Promote(op2, op1->kind, op1->type->isSigned))
11829 op2->kind = op1->kind, op2->ops = op1->ops;
11830 else if(Promote(op1, op2->kind, op2->type->isSigned))
11831 op1->kind = op2->kind, op1->ops = op2->ops;
11833 switch(exp->__anon1.op.op)
11838 FreeExpContents(exp);
11839 op1->ops.Add(exp, op1, op2);
11845 FreeExpContents(exp);
11846 op1->ops.Sub(exp, op1, op2);
11852 FreeExpContents(exp);
11853 op1->ops.Mul(exp, op1, op2);
11859 FreeExpContents(exp);
11860 op1->ops.Div(exp, op1, op2);
11866 FreeExpContents(exp);
11867 op1->ops.Mod(exp, op1, op2);
11871 if(exp->__anon1.op.exp2)
11873 if(op1->ops.BitAnd)
11875 FreeExpContents(exp);
11876 op1->ops.BitAnd(exp, op1, op2);
11883 FreeExpContents(exp);
11884 op1->ops.BitOr(exp, op1, op2);
11888 if(op1->ops.BitXor)
11890 FreeExpContents(exp);
11891 op1->ops.BitXor(exp, op1, op2);
11895 if(op1->ops.LShift)
11897 FreeExpContents(exp);
11898 op1->ops.LShift(exp, op1, op2);
11902 if(op1->ops.RShift)
11904 FreeExpContents(exp);
11905 op1->ops.RShift(exp, op1, op2);
11911 FreeExpContents(exp);
11912 op1->ops.Equ(exp, op1, op2);
11918 FreeExpContents(exp);
11919 op1->ops.Nqu(exp, op1, op2);
11925 FreeExpContents(exp);
11926 op1->ops.And(exp, op1, op2);
11932 FreeExpContents(exp);
11933 op1->ops.Or(exp, op1, op2);
11939 FreeExpContents(exp);
11940 op1->ops.Grt(exp, op1, op2);
11946 FreeExpContents(exp);
11947 op1->ops.Sma(exp, op1, op2);
11951 if(op1->ops.GrtEqu)
11953 FreeExpContents(exp);
11954 op1->ops.GrtEqu(exp, op1, op2);
11958 if(op1->ops.SmaEqu)
11960 FreeExpContents(exp);
11961 op1->ops.SmaEqu(exp, op1, op2);
11969 void ApplyAnyObjectLogic(struct Expression * e)
11971 struct Type * destType = e->destType;
11973 if(destType && (destType->classObjectType == 3))
11975 if(e && e->expType)
11977 struct Type * type = e->expType;
11978 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
11980 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11982 _class = type->__anon1._class->__anon1.registered;
11984 else if(type->kind == 19)
11986 _class = FindClass("ecere::com::Class")->__anon1.registered;
11990 char string[1024] = "";
11991 struct Symbol * classSym;
11993 PrintTypeNoConst(type, string, 0, 1);
11994 classSym = FindClass(string);
11996 _class = classSym->__anon1.registered;
11998 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)))
12000 if(!_class || strcmp(_class->fullName, "char *"))
12002 struct Expression * checkedExp = e, * newExp;
12004 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12006 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12008 if(checkedExp->type == 23)
12010 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12013 checkedExp = (*checkedExp->__anon1.list).last;
12015 else if(checkedExp->type == 11)
12016 checkedExp = checkedExp->__anon1.cast.exp;
12018 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
12020 newExp = checkedExp->__anon1.op.exp2;
12021 checkedExp->__anon1.op.exp2 = (((void *)0));
12022 FreeExpContents(checkedExp);
12023 if(e->expType && e->expType->passAsTemplate)
12027 ComputeTypeSize(e->expType);
12028 sprintf(size, "%d", e->expType->size);
12029 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))))));
12031 ReplaceExpContents(checkedExp, newExp);
12032 e->byReference = 1;
12034 else if(!e->byReference || (_class && _class->type == 5))
12036 struct Expression * checkedExp;
12039 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;
12041 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
12043 struct Context * context = PushContext();
12044 struct Declarator * decl;
12045 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12046 char typeString[1024];
12047 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12049 typeString[0] = '\0';
12051 newExp->prev = (((void *)0));
12052 newExp->next = (((void *)0));
12053 newExp->expType = (((void *)0));
12054 PrintTypeNoConst(e->expType, typeString, 0, 1);
12055 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12056 newExp->destType = ProcessType(specs, decl);
12057 curContext = context;
12061 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
12064 sprintf(name, "__internalValue%03X", internalValueCounter++);
12065 if(!curCompound->__anon1.compound.declarations)
12066 curCompound->__anon1.compound.declarations = MkList();
12067 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
12068 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
12069 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
12070 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
12073 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
12075 struct Type * type = e->destType;
12077 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12078 CopyTypeInto(e->destType, type);
12079 e->destType->refCount = 1;
12080 e->destType->classObjectType = 0;
12083 e->__anon1.compound->__anon1.compound.context = context;
12084 PopContext(context);
12085 curContext = context->parent;
12089 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12091 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12093 if(checkedExp->type == 23)
12095 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12098 checkedExp = (*checkedExp->__anon1.list).last;
12100 else if(checkedExp->type == 11)
12101 checkedExp = checkedExp->__anon1.cast.exp;
12104 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12106 *operand = *checkedExp;
12107 __ecereMethod_Expression_Clear(checkedExp);
12108 checkedExp->destType = ProcessTypeString("void *", 0);
12109 checkedExp->expType = checkedExp->destType;
12110 checkedExp->destType->refCount++;
12111 checkedExp->type = 4;
12112 checkedExp->__anon1.op.op = '&';
12113 checkedExp->__anon1.op.exp1 = (((void *)0));
12114 checkedExp->__anon1.op.exp2 = operand;
12123 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))))
12125 if(e->expType->classObjectType && destType && destType->classObjectType)
12131 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12134 thisExp->prev = (((void *)0));
12135 thisExp->next = (((void *)0));
12136 __ecereMethod_Expression_Clear(e);
12138 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
12139 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
12140 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
12142 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12143 CopyTypeInto(e->expType, thisExp->expType);
12144 e->expType->byReference = 0;
12145 e->expType->refCount = 1;
12146 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))
12148 e->expType->classObjectType = 0;
12153 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
12155 if(destType->kind == 14)
12157 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
12159 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))
12161 unsigned int byReference = e->expType->byReference;
12162 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12163 struct Declarator * decl;
12164 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12165 char typeString[1024];
12166 struct Type * type;
12167 int backupClassObjectType;
12168 unsigned int backupByReference;
12170 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
12174 backupClassObjectType = type->classObjectType;
12175 backupByReference = type->byReference;
12176 type->classObjectType = 0;
12177 type->byReference = 0;
12178 typeString[0] = '\0';
12179 PrintType(type, typeString, 0, 1);
12180 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12181 type->classObjectType = backupClassObjectType;
12182 type->byReference = backupByReference;
12184 thisExp->prev = (((void *)0));
12185 thisExp->next = (((void *)0));
12186 __ecereMethod_Expression_Clear(e);
12187 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)))
12189 unsigned int passAsTemplate = thisExp->destType->passAsTemplate;
12192 destType->refCount++;
12194 e->__anon1.op.op = '*';
12195 e->__anon1.op.exp1 = (((void *)0));
12196 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
12197 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12198 CopyTypeInto(t, thisExp->destType);
12199 t->passAsTemplate = 0;
12200 FreeType(thisExp->destType);
12201 thisExp->destType = t;
12202 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12203 CopyTypeInto(t, destType);
12204 t->passAsTemplate = passAsTemplate;
12205 FreeType(destType);
12207 destType->refCount = 0;
12208 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12209 CopyTypeInto(e->expType, type);
12210 if(type->passAsTemplate)
12212 e->expType->classObjectType = 0;
12213 e->expType->passAsTemplate = 0;
12215 e->expType->byReference = 0;
12216 e->expType->refCount = 1;
12221 e->__anon1.cast.typeName = MkTypeName(specs, decl);
12222 e->__anon1.cast.exp = thisExp;
12223 e->byReference = 1;
12228 FreeType(e->destType);
12229 e->destType = destType;
12230 destType->refCount++;
12235 void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module)
12237 struct __ecereNameSpace__ecere__com__Class * _class;
12238 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
12240 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
12241 ComputeModuleClasses(subModule->data);
12242 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->classes.first; _class; _class = _class->next)
12243 ComputeClassMembers(_class, 0);
12246 int ComputeTypeSize(struct Type * type)
12248 unsigned int size = type ? type->size : 0;
12250 if(!size && type && !type->computing)
12252 type->computing = 1;
12256 type->alignment = size = sizeof(char);
12259 type->alignment = size = sizeof(char);
12262 type->alignment = size = sizeof(int);
12265 type->alignment = size = sizeof(long long);
12268 type->alignment = size = targetBits / 8;
12269 type->pointerAlignment = 1;
12272 type->alignment = size = targetBits / 8;
12273 type->pointerAlignment = 1;
12276 type->alignment = size = sizeof(long);
12279 type->alignment = size = sizeof(short);
12282 type->alignment = size = sizeof(float);
12285 type->alignment = size = sizeof(double);
12289 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
12291 if(_class && _class->type == 1)
12293 ComputeClassMembers(_class, 0);
12294 type->alignment = _class->structAlignment;
12295 type->pointerAlignment = (unsigned int)_class->pointerAlignment;
12296 size = _class->structSize;
12297 if(type->alignment && size % type->alignment)
12298 size += type->alignment - (size % type->alignment);
12300 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
12302 if(!_class->dataType)
12303 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12304 size = type->alignment = ComputeTypeSize(_class->dataType);
12308 size = type->alignment = targetBits / 8;
12309 type->pointerAlignment = 1;
12315 size = type->alignment = targetBits / 8;
12316 type->pointerAlignment = 1;
12319 if(type->__anon1.__anon4.arraySizeExp)
12321 ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
12322 ComputeExpression(type->__anon1.__anon4.arraySizeExp);
12323 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)))
12325 struct Location oldLoc = yylloc;
12326 char expression[10240];
12328 expression[0] = '\0';
12329 type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
12330 yylloc = type->__anon1.__anon4.arraySizeExp->loc;
12332 PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
12333 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
12336 GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
12338 else if(type->__anon1.__anon4.enumClass)
12340 if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
12342 type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
12345 type->__anon1.__anon4.arraySize = 0;
12349 type->__anon1.__anon4.arraySize = 0;
12351 size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
12352 if(type->__anon1.type)
12354 type->alignment = type->__anon1.type->alignment;
12355 type->pointerAlignment = type->__anon1.type->pointerAlignment;
12360 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12362 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12364 if(symbol && symbol->type)
12366 ComputeTypeSize(symbol->type);
12367 size = symbol->type->size;
12372 struct Type * member;
12374 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12376 int __simpleStruct0, __simpleStruct1;
12377 unsigned int addSize = ComputeTypeSize(member);
12379 member->offset = size;
12380 if(member->alignment && size % member->alignment)
12381 member->offset += member->alignment - (size % member->alignment);
12382 size = member->offset;
12383 if(member->pointerAlignment && type->size <= 4)
12384 type->pointerAlignment = 1;
12385 else if(!member->pointerAlignment && member->alignment >= 8)
12386 type->pointerAlignment = 0;
12387 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12390 if(type->alignment && size % type->alignment)
12391 size += type->alignment - (size % type->alignment);
12397 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12399 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12401 if(symbol && symbol->type)
12403 ComputeTypeSize(symbol->type);
12404 size = symbol->type->size;
12405 type->alignment = symbol->type->alignment;
12410 struct Type * member;
12412 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12414 int __simpleStruct0, __simpleStruct1;
12415 unsigned int addSize = ComputeTypeSize(member);
12417 member->offset = size;
12418 if(member->alignment && size % member->alignment)
12419 member->offset += member->alignment - (size % member->alignment);
12420 size = member->offset;
12421 if(member->pointerAlignment && type->size <= 4)
12422 type->pointerAlignment = 1;
12423 else if(!member->pointerAlignment && member->alignment >= 8)
12424 type->pointerAlignment = 0;
12425 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12426 size = ((size > addSize) ? size : addSize);
12428 if(type->alignment && size % type->alignment)
12429 size += type->alignment - (size % type->alignment);
12435 struct TemplateParameter * param = type->__anon1.templateParameter;
12436 struct Type * baseType = ProcessTemplateParameterType(param);
12440 size = ComputeTypeSize(baseType);
12441 type->alignment = baseType->alignment;
12442 type->pointerAlignment = baseType->pointerAlignment;
12445 type->alignment = size = sizeof(uint64);
12450 type->alignment = size = sizeof(enum
12458 type->alignment = size = targetBits / 8;
12459 type->pointerAlignment = 1;
12464 type->computing = 0;
12469 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl)
12471 struct External * external = (((void *)0));
12472 struct Symbol * classSym = FindClass(name);
12473 struct __ecereNameSpace__ecere__sys__OldList * curDeclarations = (((void *)0));
12475 if(!inCompiler || !classSym)
12476 return (((void *)0));
12477 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
12478 return (((void *)0));
12479 if(!classSym->__anon1.registered || (classSym->__anon1.registered->type == 0 && classSym->__anon1.registered->structSize && classSym->__anon1.registered->base && classSym->__anon1.registered->base->base))
12480 _DeclareStruct(neededBy, "ecere::com::Instance", 0, 1, fwdDecl);
12481 external = classSym->__anon2.__anon1.structExternal;
12482 if(external && external->__anon1.declaration)
12484 struct Specifier * spec;
12486 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12487 if(spec->type == 3 || spec->type == 4)
12489 curDeclarations = spec->__anon1.__anon2.definitions;
12493 if(classSym->__anon1.registered && !classSym->declaring && classSym->imported && (!classSym->declaredStructSym || (classSym->__anon1.registered->type == 5 && !skipNoHead && external && !curDeclarations)))
12495 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12496 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
12497 char structName[1024];
12498 unsigned int addedPadding = 0;
12499 struct Specifier * curSpec = (((void *)0));
12501 classSym->declaring++;
12502 if(strchr(classSym->string, '<'))
12504 if(classSym->__anon1.registered->templateClass)
12505 external = _DeclareStruct(neededBy, classSym->__anon1.registered->templateClass->fullName, skipNoHead, needDereference, fwdDecl);
12506 classSym->declaring--;
12510 FullClassNameCat(structName, name, 0);
12511 classSym->declaredStructSym = 1;
12512 if(!external || (classSym->__anon1.registered->type == 5 && !skipNoHead && !curDeclarations))
12514 unsigned int add = 0;
12518 external = MkExternalDeclaration((((void *)0)));
12519 classSym->__anon2.__anon1.structExternal = external;
12520 external->symbol = classSym;
12525 declarations = MkList();
12526 AddMembers(external, declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
12528 if(external->__anon1.declaration)
12530 struct Specifier * spec;
12532 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12533 if(spec->type == 3 || spec->type == 4)
12536 curDeclarations = spec->__anon1.__anon2.definitions;
12540 if(declarations && (!(*declarations).count || ((*declarations).count == 1 && addedPadding)))
12542 FreeList(declarations, (void *)(FreeClassDef));
12543 declarations = (((void *)0));
12545 if(classSym->__anon1.registered->type != 5 && !declarations)
12547 FreeExternal(external);
12548 external = (((void *)0));
12549 classSym->__anon2.__anon1.structExternal = (((void *)0));
12554 curSpec->__anon1.__anon2.definitions = declarations;
12557 specifiers = MkList();
12558 declarators = MkList();
12559 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
12560 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12563 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12566 classSym->declaring--;
12568 else if(!classSym->declaredStructSym && classSym->__anon2.__anon1.structExternal)
12570 classSym->declaredStructSym = 1;
12571 if(classSym->__anon1.registered)
12572 DeclareMembers(classSym->__anon2.__anon1.structExternal, classSym->__anon1.registered, 0);
12573 if(classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
12575 struct Specifier * spec;
12577 for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
12579 if(spec->__anon1.__anon2.definitions)
12580 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
12584 if(inCompiler && neededBy && (external || !classSym->imported))
12588 classSym->__anon2.__anon1.structExternal = external = MkExternalDeclaration((((void *)0)));
12589 external->symbol = classSym;
12590 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12592 if(reachedPass15 && !external->__anon1.declaration && classSym->__anon1.registered && classSym->__anon1.registered->type == 5)
12594 char structName[1024];
12595 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12598 FullClassNameCat(structName, name, 0);
12599 specifiers = MkList();
12600 declarators = MkList();
12601 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))));
12602 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12606 struct External * e = external->fwdDecl ? external->fwdDecl : external;
12608 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)e->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
12609 __ecereMethod_External_CreateUniqueEdge(neededBy, e, !needDereference && !external->fwdDecl);
12612 __ecereMethod_External_CreateUniqueEdge(neededBy, external, !needDereference);
12617 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)
12619 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
12620 unsigned int found = 0;
12621 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
12622 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
12623 unsigned int freeType = 0;
12625 yylloc = member->loc;
12630 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
12634 dataMember = *curMember;
12640 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
12641 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
12642 int _subMemberStackPos = 0;
12645 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, ident->string, privateModule, _subMemberStack, &_subMemberStackPos);
12648 dataMember = thisMember;
12649 if(curMember && thisMember->memberAccess == 1)
12651 *curMember = thisMember;
12652 *curClass = thisMember->_class;
12653 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
12654 *subMemberStackPos = _subMemberStackPos;
12660 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
12661 if(method && method->type == 1)
12664 method = (((void *)0));
12669 struct Type * type = (((void *)0));
12673 if(!dataMember->dataType && dataMember->dataTypeString)
12675 struct Context * context = SetupTemplatesContext(_class);
12677 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
12678 FinishTemplatesContext(context);
12680 type = dataMember->dataType;
12684 if(!method->dataType)
12685 ProcessMethodType(method);
12686 type = method->dataType;
12688 if(ident && ident->next)
12690 for(ident = ident->next; ident && type; ident = ident->next)
12692 if(type->kind == 8)
12694 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
12696 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
12698 type = dataMember->dataType;
12700 else if(type->kind == 9 || type->kind == 10)
12702 struct Type * memberType;
12704 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
12706 if(!strcmp(memberType->name, ident->string))
12715 if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
12718 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
12719 struct __ecereNameSpace__ecere__com__Class * sClass;
12721 for(sClass = _class; sClass; sClass = sClass->base)
12724 if(sClass->templateClass)
12725 sClass = sClass->templateClass;
12726 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
12728 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
12730 for(sClass = sClass->base; sClass; sClass = sClass->base)
12732 if(sClass->templateClass)
12733 sClass = sClass->templateClass;
12734 id += sClass->templateParams.count;
12745 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
12747 if(arg.__anon1.__anon1.dataTypeString)
12749 unsigned int constant = type->constant;
12751 type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
12752 if(type->kind == 8 && constant)
12753 type->constant = 1;
12754 else if(type->kind == 13)
12756 struct Type * t = type->__anon1.type;
12758 while(t->kind == 13)
12759 t = t->__anon1.type;
12761 t->constant = constant;
12764 if(type && _class->templateClass)
12765 type->passAsTemplate = 1;
12772 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
12774 struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
12775 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
12776 int paramCount = 0;
12777 int lastParam = -1;
12778 char templateString[1024];
12779 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
12781 sprintf(templateString, "%s<", expClass->templateClass->fullName);
12782 for(cClass = expClass; cClass; cClass = cClass->base)
12786 if(cClass->templateClass)
12787 cClass = cClass->templateClass;
12788 for(param = cClass->templateParams.first; param; param = param->next)
12791 struct __ecereNameSpace__ecere__com__Class * sClass;
12792 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
12794 for(sClass = cClass->base; sClass; sClass = sClass->base)
12796 if(sClass->templateClass)
12797 sClass = sClass->templateClass;
12798 id += sClass->templateParams.count;
12800 arg = expClass->templateArgs[id];
12801 for(sClass = _class; sClass; sClass = sClass->base)
12803 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
12805 struct __ecereNameSpace__ecere__com__Class * nextClass;
12807 if(sClass->templateClass)
12808 sClass = sClass->templateClass;
12809 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
12811 if(nextClass->templateClass)
12812 nextClass = nextClass->templateClass;
12813 p += nextClass->templateParams.count;
12815 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
12817 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
12819 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12821 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
12822 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
12829 char argument[256];
12831 argument[0] = '\0';
12832 switch(param->type)
12836 char expString[1024];
12837 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12838 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
12839 struct Expression * exp;
12840 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
12842 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
12843 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
12844 ProcessExpressionType(exp);
12845 ComputeExpression(exp);
12846 expString[0] = '\0';
12847 PrintExpression(exp, expString);
12848 strcat(argument, expString);
12849 FreeExpression(exp);
12854 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
12859 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12860 strcat(argument, arg.__anon1.__anon1.dataTypeString);
12867 strcat(templateString, ", ");
12868 if(lastParam != p - 1)
12870 strcat(templateString, param->name);
12871 strcat(templateString, " = ");
12873 strcat(templateString, argument);
12882 int len = strlen(templateString);
12884 if(templateString[len - 1] == '<')
12888 if(templateString[len - 1] == '>')
12889 templateString[len++] = ' ';
12890 templateString[len++] = '>';
12892 templateString[len++] = '\0';
12895 struct Context * context = SetupTemplatesContext(_class);
12899 type = ProcessTypeString(templateString, 0);
12901 FinishTemplatesContext(context);
12904 if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
12906 ProcessExpressionType(member->initializer->__anon1.exp);
12907 if(!member->initializer->__anon1.exp->expType)
12911 char expString[10240];
12913 expString[0] = '\0';
12914 PrintExpression(member->initializer->__anon1.exp, expString);
12915 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
12916 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
12919 else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
12921 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
12924 else if(member->initializer)
12926 ProcessInitializer(member->initializer, type);
12933 if(_class && _class->type == 3)
12935 if(member->initializer)
12937 struct Type * type = MkClassType(_class->fullName);
12939 ProcessInitializer(member->initializer, type);
12945 if(member->initializer)
12947 ProcessInitializer(member->initializer, (((void *)0)));
12953 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12957 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12959 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
12963 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
12968 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
12970 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
12972 for(link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->classes); link; link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)link)))
12974 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
12976 if(_class->type == 4)
12978 struct __ecereNameSpace__ecere__sys__OldList converts =
12982 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12985 if(!_class->symbol)
12986 _class->symbol = FindClass(_class->fullName);
12987 type->__anon1._class = _class->symbol;
12988 if(MatchTypes(type, dest, &converts, (((void *)0)), (((void *)0)), dest->kind != 8 || !dest->__anon1._class || strcmp(dest->__anon1._class->string, "bool"), 0, 0, 0, 0))
12990 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
12991 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
12995 struct __ecereNameSpace__ecere__com__Class * baseClass;
12997 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
12999 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
13001 for(value = e->values.first; value; value = value->next)
13003 if(!strcmp(value->name, string))
13008 FreeType(sourceExp->expType);
13009 sourceExp->isConstant = 1;
13010 sourceExp->expType = MkClassType(baseClass->fullName);
13011 if(inCompiler || inPreCompiler || inDebugger)
13013 char constant[256];
13015 FreeExpContents(sourceExp);
13016 sourceExp->type = 2;
13017 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
13018 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13020 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
13021 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13023 while(converts.first)
13025 struct Conversion * convert = converts.first;
13027 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
13028 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
13030 ((type ? __extension__ ({
13031 void * __ecerePtrToDelete = (type);
13033 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13034 }) : 0), type = 0);
13041 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
13042 ((type ? __extension__ ({
13043 void * __ecerePtrToDelete = (type);
13045 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13046 }) : 0), type = 0);
13049 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)))
13050 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
13055 void ComputeExpression(struct Expression * exp)
13061 struct Identifier * id = exp->__anon1.__anon1.identifier;
13063 if(id && exp->isConstant && !inCompiler && !inPreCompiler && !inDebugger)
13065 struct __ecereNameSpace__ecere__com__Class * c = (exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
13067 if(c && c->type == 4)
13069 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13073 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13074 struct __ecereNameSpace__ecere__com__EnumClassData * e = (c ? ((void *)(((char *)c->data) + enumClass->offsetClass)) : (((void *)0)));
13076 for(value = e->values.first; value; value = value->next)
13078 if(!strcmp(value->name, id->string))
13083 const char * dts = c->dataTypeString;
13085 FreeExpContents(exp);
13087 exp->__anon1.__anon1.constant = (dts && (!strcmp(dts, "int") || !strcmp(dts, "int64") || !strcmp(dts, "short") || !strcmp(dts, "char"))) ? PrintInt64(value->data) : PrintUInt64(value->data);
13096 ComputeInstantiation(exp);
13101 struct Expression * exp1, * exp2 = (((void *)0));
13102 struct Operand op1 =
13109 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
13112 struct Operand op2 =
13119 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
13123 if(exp->__anon1.op.exp2)
13125 struct Expression * e = exp->__anon1.op.exp2;
13127 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
13129 if(e->type == 5 || e->type == 32 || e->type == 23)
13132 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13134 e = (*e->__anon1.list).last;
13137 if(exp->__anon1.op.op == 261 && e && e->expType)
13139 if(e->type == 3 && e->__anon1.__anon2.string)
13141 char * string = e->__anon1.__anon2.string;
13142 int len = strlen(string);
13143 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
13145 len = UnescapeString(tmp, string + 1, len - 2);
13146 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
13147 FreeExpContents(exp);
13149 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
13153 struct Type * type = e->expType;
13156 FreeExpContents(exp);
13158 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13164 ComputeExpression(exp->__anon1.op.exp2);
13166 if(exp->__anon1.op.exp1)
13168 ComputeExpression(exp->__anon1.op.exp1);
13169 exp1 = exp->__anon1.op.exp1;
13170 exp2 = exp->__anon1.op.exp2;
13171 op1 = GetOperand(exp1);
13173 op1.type->refCount++;
13176 op2 = GetOperand(exp2);
13178 op2.type->refCount++;
13183 exp1 = exp->__anon1.op.exp2;
13184 op1 = GetOperand(exp1);
13186 op1.type->refCount++;
13188 CallOperator(exp, exp1, exp2, &op1, &op2);
13190 FreeType(op1.type);
13192 FreeType(op2.type);
13198 struct Expression * e, * n;
13200 for(e = (*exp->__anon1.list).first; e; e = n)
13205 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
13206 struct Expression * prev = exp->prev;
13207 struct Expression * next = exp->next;
13209 if(exp->expType && exp->expType->kind == 8 && (!e->expType || e->expType->kind != 8))
13211 FreeType(e->expType);
13212 e->expType = exp->expType;
13213 e->expType->refCount++;
13215 ComputeExpression(e);
13216 FreeType(exp->expType);
13217 FreeType(exp->destType);
13221 ((e ? __extension__ ({
13222 void * __ecerePtrToDelete = (e);
13224 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13226 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
13237 struct Expression * memberExp = exp->__anon1.member.exp;
13238 struct Identifier * memberID = exp->__anon1.member.member;
13239 struct Type * type;
13241 ComputeExpression(exp->__anon1.member.exp);
13242 type = exp->__anon1.member.exp->expType;
13245 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)));
13246 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13247 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13248 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
13250 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
13251 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
13255 struct Symbol * classSym;
13258 PrintTypeNoConst(type, string, 0, 1);
13259 classSym = FindClass(string);
13260 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13262 if(exp->__anon1.member.member)
13264 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
13266 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
13268 if(!prop && !member && _class && exp->__anon1.member.member)
13270 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
13272 convertTo = _class;
13273 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13274 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
13280 struct Type * type = prop->dataType;
13282 if(_class->type == 3)
13284 if(type->kind == 8)
13286 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13288 if(_class->type == 3)
13290 if(!_class->dataType)
13291 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13292 type = _class->dataType;
13300 float (* Get)(float) = (void *)prop->Get;
13302 GetFloat(exp->__anon1.member.exp, &value);
13303 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
13310 double (* Get)(double);
13312 GetDouble(exp->__anon1.member.exp, &value);
13314 Get = (void *)prop->Set;
13316 Get = (void *)prop->Get;
13317 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
13327 struct Expression * value = exp->__anon1.member.exp;
13328 struct Type * type;
13330 if(!prop->dataType)
13331 ProcessPropertyType(prop);
13332 type = prop->dataType;
13336 else if(_class->type == 1)
13342 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13344 if(propertyClass->type == 1 && value->type == 1)
13346 void (* Set)(void *, void *) = (void *)prop->Set;
13348 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13349 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13350 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13351 exp->__anon1.instance->loc = exp->loc;
13353 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
13354 PopulateInstance(exp->__anon1.instance);
13361 void (* Set)(void *, int) = (void *)prop->Set;
13363 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13364 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13365 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13366 exp->__anon1.instance->loc = exp->loc;
13368 GetInt(value, &intValue);
13369 Set(exp->__anon1.instance->data, intValue);
13370 PopulateInstance(exp->__anon1.instance);
13375 long long intValue;
13376 void (* Set)(void *, long long) = (void *)prop->Set;
13378 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13379 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13380 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13381 exp->__anon1.instance->loc = exp->loc;
13383 GetInt64(value, &intValue);
13384 Set(exp->__anon1.instance->data, intValue);
13385 PopulateInstance(exp->__anon1.instance);
13391 void (* Set)(void *, intptr_t) = (void *)prop->Set;
13393 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13394 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13395 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13396 exp->__anon1.instance->loc = exp->loc;
13398 GetIntPtr(value, &intValue);
13399 Set(exp->__anon1.instance->data, intValue);
13400 PopulateInstance(exp->__anon1.instance);
13406 void (* Set)(void *, ssize_t) = (void *)prop->Set;
13408 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13409 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13410 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13411 exp->__anon1.instance->loc = exp->loc;
13413 GetIntSize(value, &intValue);
13414 Set(exp->__anon1.instance->data, intValue);
13415 PopulateInstance(exp->__anon1.instance);
13421 void (* Set)(void *, float) = (void *)prop->Set;
13423 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13424 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13425 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13426 exp->__anon1.instance->loc = exp->loc;
13428 GetFloat(value, &floatValue);
13429 Set(exp->__anon1.instance->data, floatValue);
13430 PopulateInstance(exp->__anon1.instance);
13435 double doubleValue;
13436 void (* Set)(void *, double) = (void *)prop->Set;
13438 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13439 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13440 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13441 exp->__anon1.instance->loc = exp->loc;
13443 GetDouble(value, &doubleValue);
13444 Set(exp->__anon1.instance->data, doubleValue);
13445 PopulateInstance(exp->__anon1.instance);
13450 else if(_class->type == 2)
13456 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13458 if(propertyClass->type == 1 && value->__anon1.instance->data)
13460 unsigned int (* Set)(void *) = (void *)prop->Set;
13461 unsigned int bits = Set(value->__anon1.instance->data);
13463 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13467 else if(_class->type == 2)
13469 unsigned int value;
13470 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
13473 GetUInt(exp->__anon1.member.exp, &value);
13475 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13484 if(_class->type == 2)
13486 unsigned int value;
13488 GetUInt(exp->__anon1.member.exp, &value);
13493 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13495 if(_class->type == 1)
13497 void (* Get)(unsigned int, void *) = (void *)prop->Get;
13499 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13500 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13501 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13502 exp->__anon1.instance->loc = exp->loc;
13504 Get(value, exp->__anon1.instance->data);
13505 PopulateInstance(exp->__anon1.instance);
13507 else if(_class->type == 2)
13509 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
13510 uint64 bits = Get(value);
13512 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
13519 else if(_class->type == 1)
13521 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
13527 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13529 if(_class->type == 1 && value)
13531 void (* Get)(void *, void *) = (void *)prop->Get;
13533 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13534 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13535 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13536 exp->__anon1.instance->loc = exp->loc;
13538 Get(value, exp->__anon1.instance->data);
13539 PopulateInstance(exp->__anon1.instance);
13550 exp->isConstant = 0;
13559 FreeExpression(memberExp);
13560 FreeIdentifier(memberID);
13566 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
13568 FreeExpContents(exp);
13569 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13576 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
13578 if(classSym && classSym->__anon1.registered)
13580 if(classSym->__anon1.registered->fixed)
13582 FreeSpecifier(exp->__anon1._class);
13583 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
13588 char className[1024];
13590 strcpy(className, "__ecereClass_");
13591 FullClassNameCat(className, classSym->string, 1);
13592 DeclareClass(curExternal, classSym, className);
13593 FreeExpContents(exp);
13595 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
13596 exp->__anon1.member.member = MkIdentifier("structSize");
13603 struct Type * type;
13604 struct Expression * e = exp;
13606 if(exp->type == 11)
13608 if(exp->__anon1.cast.exp)
13609 ComputeExpression(exp->__anon1.cast.exp);
13610 e = exp->__anon1.cast.exp;
13612 if(e && exp->expType)
13614 type = exp->expType;
13615 if(type->kind == 8)
13617 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13619 if(_class && (_class->type == 3 || _class->type == 2))
13621 if(!_class->dataType)
13622 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13623 type = _class->dataType;
13634 if(GetChar(e, &value))
13636 FreeExpContents(exp);
13637 exp->__anon1.__anon1.constant = PrintChar(value);
13643 unsigned char value = 0;
13645 if(GetUChar(e, &value))
13647 FreeExpContents(exp);
13648 exp->__anon1.__anon1.constant = PrintUChar(value);
13658 if(GetShort(e, &value))
13660 FreeExpContents(exp);
13661 exp->__anon1.__anon1.constant = PrintShort(value);
13667 unsigned short value = 0;
13669 if(GetUShort(e, &value))
13671 FreeExpContents(exp);
13672 exp->__anon1.__anon1.constant = PrintUShort(value);
13682 if(GetInt(e, &value))
13684 FreeExpContents(exp);
13685 exp->__anon1.__anon1.constant = PrintInt(value);
13691 unsigned int value = 0;
13693 if(GetUInt(e, &value))
13695 FreeExpContents(exp);
13696 exp->__anon1.__anon1.constant = PrintUInt(value);
13704 long long value = 0;
13706 if(GetInt64(e, &value))
13708 FreeExpContents(exp);
13709 exp->__anon1.__anon1.constant = PrintInt64(value);
13717 if(GetUInt64(e, &value))
13719 FreeExpContents(exp);
13720 exp->__anon1.__anon1.constant = PrintUInt64(value);
13728 intptr_t value = 0;
13730 if(GetIntPtr(e, &value))
13732 FreeExpContents(exp);
13733 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13739 uintptr_t value = 0;
13741 if(GetUIntPtr(e, &value))
13743 FreeExpContents(exp);
13744 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13754 if(GetIntSize(e, &value))
13756 FreeExpContents(exp);
13757 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13765 if(GetUIntSize(e, &value))
13767 FreeExpContents(exp);
13768 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13777 if(GetFloat(e, &value))
13779 FreeExpContents(exp);
13780 exp->__anon1.__anon1.constant = PrintFloat(value);
13789 if(GetDouble(e, &value))
13791 FreeExpContents(exp);
13792 exp->__anon1.__anon1.constant = PrintDouble(value);
13803 struct Operand op1 =
13810 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
13813 struct Operand op2 =
13820 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
13823 struct Operand op3 =
13830 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
13834 if(exp->__anon1.cond.exp)
13835 ComputeExpression((*exp->__anon1.cond.exp).last);
13836 if(exp->__anon1.cond.elseExp)
13837 ComputeExpression(exp->__anon1.cond.elseExp);
13838 if(exp->__anon1.cond.cond)
13839 ComputeExpression(exp->__anon1.cond.cond);
13840 op1 = GetOperand(exp->__anon1.cond.cond);
13842 op1.type->refCount++;
13843 op2 = GetOperand((*exp->__anon1.cond.exp).last);
13845 op2.type->refCount++;
13846 op3 = GetOperand(exp->__anon1.cond.elseExp);
13848 op3.type->refCount++;
13851 FreeExpContents(exp);
13852 op1.ops.Cond(exp, &op1, &op2, &op3);
13855 FreeType(op1.type);
13857 FreeType(op2.type);
13859 FreeType(op3.type);
13865 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
13867 struct __ecereNameSpace__ecere__com__Instance * module;
13869 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Module) + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->systemNameSpace, sourceExp, dest, string, conversions))
13871 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->privateNameSpace, sourceExp, dest, string, conversions))
13873 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13875 for(module = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Module) + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->allModules.first; module; module = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->next)
13877 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13883 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
13885 struct Type * source;
13886 struct Type * realDest = dest;
13887 struct Type * backupSourceExpType = (((void *)0));
13888 struct Expression * nbExp = GetNonBracketsExp(sourceExp);
13889 struct Expression * computedExp = nbExp;
13892 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)
13894 computedExp = CopyExpression(nbExp);
13895 ComputeExpression(computedExp);
13897 source = sourceExp->expType;
13898 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
13900 if(computedExp != nbExp)
13902 FreeExpression(computedExp);
13903 computedExp = nbExp;
13908 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
13910 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
13912 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
13914 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
13916 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
13918 if(sourceBase == destBase)
13920 if(computedExp != nbExp)
13922 FreeExpression(computedExp);
13923 computedExp = nbExp;
13932 struct __ecereNameSpace__ecere__sys__OldList * specs;
13933 unsigned int flag = 0;
13934 long long value = (((int)0x7fffffff));
13936 source->refCount++;
13937 if(computedExp->type == 2)
13939 if(source->isSigned)
13940 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13942 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13944 else if(computedExp->type == 4 && computedExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
13946 if(source->isSigned)
13947 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13949 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13951 if(computedExp != nbExp)
13953 FreeExpression(computedExp);
13954 computedExp = nbExp;
13956 if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "unichar"))
13959 source = __extension__ ({
13960 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13962 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
13965 if(dest->kind == 8)
13967 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
13969 if(_class && _class->type == 3)
13971 if(source->kind != 8)
13973 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13974 struct Type * tempDest, * tempSource;
13976 for(; _class->base->type != 1000; _class = _class->base)
13979 tempDest = tempType;
13980 tempType->kind = 8;
13981 if(!_class->symbol)
13982 _class->symbol = FindClass(_class->fullName);
13983 tempType->__anon1._class = _class->symbol;
13984 tempType->truth = dest->truth;
13985 if(tempType->__anon1._class)
13986 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
13987 backupSourceExpType = sourceExp->expType;
13988 if(dest->passAsTemplate)
13990 sourceExp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13991 CopyTypeInto(sourceExp->expType, dest);
13992 sourceExp->expType->passAsTemplate = 0;
13996 sourceExp->expType = dest;
14000 ((tempType ? __extension__ ({
14001 void * __ecerePtrToDelete = (tempType);
14003 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14004 }) : 0), tempType = 0);
14007 if(_class && _class->type == 2 && source->kind != 8)
14009 if(!dest->__anon1._class->__anon1.registered->dataType)
14010 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
14011 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14014 FreeType(sourceExp->expType);
14015 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
14016 source->refCount++;
14019 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
14021 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14022 struct Declarator * decl;
14025 ReadString(string, sourceExp->__anon1.__anon2.string);
14026 decl = SpecDeclFromString(string, specs, (((void *)0)));
14027 FreeExpContents(sourceExp);
14028 FreeType(sourceExp->expType);
14029 sourceExp->type = 24;
14030 sourceExp->__anon1._classExp.specifiers = specs;
14031 sourceExp->__anon1._classExp.decl = decl;
14032 sourceExp->expType = dest;
14036 if(backupSourceExpType)
14037 FreeType(backupSourceExpType);
14041 else if(source->kind == 8)
14043 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
14045 if(_class && (_class->type == 3 || _class->type == 2))
14047 if(dest->kind != 8)
14049 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14050 struct Type * tempDest, * tempSource;
14052 if(!source->__anon1._class->__anon1.registered->dataType)
14053 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
14054 for(; _class->base->type != 1000; _class = _class->base)
14057 tempSource = tempType;
14058 tempType->kind = 8;
14059 tempType->__anon1._class = FindClass(_class->fullName);
14060 tempType->truth = source->truth;
14061 tempType->classObjectType = source->classObjectType;
14062 if(tempType->__anon1._class)
14063 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14064 if(conversions && conversions->last)
14066 ((struct Conversion *)conversions->last)->resultType = dest;
14069 FreeType(sourceExp->expType);
14070 sourceExp->expType = MkClassType(_class->fullName);
14071 sourceExp->expType->truth = source->truth;
14072 sourceExp->expType->classObjectType = source->classObjectType;
14073 if(!sourceExp->destType)
14075 FreeType(sourceExp->destType);
14076 sourceExp->destType = sourceExp->expType;
14077 if(sourceExp->expType)
14078 sourceExp->expType->refCount++;
14080 if(!_class->dataType)
14081 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14083 dest = MkClassType(source->__anon1._class->string);
14084 dest->truth = source->truth;
14085 dest->classObjectType = source->classObjectType;
14087 source = _class->dataType;
14088 source->refCount++;
14089 ((tempType ? __extension__ ({
14090 void * __ecerePtrToDelete = (tempType);
14092 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14093 }) : 0), tempType = 0);
14099 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14106 if(dest->kind == 8)
14108 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
14109 unsigned int fittingValue = 0;
14111 if(_class && _class->type == 4)
14113 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14114 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14116 if(c && value >= 0 && value <= c->largest)
14119 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
14121 if(_class->type == 0 || _class->type == 5)
14123 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14125 *newExp = *sourceExp;
14126 if(sourceExp->destType)
14127 sourceExp->destType->refCount++;
14128 if(sourceExp->expType)
14129 sourceExp->expType->refCount++;
14130 sourceExp->type = 11;
14131 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
14132 sourceExp->__anon1.cast.exp = newExp;
14133 FreeType(sourceExp->expType);
14134 sourceExp->expType = (((void *)0));
14135 ProcessExpressionType(sourceExp);
14138 FreeType(sourceExp->expType);
14139 sourceExp->expType = dest;
14144 if(backupSourceExpType)
14145 FreeType(backupSourceExpType);
14148 if(!_class->dataType)
14149 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14151 dest = _class->dataType;
14154 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))
14156 specs = MkListOne(MkSpecifier(DOUBLE));
14158 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))
14160 specs = MkListOne(MkSpecifier(FLOAT));
14162 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))
14165 if(!dest->isSigned)
14166 ListAdd(specs, MkSpecifier(UNSIGNED));
14167 ListAdd(specs, MkSpecifier(INT64));
14169 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
14172 if(!dest->isSigned)
14173 ListAdd(specs, MkSpecifier(UNSIGNED));
14174 ListAdd(specs, MkSpecifier(INT));
14176 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14179 if(!dest->isSigned)
14180 ListAdd(specs, MkSpecifier(UNSIGNED));
14181 ListAdd(specs, MkSpecifier(SHORT));
14183 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14186 if(!dest->isSigned)
14187 ListAdd(specs, MkSpecifier(UNSIGNED));
14188 ListAdd(specs, MkSpecifier(CHAR));
14194 if(backupSourceExpType)
14196 if(sourceExp->expType)
14197 FreeType(sourceExp->expType);
14198 sourceExp->expType = backupSourceExpType;
14203 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))
14205 specs = MkListOne(MkSpecifier(DOUBLE));
14207 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))
14209 specs = MkListOne(MkSpecifier(FLOAT));
14211 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
14214 ListAdd(specs, MkSpecifier(BOOL));
14216 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)))
14218 if(source->kind == 3)
14222 if(backupSourceExpType)
14223 FreeType(backupSourceExpType);
14229 if(!dest->isSigned)
14230 ListAdd(specs, MkSpecifier(UNSIGNED));
14231 ListAdd(specs, MkSpecifier(CHAR));
14234 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)))))
14236 if(source->kind == 3)
14240 if(backupSourceExpType)
14241 FreeType(backupSourceExpType);
14247 if(!dest->isSigned)
14248 ListAdd(specs, MkSpecifier(UNSIGNED));
14249 ListAdd(specs, MkSpecifier(SHORT));
14252 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
14255 if(!dest->isSigned)
14256 ListAdd(specs, MkSpecifier(UNSIGNED));
14257 ListAdd(specs, MkSpecifier(INT));
14259 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
14262 if(!dest->isSigned)
14263 ListAdd(specs, MkSpecifier(UNSIGNED));
14264 ListAdd(specs, MkSpecifier(INT64));
14266 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14268 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
14274 if(backupSourceExpType)
14276 if(sourceExp->expType)
14277 FreeType(sourceExp->expType);
14278 sourceExp->expType = backupSourceExpType;
14282 if(!flag && !sourceExp->opDestType)
14284 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14286 *newExp = *sourceExp;
14287 newExp->prev = (((void *)0));
14288 newExp->next = (((void *)0));
14289 if(sourceExp->destType)
14290 sourceExp->destType->refCount++;
14291 if(sourceExp->expType)
14292 sourceExp->expType->refCount++;
14293 sourceExp->type = 11;
14294 if(realDest->kind == 8)
14296 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
14297 FreeList(specs, (void *)(FreeSpecifier));
14300 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
14301 if(newExp->type == 4)
14303 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
14306 sourceExp->__anon1.cast.exp = newExp;
14307 FreeType(sourceExp->expType);
14308 sourceExp->expType = (((void *)0));
14309 ProcessExpressionType(sourceExp);
14312 FreeList(specs, (void *)(FreeSpecifier));
14315 if(backupSourceExpType)
14316 FreeType(backupSourceExpType);
14321 if(computedExp != nbExp)
14323 FreeExpression(computedExp);
14324 computedExp = nbExp;
14326 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
14327 sourceExp = (*sourceExp->__anon1.list).last;
14328 if(sourceExp->type == 0)
14330 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
14332 if(dest->kind == 8)
14334 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
14336 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
14337 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14341 for(; _class && _class->type == 4; _class = _class->base)
14343 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
14344 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14346 for(value = e->values.first; value; value = value->next)
14348 if(!strcmp(value->name, id->string))
14353 FreeType(sourceExp->expType);
14354 sourceExp->isConstant = 1;
14355 sourceExp->expType = MkClassType(_class->fullName);
14356 if(inCompiler || inPreCompiler || inDebugger)
14358 FreeExpContents(sourceExp);
14359 sourceExp->type = 2;
14360 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
14361 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
14363 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
14372 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
14383 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
14385 unsigned int result = 1;
14389 struct __ecereNameSpace__ecere__sys__OldList converts =
14393 struct Conversion * convert;
14395 if(destType->kind == 0)
14397 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
14401 for(convert = converts.first; convert; convert = convert->next)
14403 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
14407 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14408 int objectType = exp->expType ? exp->expType->classObjectType : 0;
14411 newExp->prev = (((void *)0));
14412 newExp->next = (((void *)0));
14413 newExp->destType = (((void *)0));
14417 exp->addedThis = 1;
14418 exp->__anon1.member.exp = newExp;
14419 FreeType(exp->__anon1.member.exp->expType);
14420 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
14421 exp->__anon1.member.exp->expType->classObjectType = objectType;
14422 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
14423 exp->__anon1.member.memberType = 1;
14424 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14427 exp->expType->refCount++;
14428 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14434 exp->addedThis = 1;
14435 exp->__anon1.member.exp = newExp;
14436 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)
14438 newExp->byReference = 1;
14440 FreeType(exp->__anon1.member.exp->expType);
14441 exp->__anon1.member.exp->expType = (((void *)0));
14442 if(convert->convert->dataType)
14444 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14445 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
14446 exp->__anon1.member.exp->expType->refCount = 1;
14447 exp->__anon1.member.exp->expType->classObjectType = objectType;
14448 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14450 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
14451 exp->__anon1.member.memberType = 4;
14452 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14454 if(convert->resultType)
14455 convert->resultType->refCount++;
14461 FreeType(exp->expType);
14464 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14465 if(exp->destType->casted)
14468 exp->expType->refCount++;
14472 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14473 if(exp->destType->casted)
14475 if(convert->resultType)
14476 convert->resultType->refCount++;
14480 if(exp->isConstant && inCompiler)
14481 ComputeExpression(exp);
14482 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
14484 if(!result && exp->expType && converts.count)
14486 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14488 if(!result && exp->expType && exp->destType)
14490 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))
14497 static void ProcessFunction(struct FunctionDefinition * function);
14499 void ProcessInstantiationType(struct Instantiation * inst)
14501 yylloc = inst->loc;
14504 struct MembersInit * members;
14505 struct Symbol * classSym;
14506 struct __ecereNameSpace__ecere__com__Class * _class;
14508 classSym = inst->_class->__anon1.__anon1.symbol;
14509 _class = classSym ? classSym->__anon1.registered : (((void *)0));
14510 if(!_class || _class->type != 5)
14511 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
14512 afterExternal = afterExternal ? afterExternal : curExternal;
14514 ProcessExpressionType(inst->exp);
14515 inst->isConstant = 1;
14518 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
14519 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
14520 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
14521 int subMemberStackPos = 0;
14523 for(members = (*inst->members).first; members; members = members->next)
14525 switch(members->type)
14530 static unsigned int instMethodID = 0;
14531 struct External * external = curExternal;
14532 struct Context * context = curContext;
14533 struct Declarator * declarator = members->__anon1.function->declarator;
14534 struct Identifier * nameID = GetDeclId(declarator);
14535 char * unmangled = nameID ? nameID->string : (((void *)0));
14536 struct Expression * exp;
14537 struct External * createdExternal = (((void *)0));
14543 strcpy(name, "__ecereInstMeth_");
14544 FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
14546 strcat(name, nameID->string);
14548 sprintf(number, "_%08d", instMethodID++);
14549 strcat(name, number);
14550 nameID->string = __ecereNameSpace__ecere__sys__CopyString(name);
14554 struct Symbol * symbol = declarator->symbol;
14555 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, unmangled, privateModule);
14557 if(method && method->type == 1)
14559 symbol->__anon1.method = method;
14560 ProcessMethodType(method);
14561 if(!symbol->type->__anon1.__anon2.thisClass)
14563 if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
14565 if(!currentClass->symbol)
14566 currentClass->symbol = FindClass(currentClass->fullName);
14567 symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
14571 if(!_class->symbol)
14572 _class->symbol = FindClass(_class->fullName);
14573 symbol->type->__anon1.__anon2.thisClass = _class->symbol;
14576 DeclareType(curExternal, symbol->type, 1, 1);
14580 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
14583 createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
14586 FreeSpecifier(nameID->_class);
14587 nameID->_class = (((void *)0));
14589 curExternal = createdExternal;
14592 if(createdExternal->__anon1.function)
14593 ProcessFunction(createdExternal->__anon1.function);
14595 else if(declarator)
14597 curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
14598 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
14600 curExternal = external;
14601 curContext = context;
14604 FreeClassFunction(members->__anon1.function);
14605 exp = QMkExpId(name);
14607 members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
14608 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
14614 if(members->__anon1.dataMembers && classSym)
14616 struct MemberInit * member;
14617 struct Location oldyyloc = yylloc;
14619 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
14621 ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
14622 if(member->initializer && !member->initializer->isConstant)
14623 inst->isConstant = 0;
14635 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
14637 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct, unsigned int warnClasses)
14643 if(spec->__anon1.specifier == THISCLASS)
14648 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14649 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14650 ProcessSpecifier(spec, declareStruct, 0);
14657 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
14660 DeclareType(curExternal, symbol->type, 1, 1);
14661 else if(spec->__anon1.__anon1.symbol)
14663 struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
14665 if(warnClasses && !c)
14666 Compiler_Warning("Undeclared class %s\n", spec->__anon1.__anon1.name);
14667 DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
14673 struct Enumerator * e;
14675 if(spec->__anon1.__anon2.list)
14677 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
14680 ProcessExpressionType(e->exp);
14689 if(spec->__anon1.__anon2.definitions)
14691 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
14693 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
14700 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
14705 if(decl->__anon1.identifier->classSym)
14707 FreeSpecifier(decl->__anon1.identifier->_class);
14708 decl->__anon1.identifier->_class = (((void *)0));
14712 if(decl->__anon1.array.exp)
14713 ProcessExpressionType(decl->__anon1.array.exp);
14721 struct Identifier * id = (((void *)0));
14722 struct Specifier * classSpec = (((void *)0));
14724 if(decl->type == 4)
14726 id = GetDeclId(decl);
14727 if(id && id->_class)
14729 classSpec = id->_class;
14730 id->_class = (((void *)0));
14733 if(decl->declarator)
14734 ProcessDeclarator(decl->declarator, isFunction);
14735 if(decl->type == 4)
14739 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
14741 if(!decl->__anon1.function.parameters)
14742 decl->__anon1.function.parameters = MkList();
14743 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
14745 if(decl->__anon1.function.parameters)
14747 struct TypeName * param;
14749 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
14751 if(param->qualifiers)
14753 struct Specifier * spec;
14755 for(spec = (*param->qualifiers).first; spec; spec = spec->next)
14757 if(spec->type == 0)
14759 if(spec->__anon1.specifier == TYPED_OBJECT)
14761 struct Declarator * d = param->declarator;
14762 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);
14764 if(!d || d->type != 5)
14765 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
14766 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14767 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
14768 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
14769 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
14770 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
14774 else if(spec->__anon1.specifier == ANY_OBJECT)
14776 struct Declarator * d = param->declarator;
14778 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14779 param->qualifiers = MkListOne(MkSpecifier(VOID));
14780 if(!d || d->type != 5)
14781 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
14782 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
14785 else if(spec->__anon1.specifier == THISCLASS)
14790 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14791 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14792 ProcessSpecifier(spec, 0, 0);
14797 else if(spec->type == 1)
14799 ProcessSpecifier(spec, isFunction, 1);
14801 else if((spec->type == 3 || spec->type == 4) && !spec->__anon1.__anon2.definitions && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
14803 struct Declarator * d = param->declarator;
14805 if(!d || d->type != 5)
14806 DeclareStruct(curExternal, spec->__anon1.__anon2.id->string, 0, 1);
14810 if(param->declarator)
14811 ProcessDeclarator(param->declarator, 0);
14820 static void ProcessDeclaration(struct Declaration * decl, unsigned int warnClasses)
14822 yylloc = decl->loc;
14827 unsigned int declareStruct = 0;
14829 if(decl->__anon1.__anon1.declarators)
14831 struct InitDeclarator * d;
14833 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14835 struct Type * type, * subType;
14837 ProcessDeclarator(d->declarator, 0);
14838 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14841 ProcessInitializer(d->initializer, type);
14842 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
14844 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
14846 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
14848 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
14849 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
14850 if(decl->__anon1.__anon1.specifiers)
14851 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
14852 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
14855 decl->__anon1.inst = inst;
14859 for(subType = type; subType; )
14861 if(subType->kind == 8)
14866 else if(subType->kind == 13)
14868 else if(subType->kind == 12)
14869 subType = subType->__anon1.__anon4.arrayType;
14878 if(decl->__anon1.__anon1.specifiers)
14880 struct Specifier * s;
14882 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
14884 ProcessSpecifier(s, declareStruct, 1);
14891 ProcessInstantiationType(decl->__anon1.inst);
14896 struct Specifier * spec;
14897 struct Declarator * d;
14898 unsigned int declareStruct = 0;
14900 if(decl->__anon1.__anon1.declarators)
14902 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14904 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14905 struct Type * subType;
14907 ProcessDeclarator(d, 0);
14908 for(subType = type; subType; )
14910 if(subType->kind == 8)
14915 else if(subType->kind == 13)
14917 else if(subType->kind == 12)
14918 subType = subType->__anon1.__anon4.arrayType;
14925 if(decl->__anon1.__anon1.specifiers)
14927 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
14928 ProcessSpecifier(spec, declareStruct, warnClasses);
14935 static void ProcessStatement(struct Statement * stmt)
14937 yylloc = stmt->loc;
14941 ProcessStatement(stmt->__anon1.labeled.stmt);
14944 if(stmt->__anon1.caseStmt.exp)
14946 FreeType(stmt->__anon1.caseStmt.exp->destType);
14947 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
14949 curSwitchType->refCount++;
14950 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
14951 ComputeExpression(stmt->__anon1.caseStmt.exp);
14953 if(stmt->__anon1.caseStmt.stmt)
14954 ProcessStatement(stmt->__anon1.caseStmt.stmt);
14958 if(stmt->__anon1.compound.context)
14960 struct Declaration * decl;
14961 struct Statement * s;
14962 struct Statement * prevCompound = curCompound;
14963 struct Context * prevContext = curContext;
14965 if(!stmt->__anon1.compound.isSwitch)
14966 curCompound = stmt;
14967 curContext = stmt->__anon1.compound.context;
14968 if(stmt->__anon1.compound.declarations)
14970 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
14971 ProcessDeclaration(decl, 1);
14973 if(stmt->__anon1.compound.statements)
14975 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
14976 ProcessStatement(s);
14978 curContext = prevContext;
14979 curCompound = prevCompound;
14985 struct Expression * exp;
14987 if(stmt->__anon1.expressions)
14989 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
14990 ProcessExpressionType(exp);
14996 struct Expression * exp;
14998 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
14999 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
15000 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
15001 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
15003 ProcessExpressionType(exp);
15005 if(stmt->__anon1.ifStmt.stmt)
15006 ProcessStatement(stmt->__anon1.ifStmt.stmt);
15007 if(stmt->__anon1.ifStmt.elseStmt)
15008 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
15013 struct Type * oldSwitchType = curSwitchType;
15015 if(stmt->__anon1.switchStmt.exp)
15017 struct Expression * exp;
15019 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
15023 ProcessExpressionType(exp);
15026 curSwitchType = exp->expType;
15029 ProcessStatement(stmt->__anon1.switchStmt.stmt);
15030 curSwitchType = oldSwitchType;
15035 if(stmt->__anon1.whileStmt.exp)
15037 struct Expression * exp;
15039 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
15040 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
15041 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
15042 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
15044 ProcessExpressionType(exp);
15047 if(stmt->__anon1.whileStmt.stmt)
15048 ProcessStatement(stmt->__anon1.whileStmt.stmt);
15053 if(stmt->__anon1.doWhile.exp)
15055 struct Expression * exp;
15057 if((*stmt->__anon1.doWhile.exp).last)
15059 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
15060 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
15061 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
15063 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
15065 ProcessExpressionType(exp);
15068 if(stmt->__anon1.doWhile.stmt)
15069 ProcessStatement(stmt->__anon1.doWhile.stmt);
15074 struct Expression * exp;
15076 if(stmt->__anon1.forStmt.init)
15077 ProcessStatement(stmt->__anon1.forStmt.init);
15078 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
15080 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
15081 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
15082 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
15084 if(stmt->__anon1.forStmt.check)
15085 ProcessStatement(stmt->__anon1.forStmt.check);
15086 if(stmt->__anon1.forStmt.increment)
15088 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
15089 ProcessExpressionType(exp);
15091 if(stmt->__anon1.forStmt.stmt)
15092 ProcessStatement(stmt->__anon1.forStmt.stmt);
15097 struct Identifier * id = stmt->__anon1.forEachStmt.id;
15098 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
15099 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
15100 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
15101 char iteratorType[1024];
15102 struct Type * source;
15103 struct Expression * e;
15104 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));
15105 struct Expression * arrayExp;
15106 const char * typeString = (((void *)0));
15107 int builtinCount = 0;
15109 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
15113 FreeType(e->destType);
15114 e->destType = ProcessTypeString("Container", 0);
15116 if(!isBuiltin || e->next)
15117 ProcessExpressionType(e);
15119 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
15120 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)))
15122 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
15123 struct Symbol * symbol;
15124 struct Expression * expIt = (((void *)0));
15125 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
15126 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
15127 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
15128 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
15133 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
15134 stmt->__anon1.compound.context->parent = curContext;
15135 curContext = stmt->__anon1.compound.context;
15137 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
15139 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
15141 isCustomAVLTree = 1;
15142 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
15145 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
15147 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
15149 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
15152 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
15154 if(inCompiler && isArray)
15156 struct Declarator * decl;
15157 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15159 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
15160 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15161 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
15165 struct Type * type = (((void *)0));
15166 char typeStringBuf[1024];
15168 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
15169 if(((struct Expression *)(*exp).last)->type == 11)
15171 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
15174 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
15176 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)
15178 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
15180 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
15182 else if(arrayExp->__anon1.list)
15184 struct Expression * e;
15186 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15188 ProcessExpressionType(e);
15198 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15202 e->expType = (((void *)0));
15203 e = (*arrayExp->__anon1.list).first;
15204 ProcessExpressionType(e);
15207 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15209 FreeType(e->expType);
15210 e->expType = (((void *)0));
15212 type = (((void *)0));
15220 FreeType(e->expType);
15221 e->expType = (((void *)0));
15227 typeStringBuf[0] = '\0';
15228 PrintType(type, typeStringBuf, 0, 1);
15229 typeString = typeStringBuf;
15237 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
15238 struct Declarator * decl;
15239 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15241 if(arrayExp->__anon1.list)
15243 struct Expression * e;
15245 builtinCount = (*arrayExp->__anon1.list).count;
15246 type = ProcessTypeString(typeString, 0);
15247 while((e = (*arrayExp->__anon1.list).first))
15249 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
15250 e->destType = type;
15252 ProcessExpressionType(e);
15254 ListAdd(initializers, MkInitializerAssignment(e));
15257 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
15259 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
15260 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
15261 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
15262 FreeList(exp, (void *)(FreeExpression));
15264 else if(arrayExp->__anon1.list)
15266 struct Expression * e;
15268 type = ProcessTypeString(typeString, 0);
15269 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15271 e->destType = type;
15273 ProcessExpressionType(e);
15280 arrayExp->expType = ProcessTypeString("Container", 0);
15281 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
15284 else if(inCompiler && isLinkList && !isList)
15286 struct Declarator * decl;
15287 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15289 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
15290 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15291 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
15293 else if(inCompiler && _class->templateArgs)
15296 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
15298 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
15299 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)))))))));
15303 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
15306 switch(block->type)
15309 if(block->__anon1.compound.context)
15310 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15313 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
15314 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15315 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
15316 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15319 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
15320 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15323 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
15324 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15327 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
15328 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15331 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
15332 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15335 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
15336 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15342 block = MkIfStmt(filter, block, (((void *)0)));
15346 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));
15347 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15348 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15349 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15355 sprintf(count, "%d", builtinCount);
15356 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));
15357 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15358 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15359 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15361 else if(isLinkList && !isList)
15363 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
15364 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
15366 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
15368 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));
15372 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15373 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
15375 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));
15377 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15378 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15379 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15383 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
15385 ProcessExpressionType(expIt);
15386 if((*stmt->__anon1.compound.declarations).first)
15387 ProcessDeclaration((*stmt->__anon1.compound.declarations).first, 1);
15389 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
15390 ProcessStatement(stmt);
15393 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
15395 curContext = stmt->__anon1.compound.context->parent;
15400 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
15412 struct Expression * exp;
15414 if(stmt->__anon1.expressions)
15416 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15420 if(curFunction && !curFunction->type)
15421 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
15422 FreeType(exp->destType);
15423 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
15425 exp->destType->refCount++;
15427 ProcessExpressionType(exp);
15434 ProcessDeclaration(stmt->__anon1.decl, 1);
15439 struct AsmField * field;
15441 if(stmt->__anon1.asmStmt.inputFields)
15443 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
15444 if(field->expression)
15445 ProcessExpressionType(field->expression);
15447 if(stmt->__anon1.asmStmt.outputFields)
15449 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
15450 if(field->expression)
15451 ProcessExpressionType(field->expression);
15453 if(stmt->__anon1.asmStmt.clobberedFields)
15455 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
15457 if(field->expression)
15458 ProcessExpressionType(field->expression);
15465 struct PropertyWatch * propWatch;
15466 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15467 struct Expression * object = stmt->__anon1._watch.object;
15468 struct Expression * watcher = stmt->__anon1._watch.watcher;
15471 ProcessExpressionType(watcher);
15473 ProcessExpressionType(object);
15476 if(watcher || thisClass)
15478 struct External * external = curExternal;
15479 struct Context * context = curContext;
15482 stmt->__anon1.expressions = MkList();
15483 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15485 struct ClassFunction * func;
15486 char watcherName[1024];
15487 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;
15488 struct External * createdExternal;
15490 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
15491 if(propWatch->deleteWatch)
15492 strcat(watcherName, "_delete");
15495 struct Identifier * propID;
15497 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15499 strcat(watcherName, "_");
15500 strcat(watcherName, propID->string);
15503 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
15505 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)));
15506 ProcessClassFunctionBody(func, propWatch->compound);
15507 propWatch->compound = (((void *)0));
15508 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
15509 FreeClassFunction(func);
15510 curExternal = createdExternal;
15511 ProcessFunction(createdExternal->__anon1.function);
15512 if(propWatch->deleteWatch)
15514 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15516 ListAdd(args, CopyExpression(object));
15517 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15518 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
15519 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
15523 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
15524 struct Identifier * propID;
15526 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15528 char propName[1024];
15529 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15533 char getName[1024], setName[1024];
15534 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15536 DeclareProperty(createdExternal, prop, setName, getName);
15537 strcpy(propName, "__ecereProp_");
15538 FullClassNameCat(propName, prop->_class->fullName, 0);
15539 strcat(propName, "_");
15540 FullClassNameCat(propName, prop->name, 1);
15541 ListAdd(args, CopyExpression(object));
15542 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15543 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15544 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
15545 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
15546 __ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
15549 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15554 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
15556 curExternal = external;
15557 curContext = context;
15559 FreeExpression(watcher);
15561 FreeExpression(object);
15562 FreeList(watches, (void *)(FreePropertyWatch));
15565 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15569 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15571 ProcessStatement(propWatch->compound);
15578 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15579 struct Expression * object = stmt->__anon1._watch.object;
15580 struct __ecereNameSpace__ecere__com__Class * _class;
15583 ProcessExpressionType(object);
15586 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
15589 struct Identifier * propID;
15592 stmt->__anon1.expressions = MkList();
15593 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
15595 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
15602 for(propID = (*watches).first; propID; propID = propID->next)
15604 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15608 CreateFireWatcher(prop, object, stmt);
15611 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15616 struct __ecereNameSpace__ecere__com__Property * prop;
15617 struct __ecereNameSpace__ecere__com__Class * base;
15619 for(base = _class; base; base = base->base)
15621 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
15623 if(prop->isProperty && prop->isWatchable)
15625 CreateFireWatcher(prop, object, stmt);
15631 FreeExpression(object);
15632 FreeList(watches, (void *)(FreeIdentifier));
15635 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15641 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15642 struct Expression * object = stmt->__anon1._watch.object;
15643 struct Expression * watcher = stmt->__anon1._watch.watcher;
15644 struct __ecereNameSpace__ecere__com__Class * _class;
15647 ProcessExpressionType(object);
15649 ProcessExpressionType(watcher);
15652 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
15653 if(watcher || thisClass)
15657 struct Identifier * propID;
15660 stmt->__anon1.expressions = MkList();
15663 struct __ecereNameSpace__ecere__sys__OldList * args;
15666 ListAdd(args, CopyExpression(object));
15667 ListAdd(args, MkExpConstant("0"));
15668 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15669 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15673 for(propID = (*watches).first; propID; propID = propID->next)
15675 char propName[1024];
15676 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15680 char getName[1024], setName[1024];
15681 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15683 DeclareProperty(curExternal, prop, setName, getName);
15684 strcpy(propName, "__ecereProp_");
15685 FullClassNameCat(propName, prop->_class->fullName, 0);
15686 strcat(propName, "_");
15687 FullClassNameCat(propName, prop->name, 1);
15688 ListAdd(args, CopyExpression(object));
15689 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15690 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15691 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15694 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15698 FreeExpression(object);
15700 FreeExpression(watcher);
15701 FreeList(watches, (void *)(FreeIdentifier));
15704 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15707 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15714 void ComputeDataTypes()
15716 struct External * external;
15718 currentClass = (((void *)0));
15719 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
15720 DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
15721 DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
15722 DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
15723 DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
15724 DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
15725 DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
15726 DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
15727 DeclareFunctionUtil((((void *)0)), "eSystem_New");
15728 DeclareFunctionUtil((((void *)0)), "eSystem_New0");
15729 DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
15730 DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
15731 DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
15732 DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
15733 DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
15734 DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
15735 DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
15736 DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
15737 DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
15738 DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
15739 DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
15741 for(external = (*ast).first; external; external = external->next)
15743 afterExternal = curExternal = external;
15744 if(external->type == 0)
15748 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15749 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15751 currentClass = external->__anon1.function->_class;
15752 ProcessFunction(external->__anon1.function);
15754 else if(external->type == 1)
15756 if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
15758 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15759 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15761 currentClass = (((void *)0));
15762 if(external->__anon1.declaration)
15763 ProcessDeclaration(external->__anon1.declaration, 1);
15765 else if(external->type == 2)
15767 struct ClassDefinition * _class = external->__anon1._class;
15769 currentClass = external->symbol->__anon1.registered;
15772 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15773 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15775 if(_class->definitions)
15777 ProcessClass(_class->definitions, _class->symbol);
15781 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
15782 ((external ? __extension__ ({
15783 void * __ecerePtrToDelete = (external);
15785 __ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
15786 }) : 0), external = 0);
15789 else if(external->type == 4)
15791 thisNameSpace = external->__anon1.id->string;
15794 currentClass = (((void *)0));
15795 thisNameSpace = (((void *)0));
15796 curExternal = (((void *)0));
15799 void ProcessExpressionType(struct Expression * exp)
15801 unsigned int unresolved = 0;
15802 struct Location oldyylloc = yylloc;
15803 unsigned int notByReference = 0;
15805 if(!exp || exp->expType)
15812 struct Identifier * id = exp->__anon1.__anon1.identifier;
15814 if(!id || !topContext)
15816 if(id->_class && id->_class->__anon1.__anon1.name)
15818 id->classSym = id->_class->__anon1.__anon1.symbol;
15820 if(!strcmp(id->string, "__runtimePlatform"))
15822 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
15825 else if(strstr(id->string, "__ecereClass") == id->string)
15827 exp->expType = ProcessTypeString("ecere::com::Class", 1);
15830 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
15832 ReplaceClassMembers(exp, thisClass);
15835 ProcessExpressionType(exp);
15838 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
15843 struct Symbol * symbol = (((void *)0));
15844 unsigned int findInGlobal = 0;
15846 if(!topContext->parent && exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered->type == 4)
15849 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15852 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
15858 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
15861 ProcessExpressionType(exp);
15865 else if(currentClass && !id->_class)
15867 if(ResolveIdWithClass(exp, currentClass, 1))
15870 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15874 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15877 struct Type * type = symbol->type;
15878 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
15880 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
15882 struct Context * context = SetupTemplatesContext(_class);
15884 type = ReplaceThisClassType(_class);
15885 FinishTemplatesContext(context);
15887 type->refCount = 0;
15889 FreeSpecifier(id->_class);
15890 id->_class = (((void *)0));
15891 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15892 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
15893 id->classSym = (((void *)0));
15894 exp->expType = type;
15897 if(type && (type->kind == 15))
15898 exp->isConstant = 1;
15899 if(symbol->isParam || !strcmp(id->string, "this"))
15901 if(_class && _class->type == 1 && !type->declaredWithStruct)
15902 exp->byReference = 1;
15904 if(symbol->isIterator)
15906 if(symbol->isIterator == 3)
15909 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
15910 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
15911 exp->expType = (((void *)0));
15912 ProcessExpressionType(exp);
15914 else if(symbol->isIterator != 4)
15917 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
15918 exp->__anon1.member.exp->expType = exp->expType;
15919 exp->__anon1.member.member = MkIdentifier("data");
15920 exp->expType = (((void *)0));
15921 ProcessExpressionType(exp);
15928 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
15930 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15934 strcpy(name, thisNameSpace);
15935 strcat(name, "::");
15936 strcat(name, id->string);
15937 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
15940 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
15945 for(c = 0; c < definedExpStackPos; c++)
15946 if(definedExpStack[c] == definedExp)
15948 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
15950 struct Location backupYylloc = yylloc;
15951 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
15953 definedExpStack[definedExpStackPos++] = definedExp;
15954 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
15955 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
15956 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15958 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15959 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
15960 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
15961 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15963 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15964 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
15966 parsedExpression = (((void *)0));
15968 expression_yyparse();
15969 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
15971 fileInput = backInput;
15972 yylloc = backupYylloc;
15973 if(parsedExpression)
15975 FreeIdentifier(id);
15977 exp->__anon1.list = MkListOne(parsedExpression);
15978 ApplyLocation(parsedExpression, &yylloc);
15979 ProcessExpressionType(exp);
15980 definedExpStackPos--;
15983 definedExpStackPos--;
15989 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
15995 struct GlobalData * data = (((void *)0));
15997 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16001 strcpy(name, thisNameSpace);
16002 strcat(name, "::");
16003 strcat(name, id->string);
16004 data = FindGlobalData(name);
16007 data = FindGlobalData(id->string);
16010 DeclareGlobalData(curExternal, data);
16011 exp->expType = data->dataType;
16013 data->dataType->refCount++;
16014 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16015 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
16016 FreeSpecifier(id->_class);
16017 id->_class = (((void *)0));
16022 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
16024 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16028 strcpy(name, thisNameSpace);
16029 strcat(name, "::");
16030 strcat(name, id->string);
16031 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
16034 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
16039 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16040 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
16042 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
16043 strcpy(name, "__ecereFunction_");
16044 FullClassNameCat(name, id->string, 0);
16045 if(DeclareFunction(curExternal, function, name))
16047 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16048 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
16050 exp->expType = function->dataType;
16051 if(function->dataType)
16052 function->dataType->refCount++;
16053 FreeSpecifier(id->_class);
16054 id->_class = (((void *)0));
16066 if(!exp->__anon1.instance->_class)
16068 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
16070 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
16073 ProcessInstantiationType(exp->__anon1.instance);
16074 exp->isConstant = exp->__anon1.instance->isConstant;
16075 if(exp->__anon1.instance->_class)
16077 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
16085 char * constant = exp->__anon1.__anon1.constant;
16086 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
16088 exp->expType = type;
16089 if(constant[0] == '\'')
16091 if((int)((unsigned char *)constant)[1] > 127)
16094 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
16098 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
16099 exp->__anon1.__anon1.constant = PrintUInt(ch);
16101 type->__anon1._class = FindClass("unichar");
16102 type->isSigned = 0;
16107 type->isSigned = 1;
16112 char * dot = strchr(constant, '.');
16113 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
16118 exponent = strchr(constant, 'p');
16120 exponent = strchr(constant, 'P');
16124 exponent = strchr(constant, 'e');
16126 exponent = strchr(constant, 'E');
16128 if(dot || exponent)
16130 if(strchr(constant, 'f') || strchr(constant, 'F'))
16134 type->isSigned = 1;
16138 unsigned int isSigned = constant[0] == '-';
16139 char * endP = (((void *)0));
16140 long long i64 = strtoll(constant, &endP, 0);
16141 uint64 ui64 = strtoull(constant, &endP, 0);
16142 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16143 unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16147 if(i64 < (((int)0x80000000)))
16152 if(ui64 > (((int)0x7fffffff)))
16154 if(ui64 > (0xffffffff))
16157 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
16161 else if(constant[0] != '0' || !constant[1])
16166 type->kind = is64Bit ? 4 : 3;
16167 type->isSigned = isSigned;
16170 exp->isConstant = 1;
16171 if(exp->destType && exp->destType->kind == 7)
16173 else if(exp->destType && exp->destType->kind == 6)
16175 else if(exp->destType && exp->destType->kind == 4)
16182 exp->isConstant = 1;
16183 exp->expType = __extension__ ({
16184 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16186 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
16187 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16189 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
16190 }), __ecereInstance2;
16196 ProcessExpressionType(exp->__anon1._new.size);
16197 exp->expType = __extension__ ({
16198 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16200 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
16202 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16206 ProcessExpressionType(exp->__anon1._renew.size);
16207 ProcessExpressionType(exp->__anon1._renew.exp);
16208 exp->expType = __extension__ ({
16209 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16211 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
16213 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16217 unsigned int assign = 0, boolResult = 0, boolOps = 0;
16218 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
16219 unsigned int useDestType = 0, useSideType = 0;
16220 struct Location oldyylloc = yylloc;
16221 unsigned int useSideUnit = 0;
16222 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
16223 unsigned int powerOp = 0, relationOp = 0;
16224 struct __ecereNameSpace__ecere__com__Class * c1 = (((void *)0)), * c2 = (((void *)0));
16225 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
16227 switch(exp->__anon1.op.op)
16277 if(exp->__anon1.op.op == '/')
16282 if(exp->__anon1.op.exp1)
16286 if(exp->__anon1.op.op == '*')
16291 if(exp->__anon1.op.op == '&')
16293 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
16295 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
16296 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
16298 if(symbol && symbol->isIterator == 2)
16301 exp->__anon1.member.exp = exp->__anon1.op.exp2;
16302 exp->__anon1.member.member = MkIdentifier("key");
16303 exp->expType = (((void *)0));
16304 exp->__anon1.op.exp2->expType = symbol->type;
16305 symbol->type->refCount++;
16306 ProcessExpressionType(exp);
16312 if(exp->__anon1.op.exp1)
16314 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
16316 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
16318 if(exp->__anon1.op.exp1->destType)
16319 FreeType(exp->__anon1.op.exp1->destType);
16320 exp->__anon1.op.exp1->destType = exp->destType;
16321 exp->__anon1.op.exp1->opDestType = 1;
16323 exp->destType->refCount++;
16327 if(exp->__anon1.op.exp1->destType)
16328 FreeType(exp->__anon1.op.exp1->destType);
16329 exp->__anon1.op.exp1->destType = dummy;
16332 exp->__anon1.op.exp1->opDestType = 1;
16334 exp->__anon1.op.exp1->usedInComparison = 1;
16336 if(exp->__anon1.op.op == '+' || exp->__anon1.op.op == '-')
16338 if(exp->opDestType)
16339 exp->__anon1.op.exp1->parentOpDestType = 1;
16340 if(exp->usedInComparison)
16341 exp->__anon1.op.exp1->usedInComparison = 1;
16343 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16344 exp->__anon1.op.exp1->destType->count++;
16345 ProcessExpressionType(exp->__anon1.op.exp1);
16346 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16347 exp->__anon1.op.exp1->destType->count--;
16348 exp->__anon1.op.exp1->opDestType = 0;
16349 exp->__anon1.op.exp1->usedInComparison = 0;
16350 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)
16352 exp->__anon1.op.exp2 = MkExpConstant("1");
16353 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
16356 if(exp->__anon1.op.exp1->destType == dummy)
16359 exp->__anon1.op.exp1->destType = (((void *)0));
16361 if(exp->__anon1.op.exp2)
16363 if(!assign && exp->__anon1.op.exp1->expType && (exp->__anon1.op.exp1->expType->kind == 1 || exp->__anon1.op.exp1->expType->kind == 2))
16365 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->kind = 3, type->isSigned = 1, type->refCount = 1, type->signedBeforePromotion = exp->__anon1.op.exp1->expType->isSigned, type->bitMemberSize = exp->__anon1.op.exp1->expType->bitMemberSize, type->promotedFrom = exp->__anon1.op.exp1->expType->kind, type);
16367 FreeType(exp->__anon1.op.exp1->expType);
16368 exp->__anon1.op.exp1->expType = type;
16371 type1 = exp->__anon1.op.exp1->expType;
16373 if(exp->__anon1.op.exp2)
16375 char expString[10240];
16377 expString[0] = '\0';
16378 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
16380 if(exp->__anon1.op.exp1)
16382 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
16383 if(exp->__anon1.op.exp1->expType)
16384 exp->__anon1.op.exp1->expType->refCount++;
16388 exp->__anon1.op.exp2->destType = exp->destType;
16389 if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
16390 exp->__anon1.op.exp2->opDestType = 1;
16392 exp->destType->refCount++;
16396 exp->expType = type1;
16401 PrintExpression(exp->__anon1.op.exp2, expString);
16402 if(type1 && type1->kind == 13)
16404 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)
16405 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
16406 else if(exp->__anon1.op.op == '=')
16408 if(exp->__anon1.op.exp2->destType)
16409 FreeType(exp->__anon1.op.exp2->destType);
16410 exp->__anon1.op.exp2->destType = type1;
16417 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)
16421 if(exp->__anon1.op.exp2->destType)
16422 FreeType(exp->__anon1.op.exp2->destType);
16423 exp->__anon1.op.exp2->destType = type1;
16430 exp->expType = type1;
16432 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
16434 if(exp->__anon1.op.exp2->destType)
16435 FreeType(exp->__anon1.op.exp2->destType);
16436 exp->__anon1.op.exp2->destType = exp->destType;
16437 if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
16438 exp->__anon1.op.exp2->opDestType = 1;
16440 exp->destType->refCount++;
16444 if(exp->__anon1.op.exp2->destType)
16445 FreeType(exp->__anon1.op.exp2->destType);
16446 exp->__anon1.op.exp2->destType = dummy;
16449 exp->__anon1.op.exp2->opDestType = 1;
16451 exp->__anon1.op.exp2->usedInComparison = 1;
16453 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))
16455 FreeType(exp->__anon1.op.exp2->destType);
16456 exp->__anon1.op.exp2->destType = type1;
16459 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16460 exp->__anon1.op.exp2->destType->count++;
16461 if(exp->__anon1.op.op == SIZEOF)
16463 struct Expression * e = exp->__anon1.op.exp2;
16465 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
16467 if(e->type == 5 || e->type == 32 || e->type == 23)
16470 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
16472 e = (*e->__anon1.list).last;
16475 if(e->type == 11 && e->__anon1.cast.exp)
16476 e->__anon1.cast.exp->needCast = 1;
16478 if(exp->__anon1.op.op == '+' || exp->__anon1.op.op == '-')
16480 if(exp->opDestType)
16481 exp->__anon1.op.exp2->parentOpDestType = 1;
16482 if(exp->usedInComparison)
16483 exp->__anon1.op.exp2->usedInComparison = 1;
16485 ProcessExpressionType(exp->__anon1.op.exp2);
16486 exp->__anon1.op.exp2->opDestType = 0;
16487 exp->__anon1.op.exp2->usedInComparison = 0;
16488 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16489 exp->__anon1.op.exp2->destType->count--;
16490 if(!assign && (exp->__anon1.op.exp1 || exp->__anon1.op.op == '~'))
16492 if(exp->__anon1.op.exp2->expType && (exp->__anon1.op.exp2->expType->kind == 1 || exp->__anon1.op.exp2->expType->kind == 2))
16494 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->kind = 3, type->isSigned = 1, type->refCount = 1, type->signedBeforePromotion = exp->__anon1.op.exp2->expType->isSigned, type->bitMemberSize = exp->__anon1.op.exp2->expType->bitMemberSize, type->promotedFrom = exp->__anon1.op.exp2->expType->kind, type);
16496 FreeType(exp->__anon1.op.exp2->expType);
16497 exp->__anon1.op.exp2->expType = type;
16500 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
16502 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)
16504 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
16505 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16507 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)))
16509 if(exp->__anon1.op.op == ADD_ASSIGN)
16510 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16512 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))
16514 if(exp->__anon1.op.op == ADD_ASSIGN)
16515 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16517 else if(inCompiler)
16519 char type1String[1024];
16520 char type2String[1024];
16522 type1String[0] = '\0';
16523 type2String[0] = '\0';
16524 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
16525 PrintType(type1, type2String, 0, 1);
16526 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16527 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
16530 if(exp->__anon1.op.exp2->destType == dummy)
16533 exp->__anon1.op.exp2->destType = (((void *)0));
16535 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
16537 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16538 type2->refCount = 1;
16539 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
16540 type2->isSigned = 1;
16542 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))
16544 type2 = __extension__ ({
16545 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16547 __ecereInstance1->kind = 3, __ecereInstance1;
16549 type2->refCount = 1;
16550 type2->isSigned = 1;
16554 type2 = exp->__anon1.op.exp2->expType;
16559 c1 = type1 && type1->kind == 8 && type1->__anon1._class ? type1->__anon1._class->__anon1.registered : (((void *)0));
16560 c2 = type2 && type2->kind == 8 && type2->__anon1._class ? type2->__anon1._class->__anon1.registered : (((void *)0));
16561 if(relationOp && ((exp->__anon1.op.exp1 && exp->__anon1.op.exp1->ambiguousUnits && (!c2 || c2->type != 3)) || (exp->__anon1.op.exp2 && exp->__anon1.op.exp2->ambiguousUnits && (!c1 || c1->type != 3))))
16562 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "ambiguous units in relational operation\n", (((void *)0))));
16563 if(!relationOp && ((exp->__anon1.op.exp1 && exp->__anon1.op.exp1->ambiguousUnits) || (exp->__anon1.op.exp2 && exp->__anon1.op.exp2->ambiguousUnits)) && (!powerOp || !c1 || c1->type != 3 || !c2 || c2->type != 3 || !RelatedUnits(c1, c2)))
16565 if(exp->opDestType || exp->usedInComparison)
16566 exp->ambiguousUnits = 1;
16568 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "ambiguous units\n", (((void *)0))));
16571 if(exp->__anon1.op.op == SIZEOF)
16573 exp->expType = __extension__ ({
16574 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16576 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16578 exp->isConstant = 1;
16580 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
16582 exp->expType = Dereference(type2);
16583 if(type2 && type2->kind == 8)
16584 notByReference = 1;
16586 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
16587 exp->expType = Reference(type2);
16588 else if(exp->__anon1.op.op == LEFT_OP || exp->__anon1.op.op == RIGHT_OP)
16590 if(exp->__anon1.op.exp1->expType)
16592 exp->expType = exp->__anon1.op.exp1->expType;
16593 exp->expType->refCount++;
16598 if(c1 && !c1->dataType)
16599 c1->dataType = ProcessTypeString(c1->dataTypeString, 0);
16600 if(c2 && !c2->dataType)
16601 c2->dataType = ProcessTypeString(c2->dataTypeString, 0);
16604 if(exp->__anon1.op.exp1)
16606 if(exp->__anon1.op.exp1->destType)
16607 FreeType(exp->__anon1.op.exp1->destType);
16608 exp->__anon1.op.exp1->destType = MkClassType("bool");
16609 exp->__anon1.op.exp1->destType->truth = 1;
16610 if(!exp->__anon1.op.exp1->expType)
16611 ProcessExpressionType(exp->__anon1.op.exp1);
16613 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16614 FreeType(exp->__anon1.op.exp1->expType);
16615 exp->__anon1.op.exp1->expType = MkClassType("bool");
16616 exp->__anon1.op.exp1->expType->truth = 1;
16618 if(exp->__anon1.op.exp2)
16620 if(exp->__anon1.op.exp2->destType)
16621 FreeType(exp->__anon1.op.exp2->destType);
16622 exp->__anon1.op.exp2->destType = MkClassType("bool");
16623 exp->__anon1.op.exp2->destType->truth = 1;
16624 if(!exp->__anon1.op.exp2->expType)
16625 ProcessExpressionType(exp->__anon1.op.exp2);
16627 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16628 FreeType(exp->__anon1.op.exp2->expType);
16629 exp->__anon1.op.exp2->expType = MkClassType("bool");
16630 exp->__anon1.op.exp2->expType->truth = 1;
16633 else if(powerOp && exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((c1 && c1->type == 3) || (c2 && c2->type == 3)))
16635 if(c1 && c1->type == 3 && c2 && c2->type == 3)
16637 if(c1->dataType->kind == 7)
16638 exp->expType = c1->dataType;
16639 else if(c2->dataType->kind == 7)
16640 exp->expType = c2->dataType;
16641 else if(c1->dataType->kind == 6)
16642 exp->expType = c1->dataType;
16643 else if(c2->dataType->kind == 6)
16644 exp->expType = c2->dataType;
16646 exp->expType = c1->dataType;
16648 else if((c1 && c1->type == 3) || exp->__anon1.op.op == '/')
16649 exp->expType = type1;
16651 exp->expType = type2;
16653 exp->expType->refCount++;
16655 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")))))
16657 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"))))
16659 if(exp->__anon1.op.op == '-' && ((c1 && c1->type == 4) || (c2 && c2->type == 4)))
16661 struct Type * intType = ProcessTypeString((c1 && c1->dataType->kind == 4) || (c2 && c2->dataType->kind == 4) ? "int64" : "int", 0);
16663 if(exp->__anon1.op.exp1->destType)
16664 FreeType(exp->__anon1.op.exp1->destType);
16665 if(exp->__anon1.op.exp2->destType)
16666 FreeType(exp->__anon1.op.exp2->destType);
16667 exp->__anon1.op.exp1->destType = intType;
16668 exp->__anon1.op.exp2->destType = intType;
16669 intType->refCount++;
16673 if(exp->__anon1.op.exp2->destType)
16674 FreeType(exp->__anon1.op.exp2->destType);
16675 exp->__anon1.op.exp2->destType = type1;
16677 if(exp->__anon1.op.exp1->destType)
16678 FreeType(exp->__anon1.op.exp1->destType);
16679 exp->__anon1.op.exp1->destType = type2;
16682 if(!boolResult && !exp->opDestType && (!exp->destType || exp->destType->kind != 8) && c1 && c1->type == 3 && c2 && c2->type == 3 && c1 != c2)
16684 if(exp->usedInComparison || exp->parentOpDestType)
16685 exp->ambiguousUnits = 1;
16687 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);
16689 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
16691 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16695 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16697 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
16698 ProcessExpressionType(exp->__anon1.op.exp1);
16699 if(type2->kind != 13)
16701 ProcessExpressionType(classExp);
16702 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
16703 if(!exp->__anon1.op.exp2->expType)
16707 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
16708 c2 = (((void *)0));
16711 ProcessExpressionType(exp->__anon1.op.exp2);
16715 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)))
16717 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
16718 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16719 exp->expType = type1;
16723 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)))
16725 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
16726 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16727 exp->expType = type2;
16731 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))
16733 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
16737 unsigned int success = 0;
16739 if(type1->kind == 13 && type2->kind == 13)
16741 if(exp->__anon1.op.op == '+')
16742 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16743 else if(exp->__anon1.op.op == '-')
16745 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
16747 exp->expType = __extension__ ({
16748 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16750 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
16753 if(type1->__anon1.type->kind == 20)
16755 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16759 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16761 ProcessExpressionType(classExp);
16763 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"))));
16764 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
16772 if(!success && exp->__anon1.op.exp1->type == 2)
16774 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16777 FreeType(exp->expType);
16778 exp->expType = exp->__anon1.op.exp1->destType;
16779 if(exp->__anon1.op.exp1->destType)
16780 exp->__anon1.op.exp1->destType->refCount++;
16783 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16786 FreeType(exp->expType);
16787 exp->expType = exp->__anon1.op.exp2->destType;
16788 if(exp->__anon1.op.exp2->destType)
16789 exp->__anon1.op.exp2->destType->refCount++;
16795 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16798 FreeType(exp->expType);
16799 exp->expType = exp->__anon1.op.exp2->destType;
16800 if(exp->__anon1.op.exp2->destType)
16801 exp->__anon1.op.exp2->destType->refCount++;
16804 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16807 FreeType(exp->expType);
16808 exp->expType = exp->__anon1.op.exp1->destType;
16809 if(exp->__anon1.op.exp1->destType)
16810 exp->__anon1.op.exp1->destType->refCount++;
16816 char expString1[10240];
16817 char expString2[10240];
16821 expString1[0] = '\0';
16822 expString2[0] = '\0';
16827 PrintExpression(exp->__anon1.op.exp1, expString1);
16828 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16829 PrintExpression(exp->__anon1.op.exp2, expString2);
16830 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16831 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
16832 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
16834 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
16838 else if(!boolResult && !useSideUnit && c2 && c2->type == 3 && type1 && type1->kind != 8)
16840 if(exp->__anon1.op.exp1->destType)
16841 FreeType(exp->__anon1.op.exp1->destType);
16842 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16843 if(type2->__anon1._class->__anon1.registered->dataType)
16844 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16845 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16846 exp->expType = type2;
16850 else if(!boolResult && !useSideUnit && c1 && c1->type == 3 && type2 && type2->kind != 8)
16852 if(exp->__anon1.op.exp2->destType)
16853 FreeType(exp->__anon1.op.exp2->destType);
16854 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16855 if(type1->__anon1._class->__anon1.registered->dataType)
16856 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16857 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16858 exp->expType = type1;
16864 unsigned int valid = 0;
16866 if(!boolResult && useSideUnit && c1 && c1->type == 3 && type2 && type2->kind != 8)
16868 if(exp->__anon1.op.exp2->destType)
16869 FreeType(exp->__anon1.op.exp2->destType);
16870 exp->__anon1.op.exp2->destType = c1->dataType;
16871 exp->__anon1.op.exp2->destType->refCount++;
16872 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16875 type2 = exp->__anon1.op.exp2->destType;
16876 c2 = type2 && type2->kind == 8 && type2->__anon1._class ? type2->__anon1._class->__anon1.registered : (((void *)0));
16879 exp->expType = type2;
16882 if(!boolResult && useSideUnit && c2 && c2->type == 3 && type1 && type1->kind != 8)
16884 if(exp->__anon1.op.exp1->destType)
16885 FreeType(exp->__anon1.op.exp1->destType);
16886 exp->__anon1.op.exp1->destType = c2->dataType;
16887 exp->__anon1.op.exp1->destType->refCount++;
16888 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16889 type1 = exp->__anon1.op.exp1->destType;
16890 c1 = type1 && type1->kind == 8 && type1->__anon1._class ? type1->__anon1._class->__anon1.registered : (((void *)0));
16891 exp->expType = type1;
16894 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
16896 unsigned int op1IsEnum = c1 && c1->type == 4;
16897 unsigned int op2IsEnum = c2 && c2->type == 4;
16899 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
16901 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16903 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16906 FreeType(exp->expType);
16907 exp->expType = exp->__anon1.op.exp2->expType;
16908 if(exp->__anon1.op.exp2->expType)
16909 exp->__anon1.op.exp2->expType->refCount++;
16913 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16915 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16918 FreeType(exp->expType);
16919 exp->expType = exp->__anon1.op.exp1->expType;
16920 if(exp->__anon1.op.exp1->expType)
16921 exp->__anon1.op.exp1->expType->refCount++;
16928 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16930 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16933 FreeType(exp->expType);
16934 exp->expType = exp->__anon1.op.exp1->expType;
16935 if(exp->__anon1.op.exp1->expType)
16936 exp->__anon1.op.exp1->expType->refCount++;
16940 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16942 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16945 FreeType(exp->expType);
16946 exp->expType = exp->__anon1.op.exp2->expType;
16947 if(exp->__anon1.op.exp2->expType)
16948 exp->__anon1.op.exp2->expType->refCount++;
16956 if(c2 && c2->type == 3 && (!c1 || c1->type != 3))
16958 if(exp->__anon1.op.exp1->destType)
16959 FreeType(exp->__anon1.op.exp1->destType);
16960 exp->__anon1.op.exp1->destType = type2;
16962 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16965 FreeType(exp->expType);
16966 exp->expType = exp->__anon1.op.exp1->destType;
16967 if(exp->__anon1.op.exp1->destType)
16968 exp->__anon1.op.exp1->destType->refCount++;
16973 if(exp->__anon1.op.exp2->destType)
16974 FreeType(exp->__anon1.op.exp2->destType);
16975 exp->__anon1.op.exp2->destType = type1;
16977 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16980 FreeType(exp->expType);
16981 exp->expType = exp->__anon1.op.exp2->destType;
16982 if(exp->__anon1.op.exp2->destType)
16983 exp->__anon1.op.exp2->destType->refCount++;
16985 else if(type1 && type2)
16987 char expString1[10240];
16988 char expString2[10240];
16989 char type1String[1024];
16990 char type2String[1024];
16992 expString1[0] = '\0';
16993 expString2[0] = '\0';
16994 type1String[0] = '\0';
16995 type2String[0] = '\0';
16998 PrintExpression(exp->__anon1.op.exp1, expString1);
16999 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
17000 PrintExpression(exp->__anon1.op.exp2, expString2);
17001 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
17002 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
17003 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
17005 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
17006 if(c1 && c1->type == 4)
17008 exp->expType = exp->__anon1.op.exp1->expType;
17009 if(exp->__anon1.op.exp1->expType)
17010 exp->__anon1.op.exp1->expType->refCount++;
17012 else if(c2 && c2->type == 4)
17014 exp->expType = exp->__anon1.op.exp2->expType;
17015 if(exp->__anon1.op.exp2->expType)
17016 exp->__anon1.op.exp2->expType->refCount++;
17024 if(c2 && c2->type == 4)
17026 struct Type * oldType = exp->__anon1.op.exp1->expType;
17028 exp->__anon1.op.exp1->expType = (((void *)0));
17029 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17032 exp->__anon1.op.exp1->expType = oldType;
17034 if(exp->__anon1.op.exp1->destType)
17035 FreeType(exp->__anon1.op.exp1->destType);
17036 exp->__anon1.op.exp1->destType = type2;
17038 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17041 FreeType(exp->expType);
17042 exp->expType = exp->__anon1.op.exp1->destType;
17043 if(exp->__anon1.op.exp1->destType)
17044 exp->__anon1.op.exp1->destType->refCount++;
17048 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
17050 if(type1 && c2 && c2->type == 3)
17052 if(exp->__anon1.op.exp1->destType)
17053 FreeType(exp->__anon1.op.exp1->destType);
17054 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
17055 if(type2->__anon1._class->__anon1.registered->dataType)
17056 type2->__anon1._class->__anon1.registered->dataType->refCount++;
17057 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
17059 if(exp->__anon1.op.op == '!')
17061 exp->expType = MkClassType("bool");
17062 exp->expType->truth = 1;
17066 exp->expType = type2;
17071 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
17073 if(c2 && c2->type == 3)
17075 if(exp->__anon1.op.exp2->destType)
17076 FreeType(exp->__anon1.op.exp2->destType);
17077 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
17078 if(type1->__anon1._class->__anon1.registered->dataType)
17079 type1->__anon1._class->__anon1.registered->dataType->refCount++;
17080 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
17082 exp->expType = type1;
17088 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
17090 char expString[10000];
17092 expString[0] = '\0';
17095 PrintExpression(exp->__anon1.op.exp1, expString);
17096 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17099 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17101 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
17103 char expString[10240];
17105 expString[0] = '\0';
17108 PrintExpression(exp->__anon1.op.exp2, expString);
17109 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17112 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17116 FreeType(exp->expType);
17117 exp->expType = MkClassType("bool");
17118 exp->expType->truth = 1;
17120 if(exp->__anon1.op.op != SIZEOF)
17121 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
17122 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
17124 DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
17126 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
17127 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
17128 yylloc = oldyylloc;
17137 struct Expression * e;
17139 exp->isConstant = 1;
17140 for(e = (*exp->__anon1.list).first; e; e = e->next)
17144 FreeType(e->destType);
17145 e->opDestType = exp->opDestType;
17146 e->usedInComparison = exp->usedInComparison;
17147 e->parentOpDestType = exp->parentOpDestType;
17148 e->destType = exp->destType;
17151 exp->destType->refCount++;
17154 ProcessExpressionType(e);
17155 if(e->ambiguousUnits)
17156 exp->ambiguousUnits = 1;
17157 if(!exp->expType && !e->next)
17159 exp->expType = e->expType;
17161 e->expType->refCount++;
17162 exp->needCast = e->needCast;
17165 exp->isConstant = 0;
17167 e = (*exp->__anon1.list).first;
17168 if(!e->next && e->type == 8)
17170 struct Expression * next = exp->next, * prev = exp->prev;
17172 FreeType(exp->expType);
17173 FreeType(exp->destType);
17174 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17178 ((e ? __extension__ ({
17179 void * __ecerePtrToDelete = (e);
17181 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
17183 ProcessExpressionType(exp);
17189 struct Expression * e;
17191 exp->isConstant = 1;
17192 ProcessExpressionType(exp->__anon1.index.exp);
17193 if(!exp->__anon1.index.exp->isConstant)
17194 exp->isConstant = 0;
17195 if(exp->__anon1.index.exp->expType)
17197 struct Type * source = exp->__anon1.index.exp->expType;
17199 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
17201 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
17202 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
17204 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
17206 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
17207 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
17209 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
17211 if(type->kind == 8)
17212 type->constant = 1;
17213 else if(type->kind == 13)
17215 struct Type * t = type;
17217 while(t->kind == 13)
17218 t = t->__anon1.type;
17221 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
17226 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
17228 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
17231 FreeType(e->destType);
17232 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
17234 ProcessExpressionType(e);
17239 exp->isConstant = 0;
17242 exp->expType = Dereference(exp->__anon1.index.exp->expType);
17244 DeclareType(curExternal, exp->expType, 1, 0);
17249 struct Expression * e;
17250 struct Type * functionType;
17251 struct Type * methodType = (((void *)0));
17257 PrintExpression(exp->__anon1.call.exp, name);
17258 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
17260 PrintExpression(exp->__anon1.call.exp, name);
17263 if(exp->__anon1.call.exp->type == 0)
17265 struct Expression * idExp = exp->__anon1.call.exp;
17266 struct Identifier * id = idExp->__anon1.__anon1.identifier;
17268 if(!strcmp(id->string, "__builtin_frame_address"))
17270 exp->expType = ProcessTypeString("void *", 1);
17271 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17272 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17275 else if(!strcmp(id->string, "__ENDIAN_PAD"))
17277 exp->expType = ProcessTypeString("int", 1);
17278 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17279 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17282 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
17284 struct Expression * a = (((void *)0));
17285 struct Expression * b = (((void *)0));
17286 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
17288 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
17290 a = (*exp->__anon1.call.arguments).first;
17291 b = (*exp->__anon1.call.arguments).last;
17295 else if((*exp->__anon1.call.arguments).count == 1)
17297 a = (*exp->__anon1.call.arguments).first;
17302 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
17303 idExp->__anon1.__anon1.identifier = (((void *)0));
17304 FreeExpContents(exp);
17305 ProcessExpressionType(a);
17307 ProcessExpressionType(b);
17309 exp->__anon1.list = MkList();
17310 if(a->expType && (!b || b->expType))
17312 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
17316 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17317 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
17318 struct Declaration * decl;
17319 char temp1[1024], temp2[1024];
17321 GetTypeSpecs(a->expType, specs);
17322 if(a && !a->isConstant && a->type != 0)
17324 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
17325 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
17326 tempExp1 = QMkExpId(temp1);
17327 tempExp1->expType = a->expType;
17329 a->expType->refCount++;
17330 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
17332 if(b && !b->isConstant && b->type != 0)
17334 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
17335 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
17336 tempExp2 = QMkExpId(temp2);
17337 tempExp2->expType = b->expType;
17339 b->expType->refCount++;
17340 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
17342 decl = MkDeclaration(specs, decls);
17343 if(!curCompound->__anon1.compound.declarations)
17344 curCompound->__anon1.compound.declarations = MkList();
17345 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
17349 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
17351 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
17353 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
17354 exp->expType = a->expType;
17356 a->expType->refCount++;
17358 else if(!strcmp(id->string, "Abs"))
17360 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
17361 exp->expType = a->expType;
17363 a->expType->refCount++;
17365 else if(!strcmp(id->string, "Sgn"))
17367 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"))))));
17368 exp->expType = ProcessTypeString("int", 0);
17370 FreeExpression(tempExp1);
17372 FreeExpression(tempExp2);
17373 FreeIdentifier(id);
17379 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
17381 if(!exp->__anon1.call.exp->destType)
17383 exp->__anon1.call.exp->destType = dummy;
17386 ProcessExpressionType(exp->__anon1.call.exp);
17387 if(exp->__anon1.call.exp->destType == dummy)
17390 exp->__anon1.call.exp->destType = (((void *)0));
17394 functionType = exp->__anon1.call.exp->expType;
17395 if(functionType && functionType->kind == 16)
17397 methodType = functionType;
17398 functionType = methodType->__anon1.__anon3.method->dataType;
17399 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
17401 char typeString[1024];
17403 typeString[0] = '\0';
17405 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
17407 functionType->__anon1.__anon2.thisClass = (((void *)0));
17408 PrintType(functionType, typeString, 1, 1);
17409 functionType->__anon1.__anon2.thisClass = back;
17411 if(strstr(typeString, "thisclass"))
17413 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17414 struct Declarator * decl;
17417 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17419 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17420 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))
17421 thisClassParams = 0;
17422 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17424 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
17426 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
17427 ProcessDeclarator(decl, 1);
17428 thisClass = backupThisClass;
17430 thisClassParams = 1;
17431 functionType = ProcessType(specs, decl);
17432 functionType->refCount = 0;
17433 FinishTemplatesContext(context);
17435 struct Type * p, * op;
17437 for(p = functionType->__anon1.__anon2.params.first, op = methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.params.first; p && op; p = p->next, op = op->next)
17440 p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17443 if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
17445 functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17448 FreeList(specs, (void *)(FreeSpecifier));
17449 FreeDeclarator(decl);
17453 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
17455 struct Type * type = functionType->__anon1.type;
17457 if(!functionType->refCount)
17459 functionType->__anon1.type = (((void *)0));
17460 FreeType(functionType);
17462 functionType = type;
17464 if(functionType && functionType->kind != 11)
17466 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
17468 else if(functionType)
17470 unsigned int emptyParams = 0, noParams = 0;
17471 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
17472 struct Type * type = functionType->__anon1.__anon2.params.first;
17473 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
17475 struct Location oldyylloc = yylloc;
17479 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
17481 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
17484 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
17486 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)
17488 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
17491 e->destType = type;
17493 type = functionType->__anon1.__anon2.params.first;
17496 type->refCount = 0;
17498 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
17500 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
17501 type->byReference = functionType->byReference;
17502 type->typedByReference = functionType->typedByReference;
17505 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
17507 e->destType = type;
17509 type = functionType->__anon1.__anon2.params.first;
17512 type->refCount = 0;
17515 if(type && type->kind == 0)
17518 if(!type->refCount)
17520 type = (((void *)0));
17522 for(; e; e = e->next)
17524 if(!type && !emptyParams)
17527 if(methodType && methodType->__anon1.__anon3.methodClass)
17528 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);
17530 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);
17533 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
17535 struct Type * templatedType = (((void *)0));
17536 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
17537 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
17540 if(_class && _class->templateArgs)
17542 struct __ecereNameSpace__ecere__com__Class * sClass;
17544 for(sClass = _class; sClass; sClass = sClass->base)
17546 if(sClass->templateClass)
17547 sClass = sClass->templateClass;
17549 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
17551 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
17553 struct __ecereNameSpace__ecere__com__Class * nextClass;
17555 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17557 if(nextClass->templateClass)
17558 nextClass = nextClass->templateClass;
17559 id += nextClass->templateParams.count;
17569 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
17571 unsigned int constant = type->constant;
17572 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
17575 struct Context * context = SetupTemplatesContext(_class);
17577 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
17578 FinishTemplatesContext(context);
17580 if(templatedType->kind == 8 && constant)
17581 templatedType->constant = 1;
17582 else if(templatedType->kind == 13)
17584 struct Type * t = templatedType->__anon1.type;
17586 while(t->kind == 13)
17587 t = t->__anon1.type;
17589 t->constant = constant;
17591 e->destType = templatedType;
17594 templatedType->passAsTemplate = 1;
17599 e->destType = type;
17606 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
17608 e->destType = type->prev;
17609 e->destType->refCount++;
17613 e->destType = type;
17618 if(type && type->kind != 14)
17620 struct Type * next = type->next;
17622 if(!type->refCount)
17627 if(type && type->kind != 14)
17629 if(methodType && methodType->__anon1.__anon3.methodClass)
17630 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);
17632 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);
17634 yylloc = oldyylloc;
17635 if(type && !type->refCount)
17640 functionType = __extension__ ({
17641 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17643 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
17645 if(exp->__anon1.call.exp->type == 0)
17647 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
17651 struct Symbol * symbol;
17652 struct Location oldyylloc = yylloc;
17654 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
17655 if(strstr(string, "__builtin_") == string)
17659 functionType->__anon1.__anon2.returnType = exp->destType;
17660 exp->destType->refCount++;
17664 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
17665 symbol = __extension__ ({
17666 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
17668 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
17670 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
17671 if(strstr(symbol->string, "::"))
17672 globalContext->hasNameSpace = 1;
17673 yylloc = oldyylloc;
17676 else if(exp->__anon1.call.exp->type == 8)
17680 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
17681 if(!functionType->__anon1.__anon2.returnType)
17683 functionType->__anon1.__anon2.returnType = __extension__ ({
17684 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17686 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
17690 if(functionType && functionType->kind == 11)
17692 exp->expType = functionType->__anon1.__anon2.returnType;
17693 if(functionType->__anon1.__anon2.returnType)
17694 functionType->__anon1.__anon2.returnType->refCount++;
17695 if(!functionType->refCount)
17696 FreeType(functionType);
17698 if(exp->__anon1.call.arguments)
17700 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
17701 ProcessExpressionType(e);
17707 struct Type * type;
17708 struct Location oldyylloc = yylloc;
17709 unsigned int thisPtr;
17710 struct Expression * checkExp = exp->__anon1.member.exp;
17714 if(checkExp->type == 11)
17715 checkExp = checkExp->__anon1.cast.exp;
17716 else if(checkExp->type == 5)
17717 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
17721 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
17722 exp->thisPtr = thisPtr;
17723 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
17725 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
17727 ProcessExpressionType(exp->__anon1.member.exp);
17728 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)
17730 exp->isConstant = 0;
17733 exp->isConstant = exp->__anon1.member.exp->isConstant;
17734 type = exp->__anon1.member.exp->expType;
17736 if(type && (type->kind == 20))
17738 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
17739 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
17743 for(param = _class->templateParams.first; param; param = param->next)
17745 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
17749 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
17751 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
17755 struct Expression * expMember = exp->__anon1.member.exp;
17756 struct Declarator * decl;
17757 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17758 char thisClassTypeString[1024];
17760 FreeIdentifier(exp->__anon1.member.member);
17761 ProcessExpressionType(argExp);
17763 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
17767 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
17768 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
17771 strcpy(thisClassTypeString, _class->fullName);
17773 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
17774 exp->expType = ProcessType(specs, decl);
17775 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
17777 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
17778 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
17779 int paramCount = 0;
17780 int lastParam = -1;
17781 char templateString[1024];
17782 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
17784 sprintf(templateString, "%s<", expClass->templateClass->fullName);
17785 for(cClass = expClass; cClass; cClass = cClass->base)
17789 for(param = cClass->templateParams.first; param; param = param->next)
17792 struct __ecereNameSpace__ecere__com__Class * sClass;
17793 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
17795 for(sClass = cClass->base; sClass; sClass = sClass->base)
17796 id += sClass->templateParams.count;
17797 arg = expClass->templateArgs[id];
17798 for(sClass = _class; sClass; sClass = sClass->base)
17800 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
17802 struct __ecereNameSpace__ecere__com__Class * nextClass;
17804 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17805 p += nextClass->templateParams.count;
17806 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
17808 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
17810 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17812 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
17813 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
17820 char argument[256];
17822 argument[0] = '\0';
17823 switch(param->type)
17827 char expString[1024];
17828 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17829 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
17830 struct Expression * exp;
17831 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
17833 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
17834 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
17835 ProcessExpressionType(exp);
17836 ComputeExpression(exp);
17837 expString[0] = '\0';
17838 PrintExpression(exp, expString);
17839 strcat(argument, expString);
17840 FreeExpression(exp);
17845 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
17850 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17852 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
17853 strcat(argument, thisClassTypeString);
17855 strcat(argument, arg.__anon1.__anon1.dataTypeString);
17863 strcat(templateString, ", ");
17864 if(lastParam != p - 1)
17866 strcat(templateString, param->name);
17867 strcat(templateString, " = ");
17869 strcat(templateString, argument);
17878 int len = strlen(templateString);
17880 if(templateString[len - 1] == '>')
17881 templateString[len++] = ' ';
17882 templateString[len++] = '>';
17883 templateString[len++] = '\0';
17886 struct Context * context = SetupTemplatesContext(_class);
17888 FreeType(exp->expType);
17889 exp->expType = ProcessTypeString(templateString, 0);
17890 FinishTemplatesContext(context);
17893 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
17894 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
17896 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")))))))));
17899 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
17901 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
17904 if(type && (type->kind == 20))
17906 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)))
17908 struct Identifier * id = exp->__anon1.member.member;
17909 int typeKind = type->kind;
17910 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));
17912 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
17914 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
17919 if(typeKind == 3 || typeKind == 15)
17920 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
17923 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17925 _class = type->__anon1._class->__anon1.registered;
17927 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
17929 _class = FindClass("char *")->__anon1.registered;
17931 else if(type->kind == 13)
17933 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
17934 FreeType(exp->expType);
17935 exp->expType = ProcessTypeString("uintptr", 0);
17936 exp->byReference = 1;
17940 char string[1024] = "";
17941 struct Symbol * classSym;
17943 PrintTypeNoConst(type, string, 0, 1);
17944 classSym = FindClass(string);
17946 _class = classSym->__anon1.registered;
17952 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
17953 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
17954 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
17955 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
17956 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
17958 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
17959 exp->__anon1.member.memberType = 1;
17960 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
17961 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
17964 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
17966 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
17967 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
17969 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17971 member = (((void *)0));
17973 if(!member && !prop)
17974 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17975 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
17976 exp->__anon1.member.thisPtr = 1;
17980 unsigned int useMemberForNonConst = 0;
17984 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
17985 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);
17986 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
17987 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
17989 if((!prop || useMemberForNonConst) && !member)
17991 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
17994 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17995 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);
17996 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
17997 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
18002 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
18003 prop = (((void *)0));
18005 member = (((void *)0));
18009 if(!prop && !member && !method)
18010 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
18011 if(!prop && !member && !method)
18015 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
18018 exp->__anon1.member.memberType = 5;
18019 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
18023 char structName[1024];
18024 struct Identifier * id = exp->__anon1.member.member;
18025 struct Expression * classExp = exp->__anon1.member.exp;
18028 FreeType(classExp->expType);
18029 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
18030 strcpy(structName, "__ecereClassData_");
18031 FullClassNameCat(structName, type->__anon1._class->string, 0);
18033 exp->__anon1.member.member = id;
18034 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"))))))));
18036 ProcessExpressionType(exp);
18042 struct Symbol * classSym = FindClass(id->string);
18046 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
18049 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
18053 if(exp->__anon1.member.exp->destType)
18054 FreeType(exp->__anon1.member.exp->destType);
18056 if(method && !method->_class->symbol)
18057 method->_class->symbol = FindClass(method->_class->fullName);
18058 if(prop && !prop->_class->symbol)
18059 prop->_class->symbol = FindClass(prop->_class->fullName);
18060 exp->__anon1.member.exp->destType = __extension__ ({
18061 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18063 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1->thisClassFrom = type ? type->thisClassFrom : (((void *)0)), __ecereInstance1;
18068 exp->__anon1.member.memberType = 1;
18069 if(!prop->dataType)
18070 ProcessPropertyType(prop);
18071 exp->expType = prop->dataType;
18072 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
18074 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18076 CopyTypeInto(type, exp->expType);
18077 type->refCount = 1;
18078 type->constant = 1;
18079 exp->expType = type;
18081 else if(prop->dataType)
18082 prop->dataType->refCount++;
18086 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18088 FreeExpContents(exp);
18090 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18091 ProcessExpressionType(exp);
18094 exp->__anon1.member.memberType = 3;
18095 DeclareStruct(curExternal, _class->fullName, 0, 1);
18096 if(member->_class != _class)
18097 DeclareStruct(curExternal, member->_class->fullName, 0, 1);
18098 if(!member->dataType)
18100 struct Context * context = SetupTemplatesContext(_class);
18102 member->dataType = ProcessTypeString(member->dataTypeString, 0);
18103 FinishTemplatesContext(context);
18105 if(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 == 2)
18106 member->dataType->bitMemberSize = ((struct __ecereNameSpace__ecere__com__BitMember *)member)->size;
18107 exp->expType = member->dataType;
18108 if(member->dataType)
18109 member->dataType->refCount++;
18111 else if(revConvert)
18113 exp->__anon1.member.memberType = 4;
18114 exp->expType = MkClassType(revConvert->_class->fullName);
18119 exp->__anon1.member.memberType = 2;
18121 if(!method->dataType)
18122 ProcessMethodType(method);
18123 exp->expType = __extension__ ({
18124 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18126 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
18128 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
18129 exp->expType->__anon1.__anon3.usedClass = _class;
18131 else if(!classProp)
18133 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18135 FreeExpContents(exp);
18137 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18138 FreeType(exp->expType);
18139 exp->expType = MkClassType("ecere::com::Class");
18142 yylloc = exp->__anon1.member.member->loc;
18143 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
18145 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
18147 if(_class && exp->expType)
18149 struct __ecereNameSpace__ecere__com__Class * tClass;
18151 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
18152 while(tClass && !tClass->templateClass)
18153 tClass = tClass->base;
18154 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
18157 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18158 struct __ecereNameSpace__ecere__com__Class * sClass;
18160 for(sClass = tClass; sClass; sClass = sClass->base)
18163 if(sClass->templateClass)
18164 sClass = sClass->templateClass;
18165 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18167 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
18169 for(sClass = sClass->base; sClass; sClass = sClass->base)
18170 id += sClass->templateParams.count;
18178 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
18180 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18181 struct Context * context = SetupTemplatesContext(tClass);
18182 unsigned int constant = exp->expType->constant;
18183 unsigned int passAsTemplate = 0;
18184 struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
18185 struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
18187 if(t && t->kind == 8 && t->__anon1._class)
18188 thisClassFrom = t->__anon1._class->__anon1.registered;
18190 thisClassFrom = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "class");
18192 passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
18193 FreeType(exp->expType);
18194 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18195 exp->expType->thisClassFrom = thisClassFrom;
18196 if(exp->expType->kind == 8 && constant)
18197 exp->expType->constant = 1;
18198 else if(exp->expType->kind == 13)
18200 struct Type * t = exp->expType->__anon1.type;
18202 while(t->kind == 13)
18203 t = t->__anon1.type;
18205 t->constant = constant;
18209 if(exp->expType->kind == 21)
18211 FreeType(exp->expType);
18212 exp->expType = ReplaceThisClassType(_class);
18215 exp->expType->passAsTemplate = 1;
18218 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18219 if(exp->destType->kind == 8 && constant)
18220 exp->destType->constant = 1;
18221 else if(exp->destType->kind == 13)
18223 struct Type * t = exp->destType->__anon1.type;
18225 while(t->kind == 13)
18226 t = t->__anon1.type;
18228 t->constant = constant;
18230 if(exp->destType->kind == 21)
18232 FreeType(exp->destType);
18233 exp->destType = ReplaceThisClassType(_class);
18237 FinishTemplatesContext(context);
18240 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)
18243 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18244 struct __ecereNameSpace__ecere__com__Class * sClass;
18246 for(sClass = tClass; sClass; sClass = sClass->base)
18249 if(sClass->templateClass)
18250 sClass = sClass->templateClass;
18251 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18253 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
18255 for(sClass = sClass->base; sClass; sClass = sClass->base)
18256 id += sClass->templateParams.count;
18266 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18267 struct Context * context = SetupTemplatesContext(tClass);
18268 struct Type * basicType;
18270 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18273 if(basicType->kind == 21)
18275 FreeType(basicType);
18276 basicType = ReplaceThisClassType(_class);
18278 FreeType(exp->expType);
18279 exp->expType = __extension__ ({
18280 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18282 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
18286 exp->destType = exp->expType;
18287 exp->destType->refCount++;
18290 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18291 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18292 struct Declarator * decl;
18294 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18297 exp->destType->refCount++;
18299 exp->expType->refCount++;
18301 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
18302 exp->__anon1.cast.exp = newExp;
18305 FinishTemplatesContext(context);
18308 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
18310 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
18314 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
18316 int paramCount = 0;
18317 int lastParam = -1;
18318 char templateString[1024];
18319 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
18321 sprintf(templateString, "%s<", expClass->templateClass->fullName);
18322 while(cClass != expClass)
18324 struct __ecereNameSpace__ecere__com__Class * sClass;
18326 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
18329 for(param = cClass->templateParams.first; param; param = param->next)
18331 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
18333 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
18334 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
18336 while(cClassCur != tClass && !paramCur)
18338 struct __ecereNameSpace__ecere__com__Class * sClassCur;
18340 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
18342 cClassCur = sClassCur;
18343 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
18345 if(!strcmp(paramCur->name, param->name))
18352 if(paramCur && paramCur->type == 0)
18353 arg = tClass->templateArgs[cp];
18355 arg = expClass->templateArgs[p];
18357 char argument[256];
18359 argument[0] = '\0';
18360 switch(param->type)
18364 char expString[1024];
18365 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18366 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
18367 struct Expression * exp;
18368 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
18370 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
18371 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
18372 ProcessExpressionType(exp);
18373 ComputeExpression(exp);
18374 expString[0] = '\0';
18375 PrintExpression(exp, expString);
18376 strcat(argument, expString);
18377 FreeExpression(exp);
18382 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
18387 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
18388 strcat(argument, arg.__anon1.__anon1.dataTypeString);
18395 strcat(templateString, ", ");
18396 if(lastParam != p - 1)
18398 strcat(templateString, param->name);
18399 strcat(templateString, " = ");
18401 strcat(templateString, argument);
18410 int len = strlen(templateString);
18412 if(templateString[len - 1] == '>')
18413 templateString[len++] = ' ';
18414 templateString[len++] = '>';
18415 templateString[len++] = '\0';
18417 FreeType(exp->expType);
18419 struct Context * context = SetupTemplatesContext(tClass);
18421 exp->expType = ProcessTypeString(templateString, 0);
18422 FinishTemplatesContext(context);
18429 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)");
18431 else if(type && (type->kind == 9 || type->kind == 10))
18433 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
18437 exp->expType = memberType;
18439 memberType->refCount++;
18444 char expString[10240];
18446 expString[0] = '\0';
18449 PrintExpression(exp, expString);
18450 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18452 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
18454 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
18456 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
18458 struct Identifier * id = exp->__anon1.member.member;
18459 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));
18463 FreeType(exp->expType);
18464 exp->expType = ReplaceThisClassType(_class);
18468 yylloc = oldyylloc;
18473 struct Type * destType = exp->destType;
18475 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
18477 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
18479 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
18483 ProcessExpressionType(exp);
18490 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
18492 if(classSym && classSym->__anon1.registered)
18494 if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
18497 struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
18500 DeclareStruct(curExternal, classSym->string, 0, 1);
18501 FreeSpecifier(exp->__anon1._class);
18502 FullClassNameCat(name, classSym->string, 0);
18506 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
18510 struct Expression * e;
18513 if(b->structSize == b->offset)
18514 exp->__anon1.op.exp1 = MkExpConstant("0");
18516 exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18517 exp->__anon1.op.op = '+';
18519 while(b->offset != 0)
18521 struct Symbol * sym;
18522 struct Expression * typeSize;
18525 sym = FindClass(b->fullName);
18527 DeclareStruct(curExternal, sym->string, 0, 1);
18528 FullClassNameCat(name, sym->string, 0);
18529 if(b->structSize == b->offset)
18530 typeSize = MkExpConstant("0");
18532 typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18533 e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
18534 e = e->__anon1.op.exp2;
18540 if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
18542 FreeSpecifier(exp->__anon1._class);
18543 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
18548 char className[1024];
18550 strcpy(className, "__ecereClass_");
18551 FullClassNameCat(className, classSym->string, 1);
18552 DeclareClass(curExternal, classSym, className);
18553 FreeExpContents(exp);
18555 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
18556 exp->__anon1.member.member = MkIdentifier("structSize");
18560 exp->expType = __extension__ ({
18561 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18563 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18569 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
18571 exp->expType = __extension__ ({
18572 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18574 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18576 exp->isConstant = 1;
18577 DeclareType(curExternal, type, 1, 0);
18583 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
18586 FreeType(exp->__anon1.cast.exp->destType);
18587 exp->__anon1.cast.exp->destType = type;
18590 ProcessExpressionType(exp->__anon1.cast.exp);
18593 exp->expType = type;
18594 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
18596 void * prev = exp->prev, * next = exp->next;
18597 struct Type * expType = exp->__anon1.cast.exp->destType;
18598 struct Expression * castExp = exp->__anon1.cast.exp;
18599 struct Type * destType = exp->destType;
18602 expType->refCount++;
18603 FreeType(exp->expType);
18604 FreeTypeName(exp->__anon1.cast.typeName);
18606 FreeType(exp->expType);
18607 FreeType(exp->destType);
18608 exp->expType = expType;
18609 exp->destType = destType;
18610 ((castExp ? __extension__ ({
18611 void * __ecerePtrToDelete = (castExp);
18613 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
18614 }) : 0), castExp = 0);
18620 exp->isConstant = exp->__anon1.cast.exp->isConstant;
18626 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
18628 exp->expType = type;
18633 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
18635 ProcessExpressionType(exp->__anon1.vaArg.exp);
18636 exp->expType = type;
18641 struct Expression * e;
18642 struct Type * t = exp->destType;
18644 if(t && !exp->destType->casted)
18646 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18647 CopyTypeInto(t, exp->destType);
18652 exp->isConstant = 1;
18653 FreeType(exp->__anon1.cond.cond->destType);
18654 exp->__anon1.cond.cond->destType = MkClassType("bool");
18655 exp->__anon1.cond.cond->destType->truth = 1;
18656 ProcessExpressionType(exp->__anon1.cond.cond);
18657 if(!exp->__anon1.cond.cond->isConstant)
18658 exp->isConstant = 0;
18659 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
18663 FreeType(e->destType);
18666 e->destType->refCount++;
18668 ProcessExpressionType(e);
18671 exp->expType = e->expType;
18673 e->expType->refCount++;
18676 exp->isConstant = 0;
18678 FreeType(exp->__anon1.cond.elseExp->destType);
18679 exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
18680 if(exp->__anon1.cond.elseExp->destType)
18681 exp->__anon1.cond.elseExp->destType->refCount++;
18682 ProcessExpressionType(exp->__anon1.cond.elseExp);
18683 if(!exp->__anon1.cond.elseExp->isConstant)
18684 exp->isConstant = 0;
18690 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
18692 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
18694 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
18696 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
18698 exp->destType->refCount++;
18700 ProcessStatement(exp->__anon1.compound);
18701 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
18703 exp->expType->refCount++;
18709 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
18711 if(spec && spec->type == 1)
18713 exp->expType = MkClassType(spec->__anon1.__anon1.name);
18714 exp->expType->kind = 19;
18715 exp->byReference = 1;
18719 exp->expType = MkClassType("ecere::com::Class");
18720 exp->byReference = 1;
18726 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
18730 struct Identifier * id = exp->__anon1.classData.id;
18731 char structName[1024];
18732 struct Expression * classExp;
18734 strcpy(structName, "__ecereClassData_");
18735 FullClassNameCat(structName, _class->fullName, 0);
18737 exp->__anon1.member.member = id;
18738 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
18739 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
18741 classExp = MkExpIdentifier(MkIdentifier("class"));
18742 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"))))))));
18743 ProcessExpressionType(exp);
18750 struct Type * type = (((void *)0));
18751 const char * typeString = (((void *)0));
18752 char typeStringBuf[1024];
18754 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))
18756 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
18758 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
18760 else if(exp->__anon1.list)
18762 struct Expression * e;
18764 for(e = (*exp->__anon1.list).first; e; e = e->next)
18766 ProcessExpressionType(e);
18776 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18780 e->expType = (((void *)0));
18781 e = (*exp->__anon1.list).first;
18782 ProcessExpressionType(e);
18785 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18787 FreeType(e->expType);
18788 e->expType = (((void *)0));
18790 type = (((void *)0));
18798 FreeType(e->expType);
18799 e->expType = (((void *)0));
18805 typeStringBuf[0] = '\0';
18806 PrintTypeNoConst(type, typeStringBuf, 0, 1);
18807 typeString = typeStringBuf;
18809 type = (((void *)0));
18814 char templateString[1024];
18815 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18816 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
18817 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18818 struct Expression * expExt;
18819 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
18821 sprintf(templateString, "Container<%s>", typeString);
18822 if(exp->__anon1.list)
18824 struct Expression * e;
18826 type = ProcessTypeString(typeString, 0);
18827 while((e = (*exp->__anon1.list).first))
18829 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
18830 e->destType = type;
18832 ProcessExpressionType(e);
18833 ListAdd(initializers, MkInitializerAssignment(e));
18836 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
18838 DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
18839 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
18840 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18841 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
18842 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18843 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
18844 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18845 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
18846 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18847 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
18848 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18850 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
18852 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18853 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
18854 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18855 exp->expType = ProcessTypeString(templateString, 0);
18857 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
18858 ProcessExpressionType(expExt);
18862 exp->expType = ProcessTypeString("Container", 0);
18863 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18868 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
18870 FreeType(exp->expType);
18871 exp->expType = ReplaceThisClassType(thisClass);
18873 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)
18875 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
18879 if(exp->expType->kind != 15)
18881 struct Type * member;
18882 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
18884 FreeType(exp->expType);
18885 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18886 exp->expType->kind = symbol->type->kind;
18887 exp->expType->refCount++;
18888 exp->expType->__anon1.__anon1.enumName = enumName;
18889 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
18890 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18891 member->refCount++;
18895 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
18897 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18899 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__sys__NamedLink64)), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
18901 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
18906 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)))
18908 exp->byReference = 1;
18911 if(exp->destType && (exp->destType->kind == 18))
18913 else if(exp->destType && !exp->destType->keepCast)
18915 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
18916 exp->needTemplateCast = 1;
18917 if(exp->destType->kind == 0)
18919 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
18921 unsigned int invalidCast = 0;
18923 if(inCompiler && exp->destType->count && exp->expType)
18925 struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
18926 struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
18928 if(c1 && c1->type != 1)
18929 c1 = (((void *)0));
18930 if(c2 && c2->type != 1)
18931 c2 = (((void *)0));
18932 if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
18935 if(!exp->destType->count || unresolved || invalidCast)
18940 if(exp->destType->kind != 14)
18947 char expString[10240];
18949 expString[0] = '\0';
18950 PrintType(exp->destType, type2, 0, 1);
18953 PrintExpression(exp, expString);
18954 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18957 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
18958 else if(exp->type != 16)
18959 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
18964 char expString[10240];
18966 expString[0] = '\0';
18969 PrintExpression(exp, expString);
18970 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18973 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
18974 else if(exp->type != 16)
18975 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
18987 PrintType(exp->expType, type1, 0, 1);
18988 PrintType(exp->destType, type2, 0, 1);
18990 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)))
18994 struct Expression * nbExp = GetNonBracketsExp(exp);
18995 unsigned int skipWarning = 0;
18996 int kind = exp->destType->kind;
18998 if(nbExp->type == 12 && nbExp->destType && !nbExp->destType->casted && nbExp->destType->kind == exp->destType->kind)
19000 if((kind == 1 || kind == 2) && exp->destType->isSigned == exp->expType->signedBeforePromotion && nbExp->type == 4 && nbExp->__anon1.op.exp1 && nbExp->__anon1.op.exp2)
19002 int op = nbExp->__anon1.op.op;
19003 struct Expression * nbExp1, * nbExp2;
19010 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19011 from = nbExp1->expType->promotedFrom;
19012 if(from == 1 || (kind == 2 && from == 2))
19017 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19018 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19019 from = nbExp1->expType->promotedFrom;
19020 if(op == RIGHT_OP && (from == 1 || (kind == 2 && from == 2)))
19022 else if(nbExp2->isConstant && nbExp2->type == 2 && (nbExp->__anon1.op.op == RIGHT_OP || nbExp1->expType->bitMemberSize))
19024 int n = strtol(nbExp2->__anon1.__anon1.constant, (((void *)0)), 0);
19025 int s = from == 1 ? 8 : 16;
19027 if(nbExp1->expType->bitMemberSize && nbExp1->expType->bitMemberSize < s)
19028 s = nbExp1->expType->bitMemberSize;
19029 if(nbExp->__anon1.op.op == RIGHT_OP)
19033 if(s <= (kind == 1 ? 8 : 16))
19038 if(!exp->destType->isSigned)
19040 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19041 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19042 from = nbExp2->expType->promotedFrom;
19043 if((from == 1 || from == 2) && nbExp1->isConstant && nbExp1->type == 2)
19045 int n = strtol(nbExp1->__anon1.__anon1.constant, (((void *)0)), 0);
19047 if(n == (from == 1 ? 255 : 65535))
19056 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19057 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19058 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
19059 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
19060 if(((kind1 == 1 || (kind1 == 2 && kind == 2)) || MatchTypeExpression(nbExp1, exp->destType, (((void *)0)), 0, 0)) && ((kind2 == 1 || (kind2 == 2 && kind == 2)) || MatchTypeExpression(nbExp2, exp->destType, (((void *)0)), 0, 0)))
19068 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19069 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19070 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
19071 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
19072 if(((kind1 == 1 || (kind1 == 2 && kind == 2)) || MatchTypeExpression(nbExp1, exp->destType, (((void *)0)), 0, 0)) || ((kind2 == 1 || (kind2 == 2 && kind == 2)) || MatchTypeExpression(nbExp2, exp->destType, (((void *)0)), 0, 0)))
19080 char expString[10240];
19082 expString[0] = '\0';
19085 PrintExpression(exp, expString);
19086 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19088 if(!sourceFile || (!strstr(sourceFile, "src\\lexer.ec") && !strstr(sourceFile, "src/lexer.ec") && !strstr(sourceFile, "src\\grammar.ec") && !strstr(sourceFile, "src/grammar.ec") && !strstr(sourceFile, "src\\type.ec") && !strstr(sourceFile, "src/type.ec") && !strstr(sourceFile, "src\\expression.ec") && !strstr(sourceFile, "src/expression.ec")))
19091 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19093 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19098 FreeType(exp->expType);
19099 exp->destType->refCount++;
19100 exp->expType = exp->destType;
19106 else if(exp->destType && exp->destType->kind == 13 && exp->destType->__anon1.type && exp->destType->__anon1.type->kind == 11 && exp->expType && (exp->expType->kind == 11 || exp->expType->kind == 16))
19108 struct Expression * nbExp = GetNonBracketsExp(exp);
19110 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
19112 struct Expression * e = MoveExpContents(exp);
19114 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
19116 exp->__anon1.cast.exp->destType = exp->destType;
19118 exp->destType->refCount++;
19119 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
19123 else if(unresolved)
19125 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
19126 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);
19127 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
19128 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
19130 else if(!exp->expType && exp->type != 16)
19132 char expString[10240];
19134 expString[0] = '\0';
19137 PrintExpression(exp, expString);
19138 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19140 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
19143 ApplyAnyObjectLogic(exp);
19144 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)))
19146 exp->byReference = 1;
19148 yylloc = oldyylloc;
19151 static void ProcessFunction(struct FunctionDefinition * function)
19153 struct Identifier * id = GetDeclId(function->declarator);
19154 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
19155 struct Type * type = symbol ? symbol->type : (((void *)0));
19156 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
19157 struct Context * oldTopContext = topContext;
19159 yylloc = function->loc;
19160 if(type && type->__anon1.__anon2.thisClass)
19162 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
19163 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
19164 char className[1024];
19165 char structName[1024];
19166 struct Declarator * funcDecl;
19167 struct Symbol * thisSymbol;
19168 unsigned int typedObject = 0;
19170 if(_class && !_class->base)
19172 _class = currentClass;
19173 if(_class && !_class->symbol)
19174 _class->symbol = FindClass(_class->fullName);
19175 classSym = _class ? _class->symbol : (((void *)0));
19178 thisClass = _class;
19179 if(inCompiler && _class)
19181 if(type->kind == 11)
19183 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
19185 struct Type * param = symbol->type->__anon1.__anon2.params.first;
19187 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
19190 if(type->classObjectType != 1)
19192 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
19193 symbol->type->__anon1.__anon2.staticMethod = 1;
19194 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
19195 symbol->type->extraParam = 0;
19198 strcpy(className, "__ecereClass_");
19199 FullClassNameCat(className, _class->fullName, 1);
19201 FullClassNameCat(structName, _class->fullName, 0);
19202 funcDecl = GetFuncDecl(function->declarator);
19205 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19207 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19209 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19211 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19212 FreeTypeName(param);
19215 if(!function->propertyNoThis)
19217 struct TypeName * thisParam = (((void *)0));
19219 if(type->classObjectType != 1)
19221 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19222 if(!funcDecl->__anon1.function.parameters)
19223 funcDecl->__anon1.function.parameters = MkList();
19224 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19228 if(type->classObjectType != 1)
19230 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
19231 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
19233 thisParam = __extension__ ({
19234 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
19236 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
19238 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
19239 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19243 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19245 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19247 funcDecl = GetFuncDecl(initDecl->declarator);
19250 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19252 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19254 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19256 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19257 FreeTypeName(param);
19260 if(type->classObjectType != 1)
19262 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
19264 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19266 if(!funcDecl->__anon1.function.parameters)
19267 funcDecl->__anon1.function.parameters = MkList();
19268 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19276 if(type->classObjectType != 1)
19278 thisSymbol = __extension__ ({
19279 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
19281 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
19283 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19284 if(typedObject && thisSymbol->type)
19286 thisSymbol->type->classObjectType = 2;
19287 thisSymbol->type->byReference = type->byReference;
19288 thisSymbol->type->typedByReference = type->byReference;
19292 if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
19294 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
19297 struct __ecereNameSpace__ecere__com__Class * base;
19299 for(base = _class; base && base->type != 1000; base = base->next)
19301 for(member = base->membersAndProperties.first; member; member = member->next)
19302 if(!member->isProperty)
19308 for(member = _class->membersAndProperties.first; member; member = member->next)
19309 if(!member->isProperty)
19313 char pointerName[1024];
19314 struct Declaration * decl;
19315 struct Initializer * initializer;
19316 struct Expression * exp, * bytePtr;
19318 strcpy(pointerName, "__ecerePointer_");
19319 FullClassNameCat(pointerName, _class->fullName, 0);
19321 char className[1024];
19323 strcpy(className, "__ecereClass_");
19324 FullClassNameCat(className, classSym->string, 1);
19325 DeclareClass(curExternal, classSym, className);
19327 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
19330 struct Expression * e;
19332 if(_class->offset && _class->offset == (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize))
19334 e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
19335 ProcessExpressionType(e);
19341 sprintf(string, "%d", _class->offset);
19342 e = MkExpConstant(string);
19344 exp = QBrackets(MkExpOp(bytePtr, '+', e));
19348 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
19350 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
19351 exp->expType = __extension__ ({
19352 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19354 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
19355 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19357 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
19358 }), __ecereInstance2;
19362 yylloc = function->body->loc;
19363 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
19365 struct Context * prevContext = curContext;
19366 struct __ecereNameSpace__ecere__sys__OldList * list;
19368 curContext = function->body->__anon1.compound.context;
19369 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
19370 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
19371 curContext = prevContext;
19373 decl->symbol = (((void *)0));
19374 if(!function->body->__anon1.compound.declarations)
19375 function->body->__anon1.compound.declarations = MkList();
19376 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
19382 thisClass = (((void *)0));
19385 FreeSpecifier(id->_class);
19386 id->_class = (((void *)0));
19387 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19389 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19391 id = GetDeclId(initDecl->declarator);
19392 FreeSpecifier(id->_class);
19393 id->_class = (((void *)0));
19397 topContext = function->body->__anon1.compound.context;
19399 struct FunctionDefinition * oldFunction = curFunction;
19401 curFunction = function;
19403 ProcessStatement(function->body);
19404 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
19406 struct Statement * prevCompound = curCompound;
19407 struct Context * prevContext = curContext;
19408 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
19410 if(!function->body->__anon1.compound.statements)
19411 function->body->__anon1.compound.statements = MkList();
19412 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
19413 curCompound = function->body;
19414 curContext = function->body->__anon1.compound.context;
19415 ProcessStatement(fireWatchers);
19416 curContext = prevContext;
19417 curCompound = prevCompound;
19419 curFunction = oldFunction;
19421 if(function->declarator)
19423 ProcessDeclarator(function->declarator, 1);
19425 topContext = oldTopContext;
19426 thisClass = oldThisClass;
19429 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
19431 struct ClassDef * def;
19432 struct External * external = curExternal;
19433 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
19435 for(def = definitions->first; def; def = def->next)
19439 if(def->__anon1.function->declarator)
19440 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
19442 curExternal = external;
19443 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
19445 else if(def->type == 2)
19447 if(def->__anon1.decl->type == 2)
19449 thisClass = regClass;
19450 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
19451 thisClass = (((void *)0));
19455 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
19458 thisClass = regClass;
19459 ProcessDeclaration(def->__anon1.decl, symbol ? 1 : 0);
19460 thisClass = backThisClass;
19463 else if(def->type == 1 && def->__anon1.defProperties)
19465 struct MemberInit * defProperty;
19466 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);
19468 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19469 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
19471 thisClass = regClass;
19472 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
19473 thisClass = (((void *)0));
19475 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19476 FreeSymbol(thisSymbol);
19478 else if(def->type == 3 && def->__anon1.propertyDef)
19480 struct PropertyDef * prop = def->__anon1.propertyDef;
19482 thisClass = regClass;
19487 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19489 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19491 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
19492 ProcessStatement(prop->setStmt);
19498 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19500 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19502 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
19503 ProcessStatement(prop->getStmt);
19505 if(prop->issetStmt)
19509 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19511 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19513 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
19514 ProcessStatement(prop->issetStmt);
19516 thisClass = (((void *)0));
19518 else if(def->type == 4 && def->__anon1.propertyWatch)
19520 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
19522 thisClass = regClass;
19523 if(propertyWatch->compound)
19525 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);
19527 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19528 curExternal = (((void *)0));
19529 ProcessStatement(propertyWatch->compound);
19531 thisClass = (((void *)0));
19536 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19538 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19540 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19541 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19542 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19543 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19544 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19545 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19546 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19547 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19548 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19549 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19550 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19551 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19552 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19553 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19554 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19555 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19556 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19557 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19558 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19559 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19560 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19561 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19562 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19563 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19564 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19565 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19566 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19567 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19568 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19569 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19570 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19571 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19572 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19573 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19574 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19575 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19576 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19577 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19578 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19579 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19580 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19581 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19582 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19583 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19584 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19585 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19586 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19587 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19588 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19589 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("AddMembers", "int AddMembers(External neededBy, ecere::sys::OldList * declarations, ecere::com::Class _class, bool isMember, uint * retSize, ecere::com::Class topClass, bool * addedPadding)", AddMembers, module, 2);
19590 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "External DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference)", DeclareStruct, module, 2);
19591 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclareStruct", "External _DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference, bool fwdDecl)", _DeclareStruct, module, 2);
19592 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(External neededBy, ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19593 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19594 __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);
19595 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19596 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareType", "void DeclareType(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareType, module, 2);
19597 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareTypeForwardDeclare", "void DeclareTypeForwardDeclare(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareTypeForwardDeclare, module, 2);
19598 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19599 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19600 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19601 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19602 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19603 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(External neededFor, ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19604 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19605 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19606 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19607 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(External neededFor, ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19608 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(External neededFor, GlobalData data)", DeclareGlobalData, module, 2);
19609 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19610 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
19611 __ecereClass_Conversion = class;
19612 __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);
19613 __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);
19614 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19615 __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);
19616 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19617 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19618 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19619 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19620 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19621 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19622 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19623 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19624 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19625 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19626 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19627 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19628 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19629 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19630 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19631 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19632 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19633 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19634 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19635 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("RelatedUnits", "bool RelatedUnits(ecere::com::Class c1, ecere::com::Class c2)", RelatedUnits, module, 1);
19636 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19637 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(External neededBy, const String s)", DeclareFunctionUtil, module, 1);
19638 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);