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);
8249 unsigned int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode);
8251 __internal_VirtualMethod = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8252 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8254 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8255 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek]);
8256 __internal_VirtualMethod ? __internal_VirtualMethod(f, 0, 0) : (unsigned int)1;
8258 count = strlen(string);
8259 count += (__extension__ ({
8260 int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, void * buffer, unsigned int size, unsigned int count);
8262 __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void * buffer, unsigned int size, unsigned int count))__extension__ ({
8263 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8265 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8266 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read]);
8267 __internal_VirtualMethod ? __internal_VirtualMethod(f, string + count, 1, 1023) : (int)1;
8269 string[count] = '\0';
8270 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
8271 outputLineNumbers = backOutputLineNumbers;
8275 struct Type * Dereference(struct Type * source)
8277 struct Type * type = (((void *)0));
8281 if(source->kind == 13 || source->kind == 12)
8283 type = source->__anon1.type;
8284 source->__anon1.type->refCount++;
8286 else if(source->kind == 8 && !strcmp(source->__anon1._class->string, "String"))
8288 type = __extension__ ({
8289 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8291 __ecereInstance1->kind = 1, __ecereInstance1->refCount = 1, __ecereInstance1;
8294 else if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 5)
8300 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot dereference type\n", (((void *)0))));
8305 static struct Type * Reference(struct Type * source)
8307 struct Type * type = (((void *)0));
8311 type = __extension__ ({
8312 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8314 __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
8321 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
8323 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
8325 FreeExpContents(checkedExp);
8326 FreeType(checkedExp->expType);
8327 FreeType(checkedExp->destType);
8328 *checkedExp = *newExp;
8329 ((newExp ? __extension__ ({
8330 void * __ecerePtrToDelete = (newExp);
8332 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8333 }) : 0), newExp = 0);
8334 checkedExp->prev = prev;
8335 checkedExp->next = next;
8338 void FinishTemplatesContext(struct Context * context)
8340 PopContext(context);
8341 FreeContext(context);
8342 ((context ? __extension__ ({
8343 void * __ecerePtrToDelete = (context);
8345 __ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8346 }) : 0), context = 0);
8349 static __attribute__((unused)) void UnusedFunction()
8354 const char * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Class * , const void * , char * tempString, void * fieldData, unsigned int * needClass);
8356 __internal_VirtualMethod = ((const char * (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char * tempString, void * fieldData, unsigned int * needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString]);
8357 __internal_VirtualMethod ? __internal_VirtualMethod(__ecereClass_int, (void *)&a, 0, 0, 0) : (const char * )1;
8361 struct Expression * ParseExpressionString(char * expression)
8364 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8366 int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count);
8368 __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
8369 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8371 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8372 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write]);
8373 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, expression, 1, strlen(expression)) : (int)1;
8376 unsigned int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode);
8378 __internal_VirtualMethod = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8379 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8381 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8382 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek]);
8383 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, 0, 0) : (unsigned int)1;
8386 parsedExpression = (((void *)0));
8388 expression_yyparse();
8389 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
8390 return parsedExpression;
8393 struct __ecereNameSpace__ecere__com__Module
8395 struct __ecereNameSpace__ecere__com__Instance * application;
8396 struct __ecereNameSpace__ecere__sys__OldList classes;
8397 struct __ecereNameSpace__ecere__sys__OldList defines;
8398 struct __ecereNameSpace__ecere__sys__OldList functions;
8399 struct __ecereNameSpace__ecere__sys__OldList modules;
8400 struct __ecereNameSpace__ecere__com__Instance * prev;
8401 struct __ecereNameSpace__ecere__com__Instance * next;
8407 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
8408 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
8411 static struct GlobalData * FindGlobalData(char * name)
8414 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
8416 nameSpace = globalData;
8417 for(c = 0; name[c]; c++)
8419 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
8421 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
8422 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
8424 strncpy(spaceName, name + start, c - start);
8425 spaceName[c - start] = '\0';
8426 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
8427 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
8429 return (((void *)0));
8430 nameSpace = newSpace;
8438 return ScanGlobalData(nameSpace, name + start);
8440 return (((void *)0));
8443 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
8446 char nameSpace[1024];
8447 const char * namePart;
8448 unsigned int gotColon = 0;
8450 nameSpace[0] = '\0';
8451 for(c = strlen(name) - 1; c >= 0; c--)
8457 namePart = name + c + 1;
8458 while(c >= 0 && name[c] == ':')
8462 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
8466 memcpy(nameSpace, name, c + 1);
8467 nameSpace[c + 1] = 0;
8468 return ScanWithNameSpace(tree, nameSpace, namePart);
8472 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8478 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8482 return ScanWithNameSpace(tree, "", namePart);
8484 return (((void *)0));
8487 static void PrintArraySize(struct Type * arrayType, char * string)
8493 if(arrayType->__anon1.__anon4.enumClass)
8494 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
8495 else if(arrayType->__anon1.__anon4.arraySizeExp)
8496 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
8498 strcat(string, size);
8501 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
8506 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
8508 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8509 strcat(string, ")");
8510 if(type->kind == 12)
8511 PrintArraySize(type, string);
8512 else if(type->kind == 11)
8514 struct Type * param;
8516 strcat(string, "(");
8517 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
8519 PrintType(param, string, 1, fullName);
8521 strcat(string, ", ");
8523 strcat(string, ")");
8525 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8526 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
8529 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
8531 PrePrintType(type, string, fullName, (((void *)0)), printConst);
8532 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
8533 strcat(string, " ");
8534 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
8536 struct Symbol * _class = type->__anon1.__anon2.thisClass;
8538 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
8540 if(type->classObjectType == 1)
8541 strcat(string, "class");
8543 strcat(string, type->byReference ? "typed_object&" : "typed_object");
8545 else if(_class && _class->string)
8547 char * s = _class->string;
8553 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
8559 strcat(string, name);
8562 strcat(string, "::");
8564 if(printName && type->name)
8565 PrintName(type, string, fullName);
8566 PostPrintType(type, string, fullName);
8567 if(type->bitFieldCount)
8571 sprintf(count, ":%d", type->bitFieldCount);
8572 strcat(string, count);
8580 struct Conversion * prev, * next;
8581 struct __ecereNameSpace__ecere__com__Property * convert;
8583 struct Type * resultType;
8586 static void FreeConvert(struct Conversion * convert)
8588 if(convert->resultType)
8589 FreeType(convert->resultType);
8596 struct Enumerator * prev;
8597 struct Enumerator * next;
8598 struct Location loc;
8599 struct Identifier * id;
8600 struct Expression * exp;
8607 struct AsmField * prev;
8608 struct AsmField * next;
8609 struct Location loc;
8611 struct Expression * expression;
8612 struct Identifier * symbolic;
8615 struct ClassDefinition;
8619 struct Context * parent;
8620 struct __ecereNameSpace__ecere__sys__BinaryTree types;
8621 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
8622 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
8623 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
8626 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
8627 struct ClassDefinition * classDef;
8628 unsigned int templateTypesOnly;
8629 unsigned int hasNameSpace;
8634 struct External * prev;
8635 struct External * next;
8636 struct Location loc;
8638 struct Symbol * symbol;
8641 struct FunctionDefinition * function;
8642 struct ClassDefinition * _class;
8643 struct Declaration * declaration;
8644 char * importString;
8645 struct Identifier * id;
8646 struct DBTableDef * table;
8647 } ecere_gcc_struct __anon1;
8649 struct External * fwdDecl;
8650 struct __ecereNameSpace__ecere__com__Instance * outgoing;
8651 struct __ecereNameSpace__ecere__com__Instance * incoming;
8652 int nonBreakableIncoming;
8655 struct ClassDefinition
8657 struct ClassDefinition * prev;
8658 struct ClassDefinition * next;
8659 struct Location loc;
8660 struct Specifier * _class;
8661 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
8662 struct __ecereNameSpace__ecere__sys__OldList * definitions;
8663 struct Symbol * symbol;
8664 struct Location blockStart;
8665 struct Location nameLoc;
8667 unsigned int deleteWatchable;
8670 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
8672 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
8674 void DeclareGlobalData(struct External * neededFor, struct GlobalData * data)
8676 struct Symbol * symbol = data->symbol;
8678 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
8683 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
8686 data->dataType = ProcessTypeString(data->dataTypeString, 0);
8689 struct Declaration * decl;
8690 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
8691 struct Declarator * d;
8692 struct External * external;
8694 specifiers = MkList();
8695 declarators = MkList();
8696 ListAdd(specifiers, MkSpecifier(EXTERN));
8697 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
8698 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
8699 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
8700 decl = MkDeclaration(specifiers, declarators);
8701 external = MkExternalDeclaration(decl);
8703 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
8704 external->symbol = symbol;
8705 symbol->__anon2.__anon1.pointerExternal = external;
8706 DeclareType(external, data->dataType, 1, 1);
8709 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
8710 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, 0);
8713 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
8715 struct Context * ctx;
8716 struct Symbol * symbol = (((void *)0));
8718 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
8720 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
8722 symbol = (((void *)0));
8727 strcpy(curName, thisNameSpace);
8728 strcat(curName, "::");
8729 strcat(curName, name);
8730 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
8733 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
8736 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
8737 if(symbol || ctx == endContext)
8740 if(inCompiler && symbol && ctx == globalContext && symbol->__anon2.__anon1.pointerExternal && curExternal && symbol->__anon2.__anon1.pointerExternal != curExternal)
8741 __ecereMethod_External_CreateUniqueEdge(curExternal, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
8749 struct ClassDef * prev;
8750 struct ClassDef * next;
8751 struct Location loc;
8755 struct Declaration * decl;
8756 struct ClassFunction * function;
8757 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
8758 struct PropertyDef * propertyDef;
8759 struct PropertyWatch * propertyWatch;
8761 struct Identifier * defaultProperty;
8764 struct Identifier * id;
8765 struct Initializer * initializer;
8766 } ecere_gcc_struct __anon1;
8767 } ecere_gcc_struct __anon1;
8774 struct PropertyDef * prev;
8775 struct PropertyDef * next;
8776 struct Location loc;
8777 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
8778 struct Declarator * declarator;
8779 struct Identifier * id;
8780 struct Statement * getStmt;
8781 struct Statement * setStmt;
8782 struct Statement * issetStmt;
8783 struct Symbol * symbol;
8784 struct Expression * category;
8787 unsigned int conversion : 1;
8788 unsigned int isWatchable : 1;
8789 unsigned int isDBProp : 1;
8790 } ecere_gcc_struct __anon1;
8793 static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
8795 struct ClassDef * def;
8798 for(def = (*definitions).first; def; def = def->next)
8802 struct Declaration * decl = def->__anon1.decl;
8804 if(decl && decl->__anon1.__anon1.specifiers)
8806 struct Specifier * spec;
8807 unsigned int isStruct = 0;
8809 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
8811 if(spec->type == 3 || spec->type == 4)
8813 if(spec->__anon1.__anon2.definitions)
8814 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
8820 struct Declarator * d = (((void *)0));
8822 if(decl->__anon1.__anon1.declarators)
8824 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
8826 struct Identifier * idDecl = GetDeclId(d);
8836 sprintf(id, "__anon%d", anonID++);
8837 if(!decl->__anon1.__anon1.declarators)
8838 decl->__anon1.__anon1.declarators = MkList();
8839 ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
8849 typedef union YYSTYPE
8854 struct Identifier * id;
8855 struct Expression * exp;
8856 struct Specifier * specifier;
8857 struct __ecereNameSpace__ecere__sys__OldList * list;
8858 struct Enumerator * enumerator;
8859 struct Declarator * declarator;
8860 struct Pointer * pointer;
8861 struct Initializer * initializer;
8862 struct InitDeclarator * initDeclarator;
8863 struct TypeName * typeName;
8864 struct Declaration * declaration;
8865 struct Statement * stmt;
8866 struct FunctionDefinition * function;
8867 struct External * external;
8868 struct Context * context;
8869 struct AsmField * asmField;
8870 struct Attrib * attrib;
8871 struct ExtDecl * extDecl;
8872 struct Attribute * attribute;
8873 struct Instantiation * instance;
8874 struct MembersInit * membersInit;
8875 struct MemberInit * memberInit;
8876 struct ClassFunction * classFunction;
8877 struct ClassDefinition * _class;
8878 struct ClassDef * classDef;
8879 struct PropertyDef * prop;
8881 struct Symbol * symbol;
8882 struct PropertyWatch * propertyWatch;
8883 struct TemplateParameter * templateParameter;
8884 struct TemplateArgument * templateArgument;
8885 struct TemplateDatatype * templateDatatype;
8886 struct DBTableEntry * dbtableEntry;
8887 struct DBIndexItem * dbindexItem;
8888 struct DBTableDef * dbtableDef;
8889 } ecere_gcc_struct YYSTYPE;
8891 extern YYSTYPE yylval;
8895 struct MemberInit * prev;
8896 struct MemberInit * next;
8897 struct Location loc;
8898 struct Location realLoc;
8899 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
8900 struct Initializer * initializer;
8902 unsigned int variable;
8903 unsigned int takeOutExp;
8906 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
8908 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
8910 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
8912 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
8913 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
8918 const char * dataTypeString;
8920 } ecere_gcc_struct __anon1;
8921 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
8925 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
8927 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
8929 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
8930 struct __ecereNameSpace__ecere__com__Class * sClass;
8932 for(sClass = _class; sClass; sClass = sClass->base)
8935 if(sClass->templateClass)
8936 sClass = sClass->templateClass;
8937 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
8939 if(curParam->type == 0 && !strcmp(param->identifier->string, curParam->name))
8941 for(sClass = sClass->base; sClass; sClass = sClass->base)
8943 if(sClass->templateClass)
8944 sClass = sClass->templateClass;
8945 id += sClass->templateParams.count;
8956 arg = &_class->templateArgs[id];
8957 if(arg && param->type == 0)
8958 (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
8963 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class)
8965 struct Context * context = PushContext();
8967 context->templateTypesOnly = 1;
8968 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
8970 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
8972 for(; param; param = param->next)
8974 if(param->type == 0 && param->identifier)
8976 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
8978 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8984 struct __ecereNameSpace__ecere__com__Class * sClass;
8986 for(sClass = _class; sClass; sClass = sClass->base)
8988 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * p;
8990 for(p = sClass->templateParams.first; p; p = p->next)
8994 struct TemplateParameter * param = p->param;
8995 struct TemplatedType * type;
8999 p->param = param = __extension__ ({
9000 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
9002 __ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
9005 type = __extension__ ({
9006 struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType);
9008 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
9010 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
9018 char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
9020 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9022 unsigned int first = 1;
9024 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9026 char className[1024];
9028 strcpy(className, _class->fullName);
9029 for(param = _class->templateParams.first; param; param = param->next)
9033 strcat(className, "<");
9035 strcat(className, ", ");
9036 if(lastParam + 1 != p)
9038 strcat(className, param->name);
9039 strcat(className, " = ");
9041 strcat(className, param->name);
9049 int len = strlen(className);
9051 if(className[len - 1] == '>')
9052 className[len++] = ' ';
9053 className[len++] = '>';
9054 className[len++] = '\0';
9056 return __ecereNameSpace__ecere__sys__CopyString(className);
9059 return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
9062 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
9066 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9068 unsigned int first = 1;
9070 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9072 char className[1024];
9074 strcpy(className, _class->fullName);
9075 for(param = _class->templateParams.first; param; param = param->next)
9079 strcat(className, "<");
9081 strcat(className, ", ");
9082 if(lastParam + 1 != p)
9084 strcat(className, param->name);
9085 strcat(className, " = ");
9087 strcat(className, param->name);
9095 int len = strlen(className);
9097 if(className[len - 1] == '>')
9098 className[len++] = ' ';
9099 className[len++] = '>';
9100 className[len++] = '\0';
9102 type = MkClassType(className);
9106 type = MkClassType(_class->fullName);
9111 static int DeclareMembers(struct External * neededBy, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
9113 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
9114 struct __ecereNameSpace__ecere__com__DataMember * member;
9115 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
9117 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
9118 DeclareMembers(neededBy, _class->base, 0);
9119 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
9121 if(!member->isProperty)
9123 switch(member->type)
9127 if(!member->dataType && member->dataTypeString)
9128 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9129 if(member->dataType)
9130 DeclareType(neededBy, member->dataType, 1, 0);
9136 DeclareMembers(neededBy, (struct __ecereNameSpace__ecere__com__Class *)member, 1);
9143 FinishTemplatesContext(context);
9144 return topMember ? topMember->memberID : _class->memberID;
9147 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
9149 if(!method->dataType)
9151 struct Context * context = SetupTemplatesContext(method->_class);
9153 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9154 FinishTemplatesContext(context);
9155 if(method->type != 1 && method->dataType)
9157 if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
9159 if(!method->_class->symbol)
9160 method->_class->symbol = FindClass(method->_class->fullName);
9161 method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
9167 void ProcessPropertyType(struct __ecereNameSpace__ecere__com__Property * prop)
9171 struct Context * context = SetupTemplatesContext(prop->_class);
9173 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
9174 FinishTemplatesContext(context);
9178 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
9180 if(specs != (((void *)0)) && _class)
9182 struct Specifier * spec;
9184 for(spec = specs->first; spec; spec = spec->next)
9186 if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
9189 spec->__anon1.__anon1.name = ReplaceThisClass(_class);
9190 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
9196 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
9198 struct Identifier * id = exp->__anon1.__anon1.identifier;
9199 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9200 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
9201 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9202 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9204 if(_class && _class->type == 4)
9206 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
9207 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9211 struct __ecereNameSpace__ecere__com__Class * baseClass;
9213 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
9215 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
9217 for(value = e->values.first; value; value = value->next)
9219 if(!strcmp(value->name, id->string))
9224 exp->isConstant = 1;
9225 if(inCompiler || inPreCompiler || inDebugger)
9229 FreeExpContents(exp);
9231 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
9232 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
9234 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
9235 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9237 exp->expType = MkClassType(baseClass->fullName);
9245 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
9247 ProcessMethodType(method);
9248 exp->expType = __extension__ ({
9249 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
9251 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
9255 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
9258 ProcessPropertyType(prop);
9259 exp->expType = prop->dataType;
9261 prop->dataType->refCount++;
9264 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
9266 if(!member->dataType)
9267 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9268 exp->expType = member->dataType;
9269 if(member->dataType)
9270 member->dataType->refCount++;
9273 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
9275 if(!classProp->dataType)
9276 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
9277 if(classProp->constant)
9279 FreeExpContents(exp);
9280 exp->isConstant = 1;
9281 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
9284 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
9291 sprintf(constant, "%d", (int)classProp->Get(_class));
9292 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9298 exp->expType = classProp->dataType;
9299 if(classProp->dataType)
9300 classProp->dataType->refCount++;
9306 void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
9308 struct Symbol * symbol = prop->symbol;
9309 unsigned int imported = 0;
9310 unsigned int dllImport = 0;
9311 struct External * structExternal = (((void *)0));
9312 struct External * instExternal = (((void *)0));
9314 strcpy(setName, "__ecereProp_");
9315 FullClassNameCat(setName, prop->_class->fullName, 0);
9316 strcat(setName, "_Set_");
9317 FullClassNameCat(setName, prop->name, 1);
9318 strcpy(getName, "__ecereProp_");
9319 FullClassNameCat(getName, prop->_class->fullName, 0);
9320 strcat(getName, "_Get_");
9321 FullClassNameCat(getName, prop->name, 1);
9322 if(!symbol || symbol->_import)
9326 struct Symbol * classSym;
9328 if(!prop->_class->symbol)
9329 prop->_class->symbol = FindClass(prop->_class->fullName);
9330 classSym = prop->_class->symbol;
9331 if(classSym && !classSym->_import)
9333 struct ModuleImport * module;
9335 if(prop->_class->module)
9336 module = FindModule(prop->_class->module);
9338 module = mainModule;
9339 classSym->_import = __extension__ ({
9340 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9342 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->_class->fullName), __ecereInstance1->isRemote = prop->_class->isRemote, __ecereInstance1;
9344 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9346 symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9347 symbol->_import = (struct ClassImport *)__extension__ ({
9348 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
9350 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
9353 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
9356 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)
9361 struct Context * context = SetupTemplatesContext(prop->_class);
9363 symbol->type = ProcessTypeString(prop->dataTypeString, 0);
9364 FinishTemplatesContext(context);
9366 if((prop->Get && !symbol->__anon2.__anon2.externalGet) || (prop->Set && !symbol->__anon2.__anon2.externalSet))
9368 if(prop->_class->type == 0 && prop->_class->structSize)
9369 instExternal = DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
9370 structExternal = DeclareStruct((((void *)0)), prop->_class->fullName, prop->_class->type != 1, 0);
9372 if(prop->Get && !symbol->__anon2.__anon2.externalGet)
9374 struct Declaration * decl;
9375 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9376 struct Declarator * d;
9377 struct __ecereNameSpace__ecere__sys__OldList * params;
9378 struct Specifier * spec = (((void *)0));
9379 struct External * external;
9380 struct Declarator * typeDecl;
9381 unsigned int simple = 0;
9382 unsigned int needReference;
9384 specifiers = MkList();
9385 declarators = MkList();
9387 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9388 d = MkDeclaratorIdentifier(MkIdentifier(getName));
9390 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9392 struct Context * context = SetupTemplatesContext(prop->_class);
9394 typeDecl = SpecDeclFromString(prop->dataTypeString, specifiers, (((void *)0)));
9395 FinishTemplatesContext(context);
9397 needReference = !typeDecl || typeDecl->type == 1;
9398 for(spec = (*specifiers).first; spec; spec = spec->next)
9402 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9406 symbol->_class = classSym->__anon1.registered;
9407 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
9414 d = PlugDeclarator(typeDecl, d);
9417 ListAdd(params, MkTypeName(specifiers, PlugDeclarator(typeDecl, MkDeclaratorIdentifier(MkIdentifier("value")))));
9418 specifiers = MkList();
9420 d = MkDeclaratorFunction(d, params);
9422 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9423 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9424 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9426 ListAdd(specifiers, MkSpecifier(VOID));
9427 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9428 decl = MkDeclaration(specifiers, declarators);
9429 external = MkExternalDeclaration(decl);
9431 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9433 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9435 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9436 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9437 external->symbol = symbol;
9438 symbol->__anon2.__anon2.externalGet = external;
9439 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9441 FreeDeclarator(typeDecl);
9443 if(prop->Set && !symbol->__anon2.__anon2.externalSet)
9445 struct Declaration * decl;
9446 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9447 struct Declarator * d;
9448 struct __ecereNameSpace__ecere__sys__OldList * params;
9449 struct Specifier * spec = (((void *)0));
9450 struct External * external;
9451 struct Declarator * typeDecl;
9452 unsigned int needReference;
9454 declarators = MkList();
9456 if(!prop->conversion || prop->_class->type == 1)
9458 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9460 specifiers = MkList();
9462 struct Context * context = SetupTemplatesContext(prop->_class);
9464 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
9465 FinishTemplatesContext(context);
9467 if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
9468 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
9469 ListAdd(params, MkTypeName(specifiers, d));
9470 d = MkDeclaratorIdentifier(MkIdentifier(setName));
9472 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9473 d = MkDeclaratorFunction(d, params);
9474 needReference = !typeDecl || typeDecl->type == 1;
9475 for(spec = (*specifiers).first; spec; spec = spec->next)
9479 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9482 symbol->_class = classSym->__anon1.registered;
9486 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9487 specifiers = MkList();
9489 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9490 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9491 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9492 if(!prop->conversion || prop->_class->type == 1)
9493 ListAdd(specifiers, MkSpecifier(VOID));
9495 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
9496 decl = MkDeclaration(specifiers, declarators);
9497 external = MkExternalDeclaration(decl);
9499 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9501 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9503 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9504 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9505 external->symbol = symbol;
9506 symbol->__anon2.__anon2.externalSet = external;
9507 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9509 if(!symbol->__anon2.__anon2.externalPtr)
9511 struct Declaration * decl;
9512 struct External * external;
9513 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
9514 char propName[1024];
9517 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9520 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9521 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*specifiers), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
9523 ListAdd(specifiers, MkSpecifierName("Property"));
9524 strcpy(propName, "__ecereProp_");
9525 FullClassNameCat(propName, prop->_class->fullName, 0);
9526 strcat(propName, "_");
9527 FullClassNameCat(propName, prop->name, 1);
9529 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
9531 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9534 strcpy(propName, "__ecerePropM_");
9535 FullClassNameCat(propName, prop->_class->fullName, 0);
9536 strcat(propName, "_");
9537 FullClassNameCat(propName, prop->name, 1);
9538 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9540 decl = MkDeclaration(specifiers, list);
9542 external = MkExternalDeclaration(decl);
9543 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
9544 external->symbol = symbol;
9545 symbol->__anon2.__anon2.externalPtr = external;
9547 if(inCompiler && neededBy)
9549 if(symbol->__anon2.__anon2.externalPtr)
9550 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalPtr, 0);
9551 if(symbol->__anon2.__anon2.externalGet)
9552 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalGet, symbol->__anon2.__anon2.externalGet->type == 0);
9553 if(symbol->__anon2.__anon2.externalSet)
9554 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalSet, symbol->__anon2.__anon2.externalSet->type == 0);
9558 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction);
9560 void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char * name)
9562 struct Symbol * symbol = method->symbol;
9564 if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && (!symbol->__anon2.__anon3.methodCodeExternal || method->type == 1)))
9566 unsigned int dllImport = 0;
9568 if(!method->dataType)
9569 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9571 if(!symbol || method->type == 1)
9573 struct Symbol * classSym;
9575 if(!method->_class->symbol)
9576 method->_class->symbol = FindClass(method->_class->fullName);
9577 classSym = method->_class->symbol;
9578 if(!classSym->_import)
9580 struct ModuleImport * module;
9582 if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->name)
9583 module = FindModule(method->_class->module);
9585 module = mainModule;
9586 classSym->_import = __extension__ ({
9587 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9589 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->_class->fullName), __ecereInstance1->isRemote = method->_class->isRemote, __ecereInstance1;
9591 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9595 symbol = method->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9597 if(!symbol->_import)
9599 symbol->_import = (struct ClassImport *)__extension__ ({
9600 struct MethodImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodImport);
9602 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
9604 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->methods, symbol->_import);
9608 symbol->type = method->dataType;
9610 symbol->type->refCount++;
9613 if(!method->dataType->dllExport)
9615 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)
9621 struct Declaration * decl;
9622 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9623 struct Declarator * d;
9624 struct Declarator * funcDecl;
9625 struct External * external;
9627 specifiers = MkList();
9628 declarators = MkList();
9630 ListAdd(specifiers, MkSpecifier(EXTERN));
9631 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
9632 ListAdd(specifiers, MkSpecifier(STATIC));
9633 if(method->type == 1)
9635 ListAdd(specifiers, MkSpecifier(INT));
9636 d = MkDeclaratorIdentifier(MkIdentifier(name));
9640 d = MkDeclaratorIdentifier(MkIdentifier(name));
9642 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9644 struct Context * context = SetupTemplatesContext(method->_class);
9646 d = SpecDeclFromString(method->dataTypeString, specifiers, d);
9647 FinishTemplatesContext(context);
9649 funcDecl = GetFuncDecl(d);
9652 struct Specifier * spec, * next;
9654 for(spec = (*specifiers).first; spec; spec = next)
9659 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9660 FreeSpecifier(spec);
9664 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
9666 if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
9668 struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
9669 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")));
9670 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
9671 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
9673 if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
9675 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
9677 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
9678 FreeTypeName(param);
9680 if(!funcDecl->__anon1.function.parameters)
9681 funcDecl->__anon1.function.parameters = MkList();
9682 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
9686 ProcessDeclarator(d, 1);
9687 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9688 decl = MkDeclaration(specifiers, declarators);
9689 ReplaceThisClassSpecifiers(specifiers, method->_class);
9690 external = MkExternalDeclaration(decl);
9691 external->symbol = symbol;
9692 symbol->__anon2.__anon1.pointerExternal = external;
9693 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9694 DeclareStruct(external, method->_class->fullName, 1, 1);
9695 if(method->dataType)
9696 DeclareType(external, method->dataType, 1, 1);
9699 if(inCompiler && neededFor)
9701 struct External * external = symbol->__anon2.__anon1.pointerExternal ? symbol->__anon2.__anon1.pointerExternal : symbol->__anon2.__anon3.methodCodeExternal;
9703 __ecereMethod_External_CreateUniqueEdge(neededFor, external, external->type == 0);
9707 struct __ecereNameSpace__ecere__com__GlobalFunction;
9709 struct __ecereNameSpace__ecere__com__GlobalFunction
9711 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
9712 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
9715 struct __ecereNameSpace__ecere__com__Instance * module;
9716 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
9717 const char * dataTypeString;
9718 struct Type * dataType;
9722 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
9724 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);
9726 unsigned int DeclareFunction(struct External * neededFor, struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
9728 struct Symbol * symbol = function->symbol;
9730 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
9732 unsigned int imported = 0;
9733 unsigned int dllImport = 0;
9735 if(!function->dataType)
9737 function->dataType = ProcessTypeString(function->dataTypeString, 0);
9738 if(!function->dataType->__anon1.__anon2.thisClass)
9739 function->dataType->__anon1.__anon2.staticMethod = 1;
9745 struct ModuleImport * module = FindModule(function->module);
9747 symbol = function->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9750 if(!function->dataType->dllExport)
9752 symbol->_import = (struct ClassImport *)__extension__ ({
9753 struct FunctionImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionImport);
9755 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->name), __ecereInstance1;
9757 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symbol->_import);
9761 symbol->type = ProcessTypeString(function->dataTypeString, 0);
9762 if(!symbol->type->__anon1.__anon2.thisClass)
9763 symbol->type->__anon1.__anon2.staticMethod = 1;
9766 imported = symbol->_import ? 1 : 0;
9767 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9773 struct Declaration * decl;
9774 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9775 struct Declarator * d;
9776 struct Declarator * funcDecl;
9777 struct External * external;
9779 specifiers = MkList();
9780 declarators = MkList();
9781 ListAdd(specifiers, MkSpecifier(EXTERN));
9782 d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
9784 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9785 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
9786 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType == 1)
9788 struct Specifier * spec;
9790 for(spec = (*specifiers).first; spec; spec = spec->next)
9791 if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
9793 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9794 FreeSpecifier(spec);
9798 funcDecl = GetFuncDecl(d);
9799 if(funcDecl && !funcDecl->__anon1.function.parameters)
9801 funcDecl->__anon1.function.parameters = MkList();
9802 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
9804 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9806 struct Context * oldCtx = curContext;
9808 curContext = globalContext;
9809 decl = MkDeclaration(specifiers, declarators);
9810 curContext = oldCtx;
9812 external = MkExternalDeclaration(decl);
9813 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9814 external->symbol = symbol;
9815 symbol->__anon2.__anon1.pointerExternal = external;
9816 DeclareType(external, function->dataType, 1, 1);
9820 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
9821 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
9822 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;
9825 void DeclareFunctionUtil(struct External * neededBy, const char * s)
9827 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
9834 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
9835 strcpy(name, "__ecereFunction_");
9836 FullClassNameCat(name, s, 0);
9837 DeclareFunction(neededBy, function, name);
9840 FindSymbol(s, globalContext, globalContext, 0, 0);
9843 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
9845 char propName[1024], propNameM[1024];
9846 char getName[1024], setName[1024];
9847 struct __ecereNameSpace__ecere__sys__OldList * args;
9849 DeclareProperty(curExternal, prop, setName, getName);
9850 strcpy(propName, "__ecereProp_");
9851 FullClassNameCat(propName, prop->_class->fullName, 0);
9852 strcat(propName, "_");
9853 FullClassNameCat(propName, prop->name, 1);
9854 strcpy(propNameM, "__ecerePropM_");
9855 FullClassNameCat(propNameM, prop->_class->fullName, 0);
9856 strcat(propNameM, "_");
9857 FullClassNameCat(propNameM, prop->name, 1);
9858 if(prop->isWatchable)
9861 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9862 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9863 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9865 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9866 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9867 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9868 DeclareFunctionUtil(curExternal, "eInstance_FireWatchers");
9872 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9873 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9874 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9876 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9877 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9878 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9879 DeclareFunctionUtil(curExternal, "eInstance_FireSelfWatchers");
9881 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
9882 curFunction->propSet->fireWatchersDone = 1;
9885 struct __ecereNameSpace__ecere__com__SubModule;
9887 struct __ecereNameSpace__ecere__com__SubModule
9889 struct __ecereNameSpace__ecere__com__SubModule * prev;
9890 struct __ecereNameSpace__ecere__com__SubModule * next;
9891 struct __ecereNameSpace__ecere__com__Instance * module;
9895 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
9897 struct __ecereNameSpace__ecere__com__SubModule * subModule;
9899 if(searchFor == searchIn)
9901 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
9903 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
9905 if(ModuleVisibility(subModule->module, searchFor))
9912 void ProcessExpressionType(struct Expression * exp);
9914 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
9916 if(exp->type == 0 && exp->__anon1.__anon1.identifier)
9918 struct Identifier * id = exp->__anon1.__anon1.identifier;
9919 struct Context * ctx;
9920 struct Symbol * symbol = (((void *)0));
9922 if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
9924 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
9928 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, id->string);
9933 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))))
9935 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
9936 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9937 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9938 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9942 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
9944 if(!prop && !method)
9945 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
9946 if(!prop && !method && !member)
9948 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string);
9950 if(prop || method || member || classProp)
9953 exp->__anon1.member.member = id;
9954 exp->__anon1.member.memberType = 0;
9955 exp->__anon1.member.exp = QMkExpId("this");
9958 else if(_class && _class->templateParams.first)
9960 struct __ecereNameSpace__ecere__com__Class * sClass;
9962 for(sClass = _class; sClass; sClass = sClass->base)
9964 if(sClass->templateParams.first)
9966 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9968 for(param = sClass->templateParams.first; param; param = param->next)
9970 if(param->type == 2 && !strcmp(param->name, id->string))
9972 struct Expression * argExp = GetTemplateArgExpByName(param->name, _class, 2);
9976 struct Declarator * decl;
9977 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
9979 FreeIdentifier(exp->__anon1.member.member);
9980 ProcessExpressionType(argExp);
9981 decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
9982 exp->expType = ProcessType(specs, decl);
9984 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
9995 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
9997 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
9999 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
10001 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10002 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
10005 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10006 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10007 struct Type * type;
10008 void * ptr = inst->data + dataMember->offset + offset;
10009 char * result = (((void *)0));
10011 exp->loc = member->loc = inst->loc;
10012 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10013 if(!dataMember->dataType)
10014 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10015 type = dataMember->dataType;
10016 if(type->kind == 8)
10018 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10020 if(_class->type == 4)
10022 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10026 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10027 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10029 for(item = e->values.first; item; item = item->next)
10031 if(item->data == GetEnumValue(_class, ptr))
10033 result = item->name;
10039 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10041 exp->destType = MkClassType(_class->fullName);
10042 ProcessExpressionType(exp);
10046 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10048 if(!_class->dataType)
10049 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10050 type = _class->dataType;
10059 FreeExpContents(exp);
10060 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10066 FreeExpContents(exp);
10067 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10073 FreeExpContents(exp);
10074 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10080 FreeExpContents(exp);
10081 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10087 FreeExpContents(exp);
10088 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10094 FreeExpContents(exp);
10095 exp->__anon1.__anon1.constant = PrintInt64((long long)*(ssize_t *)ptr);
10100 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10103 ListAdd(memberList, member);
10105 if(parentDataMember->type == 1)
10110 void CheckTemplateTypes(struct Expression * exp)
10112 struct Expression * nbExp = GetNonBracketsExp(exp);
10114 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
10116 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10117 struct Context * context;
10118 int kind = exp->expType->kind;
10122 exp->destType->refCount++;
10124 exp->expType->refCount++;
10125 newExp->prev = (((void *)0));
10126 newExp->next = (((void *)0));
10127 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10129 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10131 if(c->type == 2 || c->type == 4 || c->type == 3)
10134 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10135 kind = c->dataType->kind;
10141 if(exp->destType->classObjectType)
10144 exp->destType->refCount--;
10146 exp->expType->refCount--;
10147 ((newExp ? __extension__ ({
10148 void * __ecerePtrToDelete = (newExp);
10150 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10151 }) : 0), newExp = 0);
10155 struct __ecereNameSpace__ecere__sys__OldList * specs;
10156 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10157 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10159 context = PushContext();
10160 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10161 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10162 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10164 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10165 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
10166 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
10167 exp->__anon1.compound->__anon1.compound.context = context;
10168 PopContext(context);
10173 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
10174 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))
10175 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
10177 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10182 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
10184 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10185 struct Context * context;
10186 int kind = exp->expType->kind;
10190 exp->destType->refCount++;
10192 exp->expType->refCount++;
10193 newExp->prev = (((void *)0));
10194 newExp->next = (((void *)0));
10195 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10197 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10199 if(c->type == 2 || c->type == 4 || c->type == 3)
10202 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10203 kind = c->dataType->kind;
10209 if(exp->destType->classObjectType)
10212 exp->destType->refCount--;
10214 exp->expType->refCount--;
10215 ((newExp ? __extension__ ({
10216 void * __ecerePtrToDelete = (newExp);
10218 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10219 }) : 0), newExp = 0);
10223 struct __ecereNameSpace__ecere__sys__OldList * specs;
10224 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10225 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10227 context = PushContext();
10228 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10229 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10230 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10232 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10233 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
10234 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
10235 exp->__anon1.compound->__anon1.compound.context = context;
10236 PopContext(context);
10241 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
10244 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10245 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)));
10246 ProcessExpressionType((*exp->__anon1.list).first);
10252 if(__ecereProp_Type_Get_isPointerType(exp->expType))
10254 exp->needTemplateCast = 2;
10255 newExp->needCast = 1;
10256 newExp->needTemplateCast = 2;
10257 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10259 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
10260 exp->needTemplateCast = 2;
10261 newExp->needCast = 1;
10262 newExp->needTemplateCast = 2;
10263 ProcessExpressionType((*exp->__anon1.list).first);
10269 if(exp->expType->kind == 20)
10271 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
10275 FreeType(exp->destType);
10276 FreeType(exp->expType);
10277 ((newExp ? __extension__ ({
10278 void * __ecerePtrToDelete = (newExp);
10280 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10281 }) : 0), newExp = 0);
10286 char typeString[1024];
10287 struct Declarator * decl;
10288 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
10290 typeString[0] = '\0';
10291 PrintType(exp->expType, typeString, 0, 0);
10292 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
10294 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
10295 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10296 exp->__anon1.cast.exp->needCast = 1;
10297 exp->needTemplateCast = 2;
10298 newExp->needTemplateCast = 2;
10306 static void ProcessInitializer(struct Initializer * init, struct Type * type)
10311 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
10313 if(init->__anon1.exp && !init->__anon1.exp->destType)
10315 FreeType(init->__anon1.exp->destType);
10316 init->__anon1.exp->destType = type;
10320 if(init->__anon1.exp)
10322 ProcessExpressionType(init->__anon1.exp);
10323 init->isConstant = init->__anon1.exp->isConstant;
10329 struct Expression * exp = init->__anon1.exp;
10330 struct Instantiation * inst = exp->__anon1.instance;
10331 struct MembersInit * members;
10334 init->__anon1.list = MkList();
10337 for(members = (*inst->members).first; members; members = members->next)
10339 if(members->type == 0)
10341 struct MemberInit * member;
10343 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
10345 ListAdd(init->__anon1.list, member->initializer);
10346 member->initializer = (((void *)0));
10351 FreeExpression(exp);
10355 struct Initializer * i;
10356 struct Type * initializerType = (((void *)0));
10357 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
10358 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
10359 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
10360 int subMemberStackPos = 0;
10362 if(type && type->kind == 12)
10363 initializerType = Dereference(type);
10364 else if(type && (type->kind == 9 || type->kind == 10))
10365 initializerType = type->__anon1.__anon1.members.first;
10366 for(i = (*init->__anon1.list).first; i; i = i->next)
10368 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
10370 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
10373 if(!curMember->dataType)
10374 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
10375 initializerType = curMember->dataType;
10378 ProcessInitializer(i, initializerType);
10379 if(initializerType && type && (type->kind == 9 || type->kind == 10))
10380 initializerType = initializerType->next;
10382 init->isConstant = 0;
10384 if(type && type->kind == 12)
10385 FreeType(initializerType);
10386 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))
10388 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
10395 void PopulateInstance(struct Instantiation * inst)
10397 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
10398 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
10399 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10400 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
10403 inst->members = MkListOne(MkMembersInitList(memberList));
10405 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
10406 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10408 if(!dataMember->isProperty)
10410 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10411 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
10414 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10415 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10416 struct Type * type;
10417 void * ptr = inst->data + dataMember->offset;
10418 char * result = (((void *)0));
10420 exp->loc = member->loc = inst->loc;
10421 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10422 if(!dataMember->dataType)
10423 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10424 type = dataMember->dataType;
10425 if(type->kind == 8)
10427 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10429 if(_class->type == 4)
10431 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10435 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10436 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10438 for(item = e->values.first; item; item = item->next)
10440 if(item->data == GetEnumValue(_class, ptr))
10442 result = item->name;
10449 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10451 exp->destType = MkClassType(_class->fullName);
10452 ProcessExpressionType(exp);
10455 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10457 if(!_class->dataType)
10458 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10459 type = _class->dataType;
10468 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10474 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10480 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10486 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10492 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10497 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10500 ListAdd(memberList, member);
10506 int ComputeTypeSize(struct Type * type);
10508 void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
10510 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10511 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10513 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))
10515 int unionMemberOffset = 0;
10520 member->memberOffset = 0;
10521 if(targetBits < sizeof(void *) * 8)
10522 member->structAlignment = 0;
10524 else if(targetBits < sizeof(void *) * 8)
10525 _class->structAlignment = 0;
10526 if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
10527 _class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
10528 if(!member && _class->destructionWatchOffset)
10529 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10531 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10533 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10535 if(!dataMember->isProperty)
10537 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
10539 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10545 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10547 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10549 if(!dataMember->isProperty && (dataMember->type != 0 || dataMember->dataTypeString))
10551 if(!isMember && _class->type == 2 && dataMember->dataType)
10553 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
10557 ComputeTypeSize(dataMember->dataType);
10558 if(bitMember->pos == -1)
10559 bitMember->pos = _class->memberOffset;
10560 if(!bitMember->size)
10561 bitMember->size = dataMember->dataType->size * 8;
10562 _class->memberOffset = bitMember->pos + bitMember->size;
10563 for(d = 0; d < bitMember->size; d++)
10569 bitMember->mask = mask << bitMember->pos;
10571 else if(dataMember->type == 0 && dataMember->dataType)
10576 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)))
10577 ComputeTypeSize(dataMember->dataType);
10578 if(dataMember->dataType->bitFieldCount)
10580 bitFields += dataMember->dataType->bitFieldCount;
10587 int size = (bitFields + 7) / 8;
10591 int __simpleStruct0;
10595 short __simpleStruct0;
10597 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10598 if(member->memberOffset % alignment)
10599 member->memberOffset += alignment - (member->memberOffset % alignment);
10601 dataMember->offset = member->memberOffset;
10602 if(member->type == 1)
10603 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10606 member->memberOffset += size;
10613 short __simpleStruct0;
10615 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10616 if(_class->memberOffset % alignment)
10617 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10619 dataMember->offset = _class->memberOffset;
10620 _class->memberOffset += size;
10624 size = dataMember->dataType->size;
10625 alignment = dataMember->dataType->alignment;
10629 int __simpleStruct0;
10633 short __simpleStruct0;
10635 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10636 if(member->memberOffset % alignment)
10637 member->memberOffset += alignment - (member->memberOffset % alignment);
10639 dataMember->offset = member->memberOffset;
10640 if(member->type == 1)
10641 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10644 member->memberOffset += size;
10651 short __simpleStruct0;
10653 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10654 if(_class->memberOffset % alignment)
10655 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10657 dataMember->offset = _class->memberOffset;
10658 _class->memberOffset += size;
10665 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
10666 alignment = dataMember->structAlignment;
10669 int __simpleStruct0;
10673 short __simpleStruct0;
10675 if(member->memberOffset % alignment)
10676 member->memberOffset += alignment - (member->memberOffset % alignment);
10677 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10679 dataMember->offset = member->memberOffset;
10680 if(member->type == 1)
10681 unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10683 member->memberOffset += dataMember->memberOffset;
10689 short __simpleStruct0;
10691 if(_class->memberOffset % alignment)
10692 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10693 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10695 dataMember->offset = _class->memberOffset;
10696 _class->memberOffset += dataMember->memberOffset;
10704 int size = (bitFields + 7) / 8;
10708 int __simpleStruct0;
10712 short __simpleStruct0;
10714 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10715 if(member->memberOffset % alignment)
10716 member->memberOffset += alignment - (member->memberOffset % alignment);
10718 if(member->type == 1)
10719 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10722 member->memberOffset += size;
10729 short __simpleStruct0;
10731 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10732 if(_class->memberOffset % alignment)
10733 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10735 _class->memberOffset += size;
10740 if(member && member->type == 1)
10742 member->memberOffset = unionMemberOffset;
10746 if(_class->type != 2)
10750 if(_class->structAlignment)
10752 if(_class->memberOffset % _class->structAlignment)
10753 extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
10755 _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;
10758 struct __ecereNameSpace__ecere__com__Property * prop;
10760 for(prop = _class->membersAndProperties.first; prop; prop = prop->next)
10762 if(prop->isProperty && prop->isWatchable)
10764 prop->watcherOffset = _class->structSize;
10765 _class->structSize += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10770 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
10772 for(derivative = _class->derivatives.first; derivative; derivative = derivative->next)
10774 struct __ecereNameSpace__ecere__com__Class * deriv = derivative->data;
10776 if(deriv->computeSize)
10778 deriv->offset = (_class->type == 5 ? _class->memberOffset : _class->structSize);
10779 deriv->memberOffset = 0;
10780 deriv->structSize = deriv->offset;
10781 ComputeClassMembers(deriv, 0);
10789 FinishTemplatesContext(context);
10792 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)
10794 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10795 unsigned int totalSize = 0;
10796 unsigned int maxSize = 0;
10799 struct __ecereNameSpace__ecere__com__DataMember * member;
10801 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10805 if(!isMember && _class->base)
10807 maxSize = _class->structSize;
10809 if(_class->type == 1 || _class->type == 5)
10810 AddMembers(neededBy, declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
10813 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
10815 if(maxSize > baseSize)
10816 maxSize -= baseSize;
10822 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
10824 if(!member->isProperty)
10826 switch(member->type)
10830 if(member->dataTypeString)
10832 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
10833 struct Declarator * decl;
10835 decl = SpecDeclFromString(member->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(member->name)));
10836 ListAdd(decls, MkStructDeclarator(decl, (((void *)0))));
10837 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, decls, (((void *)0)))));
10838 if(!member->dataType)
10839 member->dataType = ProcessType(specs, decl);
10840 ReplaceThisClassSpecifiers(specs, topClass);
10842 struct Type * type = ProcessType(specs, decl);
10844 DeclareType(neededBy, member->dataType, 1, 0);
10847 ComputeTypeSize(member->dataType);
10848 size = member->dataType->size;
10849 alignment = member->dataType->alignment;
10852 if(totalSize % alignment)
10853 totalSize += alignment - (totalSize % alignment);
10862 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
10865 sprintf(id, "__anon%d", anonID++);
10867 AddMembers(neededBy, list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
10868 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
10869 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
10870 alignment = member->structAlignment;
10873 if(totalSize % alignment)
10874 totalSize += alignment - (totalSize % alignment);
10884 unsigned int __simpleStruct0;
10886 if(topMember && topMember->type == 1)
10887 *retSize = (__simpleStruct0 = *retSize, (__simpleStruct0 > totalSize) ? __simpleStruct0 : totalSize);
10889 *retSize += totalSize;
10891 else if(totalSize < maxSize && _class->type != 1000)
10893 int autoPadding = 0;
10895 if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
10896 autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
10897 if(totalSize + autoPadding < maxSize)
10899 char sizeString[50];
10901 sprintf(sizeString, "%d", maxSize - totalSize);
10902 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
10908 FinishTemplatesContext(context);
10909 return topMember ? topMember->memberID : _class->memberID;
10912 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)
10917 CheckConstCompatibility(source, dest, 1);
10918 if(source->kind == 20 && dest->kind != 20)
10920 struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
10925 if(dest->kind == 20 && source->kind != 20)
10927 struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
10932 if(dest->classObjectType == 2 && dest->kind != 11)
10934 if(source->classObjectType != 3)
10938 if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
10946 if(source->kind != 11 && source->classObjectType == 3)
10948 if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
10951 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
10953 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))
10956 if(dest->kind == 14 && source->kind != 0)
10958 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))
10960 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))
10962 if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
10964 if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
10966 if(conversions != (((void *)0)))
10968 if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
10973 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
10975 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
10977 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
10979 if(sourceBase == destBase)
10983 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))
10987 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))))
10989 if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
10996 if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
11000 if(source->kind == 8)
11002 struct __ecereNameSpace__ecere__com__Class * _class;
11004 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11006 struct __ecereNameSpace__ecere__com__Property * convert;
11008 for(convert = _class->conversions.first; convert; convert = convert->next)
11010 if(convert->memberAccess == 1 || _class->module == privateModule)
11012 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11014 if(!convert->dataType)
11015 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11016 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))
11018 if(!conversions && !convert->Get)
11020 else if(conversions != (((void *)0)))
11022 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))
11026 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11028 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11037 if(dest->kind == 8)
11039 struct __ecereNameSpace__ecere__com__Class * _class;
11041 for(_class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11043 struct __ecereNameSpace__ecere__com__Property * convert;
11045 for(convert = _class->conversions.first; convert; convert = convert->next)
11047 if(convert->memberAccess == 1 || _class->module == privateModule)
11049 struct Type * constType = (((void *)0));
11050 unsigned int success = 0;
11052 if(!convert->dataType)
11053 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11054 if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
11056 struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11058 constType = __extension__ ({
11059 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11061 __ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
11063 CopyTypeInto(ptrType, convert->dataType->__anon1.type);
11064 ptrType->constant = 1;
11066 if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
11068 if(!conversions && !convert->Set)
11070 else if(conversions != (((void *)0)))
11072 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))
11076 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
11078 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
11084 FreeType(constType);
11090 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
11092 if(!dest->__anon1._class->__anon1.registered->dataType)
11093 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
11094 if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
11096 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))
11103 if(source->kind == 8)
11105 struct __ecereNameSpace__ecere__com__Class * _class;
11107 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11109 struct __ecereNameSpace__ecere__com__Property * convert;
11111 for(convert = _class->conversions.first; convert; convert = convert->next)
11113 if(convert->memberAccess == 1 || _class->module == privateModule)
11115 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11117 if(!convert->dataType)
11118 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11119 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))
11121 if(!conversions && !convert->Get)
11123 else if(conversions != (((void *)0)))
11125 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))
11129 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11131 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11139 if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
11141 if(!source->__anon1._class->__anon1.registered->dataType)
11142 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
11143 if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
11145 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))
11147 else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
11153 if(source->kind == 8 || source->kind == 19)
11155 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
11157 else if(dest->kind == 7 && source->kind == 6)
11159 else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
11161 else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
11163 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
11165 else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
11167 else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
11169 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))
11171 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))
11173 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)))
11175 struct Type * paramSource, * paramDest;
11177 if(dest->kind == 16)
11178 owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
11179 if(source->kind == 16)
11180 owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
11181 if(dest->kind == 13 && dest->__anon1.type->kind == 11)
11182 dest = dest->__anon1.type;
11183 if(source->kind == 13 && source->__anon1.type->kind == 11)
11184 source = source->__anon1.type;
11185 if(dest->kind == 16)
11186 dest = dest->__anon1.__anon3.method->dataType;
11187 if(source->kind == 16)
11188 source = source->__anon1.__anon3.method->dataType;
11189 paramSource = source->__anon1.__anon2.params.first;
11190 if(paramSource && paramSource->kind == 0)
11191 paramSource = (((void *)0));
11192 paramDest = dest->__anon1.__anon2.params.first;
11193 if(paramDest && paramDest->kind == 0)
11194 paramDest = (((void *)0));
11195 if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11197 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))))
11199 if(paramDest && paramDest->kind == 8)
11200 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
11202 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
11205 paramDest = paramDest->next;
11207 else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
11209 if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11211 if(dest->__anon1.__anon2.thisClass)
11213 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
11215 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11221 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
11223 if(owningClassDest)
11224 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
11226 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
11230 paramSource = paramSource->next;
11234 if(dest->__anon1.__anon2.thisClass)
11236 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
11238 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11244 if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
11246 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
11252 if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11254 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
11258 CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
11259 for(; paramDest; paramDest = paramDest->next)
11263 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
11267 struct Type * paramDestType = paramDest;
11268 struct Type * paramSourceType = paramSource;
11269 struct Type * type = paramDestType;
11271 if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
11274 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
11275 struct __ecereNameSpace__ecere__com__Class * sClass;
11277 for(sClass = owningClassSource; sClass; sClass = sClass->base)
11280 if(sClass->templateClass)
11281 sClass = sClass->templateClass;
11282 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
11284 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
11286 for(sClass = sClass->base; sClass; sClass = sClass->base)
11288 if(sClass->templateClass)
11289 sClass = sClass->templateClass;
11290 id += sClass->templateParams.count;
11301 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
11303 paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
11306 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)))
11311 PrintType(paramDest, type, 0, 1);
11312 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
11313 if(paramDestType != paramDest)
11314 FreeType(paramDestType);
11317 if(paramDestType != paramDest)
11318 FreeType(paramDestType);
11320 paramSource = paramSource->next;
11324 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
11329 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
11333 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
11335 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))
11337 ComputeTypeSize(source->__anon1.type);
11338 ComputeTypeSize(dest->__anon1.type);
11339 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))
11347 void ComputeInstantiation(struct Expression * exp)
11349 struct Instantiation * inst = exp->__anon1.instance;
11350 struct MembersInit * members;
11351 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11352 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11353 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11354 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11355 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11356 int subMemberStackPos = 0;
11359 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11363 if(_class->type == 0 || _class->type == 5)
11365 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11366 if(_class->type == 0)
11367 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11370 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11374 for(members = (*inst->members).first; members; members = members->next)
11376 switch(members->type)
11380 if(members->__anon1.dataMembers)
11382 struct MemberInit * member;
11384 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11386 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11387 unsigned int found = 0;
11388 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11389 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11390 unsigned int dataMemberOffset;
11394 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11397 if(curMember->isProperty)
11398 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11401 dataMember = curMember;
11402 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11403 if(_class->type == 0)
11404 dataMemberOffset += _class->base->structSize;
11411 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11415 if(prop->memberAccess == 1)
11417 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11418 curClass = prop->_class;
11423 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11424 int _subMemberStackPos = 0;
11426 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11430 if(dataMember->memberAccess == 1)
11432 curMember = dataMember;
11433 curClass = dataMember->_class;
11434 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11435 subMemberStackPos = _subMemberStackPos;
11440 if(found && member->initializer && member->initializer->type == 0)
11442 struct Expression * value = member->initializer->__anon1.exp;
11443 struct Type * type = (((void *)0));
11444 unsigned int deepMember = 0;
11448 type = prop->dataType;
11450 else if(dataMember)
11452 if(!dataMember->dataType)
11453 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11454 type = dataMember->dataType;
11456 if(ident && ident->next)
11459 for(ident = ident->next; ident && type; ident = ident->next)
11461 if(type->kind == 8)
11463 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11465 type = prop->dataType;
11468 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11470 type = dataMember->dataType;
11473 else if(type->kind == 9 || type->kind == 10)
11475 struct Type * memberType;
11477 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11479 if(!strcmp(memberType->name, ident->string))
11490 FreeType(value->destType);
11491 value->destType = type;
11494 ComputeExpression(value);
11496 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11498 if(type->kind == 8)
11500 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11502 if(_class && (_class->type == 2 || _class->type == 3 || _class->type == 4))
11504 if(!_class->dataType)
11505 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11506 type = _class->dataType;
11511 void * ptr = inst->data + dataMemberOffset;
11513 if(value->type == 2)
11519 GetInt(value, (int *)ptr);
11524 GetInt64(value, (long long *)ptr);
11529 GetIntPtr(value, (intptr_t *)ptr);
11534 GetIntSize(value, (ssize_t *)ptr);
11539 GetFloat(value, (float *)ptr);
11544 GetDouble(value, (double *)ptr);
11549 else if(value->type == 1)
11551 if(type->kind == 8)
11553 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11555 if(_class->type == 1)
11557 ComputeTypeSize(type);
11558 if(value->__anon1.instance->data)
11559 memcpy(ptr, value->__anon1.instance->data, type->size);
11564 else if(prop && prop->Set != (void *)(intptr_t)1)
11566 if(value->type == 1 && value->__anon1.instance->data)
11568 if(type->kind == 8)
11570 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11572 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)))
11574 void (* Set)(void *, void *) = (void *)prop->Set;
11576 Set(inst->data, value->__anon1.instance->data);
11577 PopulateInstance(inst);
11581 else if(value->type == 2)
11587 void (* Set)(void *, double) = (void *)prop->Set;
11589 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11594 void (* Set)(void *, float) = (void *)prop->Set;
11596 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11601 void (* Set)(void *, int) = (void *)prop->Set;
11603 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11608 void (* Set)(void *, long long) = (void *)prop->Set;
11610 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11615 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11617 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11622 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11624 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11629 else if(value->type == 3)
11633 ReadString(temp, value->__anon1.__anon2.string);
11634 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11638 else if(!deepMember && type && _class->type == 3)
11642 if(value->type == 2)
11644 if(type->kind == 8)
11646 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11648 if(_class->type == 3)
11650 if(!_class->dataType)
11651 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11652 type = _class->dataType;
11660 float (* Set)(float) = (void *)prop->Set;
11662 GetFloat(member->initializer->__anon1.exp, &fValue);
11663 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11670 double (* Set)(double) = (void *)prop->Set;
11672 GetDouble(member->initializer->__anon1.exp, &dValue);
11673 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11681 else if(!deepMember && type && _class->type == 2)
11685 if(value->type == 1 && value->__anon1.instance->data)
11687 unsigned int (* Set)(void *) = (void *)prop->Set;
11689 bits = Set(value->__anon1.instance->data);
11691 else if(value->type == 2)
11695 else if(dataMember)
11697 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11698 struct Type * type;
11701 bits = (bits & ~bitMember->mask);
11702 if(!bitMember->dataType)
11703 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11704 type = bitMember->dataType;
11705 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11707 if(!type->__anon1._class->__anon1.registered->dataType)
11708 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11709 type = type->__anon1._class->__anon1.registered->dataType;
11718 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11726 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11735 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11743 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11751 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11759 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11764 bits |= part << bitMember->pos;
11770 if(_class && _class->type == 3)
11772 ComputeExpression(member->initializer->__anon1.exp);
11773 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11775 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11785 if(_class && _class->type == 2)
11787 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11792 FreeInstance(inst);
11796 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11798 if(exp->__anon1.op.op == SIZEOF)
11800 FreeExpContents(exp);
11802 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11806 if(!exp->__anon1.op.exp1)
11808 switch(exp->__anon1.op.op)
11812 struct Expression * exp2 = exp->__anon1.op.exp2;
11814 exp->__anon1.op.exp2 = (((void *)0));
11815 FreeExpContents(exp);
11816 FreeType(exp->expType);
11817 FreeType(exp->destType);
11819 ((exp2 ? __extension__ ({
11820 void * __ecerePtrToDelete = (exp2);
11822 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
11823 }) : 0), exp2 = 0);
11829 FreeExpContents(exp);
11830 op1->ops.Neg(exp, op1);
11834 if(op1->ops.BitNot)
11836 FreeExpContents(exp);
11837 op1->ops.BitNot(exp, op1);
11843 FreeExpContents(exp);
11844 op1->ops.Not(exp, op1);
11851 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11853 if(Promote(op2, op1->kind, op1->type->isSigned))
11854 op2->kind = op1->kind, op2->ops = op1->ops;
11855 else if(Promote(op1, op2->kind, op2->type->isSigned))
11856 op1->kind = op2->kind, op1->ops = op2->ops;
11858 switch(exp->__anon1.op.op)
11863 FreeExpContents(exp);
11864 op1->ops.Add(exp, op1, op2);
11870 FreeExpContents(exp);
11871 op1->ops.Sub(exp, op1, op2);
11877 FreeExpContents(exp);
11878 op1->ops.Mul(exp, op1, op2);
11884 FreeExpContents(exp);
11885 op1->ops.Div(exp, op1, op2);
11891 FreeExpContents(exp);
11892 op1->ops.Mod(exp, op1, op2);
11896 if(exp->__anon1.op.exp2)
11898 if(op1->ops.BitAnd)
11900 FreeExpContents(exp);
11901 op1->ops.BitAnd(exp, op1, op2);
11908 FreeExpContents(exp);
11909 op1->ops.BitOr(exp, op1, op2);
11913 if(op1->ops.BitXor)
11915 FreeExpContents(exp);
11916 op1->ops.BitXor(exp, op1, op2);
11920 if(op1->ops.LShift)
11922 FreeExpContents(exp);
11923 op1->ops.LShift(exp, op1, op2);
11927 if(op1->ops.RShift)
11929 FreeExpContents(exp);
11930 op1->ops.RShift(exp, op1, op2);
11936 FreeExpContents(exp);
11937 op1->ops.Equ(exp, op1, op2);
11943 FreeExpContents(exp);
11944 op1->ops.Nqu(exp, op1, op2);
11950 FreeExpContents(exp);
11951 op1->ops.And(exp, op1, op2);
11957 FreeExpContents(exp);
11958 op1->ops.Or(exp, op1, op2);
11964 FreeExpContents(exp);
11965 op1->ops.Grt(exp, op1, op2);
11971 FreeExpContents(exp);
11972 op1->ops.Sma(exp, op1, op2);
11976 if(op1->ops.GrtEqu)
11978 FreeExpContents(exp);
11979 op1->ops.GrtEqu(exp, op1, op2);
11983 if(op1->ops.SmaEqu)
11985 FreeExpContents(exp);
11986 op1->ops.SmaEqu(exp, op1, op2);
11994 void ApplyAnyObjectLogic(struct Expression * e)
11996 struct Type * destType = e->destType;
11998 if(destType && (destType->classObjectType == 3))
12000 if(e && e->expType)
12002 struct Type * type = e->expType;
12003 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
12005 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
12007 _class = type->__anon1._class->__anon1.registered;
12009 else if(type->kind == 19)
12011 _class = FindClass("ecere::com::Class")->__anon1.registered;
12015 char string[1024] = "";
12016 struct Symbol * classSym;
12018 PrintTypeNoConst(type, string, 0, 1);
12019 classSym = FindClass(string);
12021 _class = classSym->__anon1.registered;
12023 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)))
12025 if(!_class || strcmp(_class->fullName, "char *"))
12027 struct Expression * checkedExp = e, * newExp;
12029 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12031 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12033 if(checkedExp->type == 23)
12035 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12038 checkedExp = (*checkedExp->__anon1.list).last;
12040 else if(checkedExp->type == 11)
12041 checkedExp = checkedExp->__anon1.cast.exp;
12043 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
12045 newExp = checkedExp->__anon1.op.exp2;
12046 checkedExp->__anon1.op.exp2 = (((void *)0));
12047 FreeExpContents(checkedExp);
12048 if(e->expType && e->expType->passAsTemplate)
12052 ComputeTypeSize(e->expType);
12053 sprintf(size, "%d", e->expType->size);
12054 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))))));
12056 ReplaceExpContents(checkedExp, newExp);
12057 e->byReference = 1;
12059 else if(!e->byReference || (_class && _class->type == 5))
12061 struct Expression * checkedExp;
12064 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;
12066 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
12068 struct Context * context = PushContext();
12069 struct Declarator * decl;
12070 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12071 char typeString[1024];
12072 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12074 typeString[0] = '\0';
12076 newExp->prev = (((void *)0));
12077 newExp->next = (((void *)0));
12078 newExp->expType = (((void *)0));
12079 PrintTypeNoConst(e->expType, typeString, 0, 1);
12080 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12081 newExp->destType = ProcessType(specs, decl);
12082 curContext = context;
12086 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
12089 sprintf(name, "__internalValue%03X", internalValueCounter++);
12090 if(!curCompound->__anon1.compound.declarations)
12091 curCompound->__anon1.compound.declarations = MkList();
12092 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
12093 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
12094 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
12095 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
12098 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
12100 struct Type * type = e->destType;
12102 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12103 CopyTypeInto(e->destType, type);
12104 e->destType->refCount = 1;
12105 e->destType->classObjectType = 0;
12108 e->__anon1.compound->__anon1.compound.context = context;
12109 PopContext(context);
12110 curContext = context->parent;
12114 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12116 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12118 if(checkedExp->type == 23)
12120 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12123 checkedExp = (*checkedExp->__anon1.list).last;
12125 else if(checkedExp->type == 11)
12126 checkedExp = checkedExp->__anon1.cast.exp;
12129 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12131 *operand = *checkedExp;
12132 __ecereMethod_Expression_Clear(checkedExp);
12133 checkedExp->destType = ProcessTypeString("void *", 0);
12134 checkedExp->expType = checkedExp->destType;
12135 checkedExp->destType->refCount++;
12136 checkedExp->type = 4;
12137 checkedExp->__anon1.op.op = '&';
12138 checkedExp->__anon1.op.exp1 = (((void *)0));
12139 checkedExp->__anon1.op.exp2 = operand;
12148 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))))
12150 if(e->expType->classObjectType && destType && destType->classObjectType)
12156 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12159 thisExp->prev = (((void *)0));
12160 thisExp->next = (((void *)0));
12161 __ecereMethod_Expression_Clear(e);
12163 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
12164 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
12165 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
12167 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12168 CopyTypeInto(e->expType, thisExp->expType);
12169 e->expType->byReference = 0;
12170 e->expType->refCount = 1;
12171 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))
12173 e->expType->classObjectType = 0;
12178 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
12180 if(destType->kind == 14)
12182 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
12184 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))
12186 unsigned int byReference = e->expType->byReference;
12187 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12188 struct Declarator * decl;
12189 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12190 char typeString[1024];
12191 struct Type * type;
12192 int backupClassObjectType;
12193 unsigned int backupByReference;
12195 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
12199 backupClassObjectType = type->classObjectType;
12200 backupByReference = type->byReference;
12201 type->classObjectType = 0;
12202 type->byReference = 0;
12203 typeString[0] = '\0';
12204 PrintType(type, typeString, 0, 1);
12205 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12206 type->classObjectType = backupClassObjectType;
12207 type->byReference = backupByReference;
12209 thisExp->prev = (((void *)0));
12210 thisExp->next = (((void *)0));
12211 __ecereMethod_Expression_Clear(e);
12212 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)))
12214 unsigned int passAsTemplate = thisExp->destType->passAsTemplate;
12217 destType->refCount++;
12219 e->__anon1.op.op = '*';
12220 e->__anon1.op.exp1 = (((void *)0));
12221 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
12222 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12223 CopyTypeInto(t, thisExp->destType);
12224 t->passAsTemplate = 0;
12225 FreeType(thisExp->destType);
12226 thisExp->destType = t;
12227 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12228 CopyTypeInto(t, destType);
12229 t->passAsTemplate = passAsTemplate;
12230 FreeType(destType);
12232 destType->refCount = 0;
12233 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12234 CopyTypeInto(e->expType, type);
12235 if(type->passAsTemplate)
12237 e->expType->classObjectType = 0;
12238 e->expType->passAsTemplate = 0;
12240 e->expType->byReference = 0;
12241 e->expType->refCount = 1;
12246 e->__anon1.cast.typeName = MkTypeName(specs, decl);
12247 e->__anon1.cast.exp = thisExp;
12248 e->byReference = 1;
12253 FreeType(e->destType);
12254 e->destType = destType;
12255 destType->refCount++;
12260 void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module)
12262 struct __ecereNameSpace__ecere__com__Class * _class;
12263 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
12265 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
12266 ComputeModuleClasses(subModule->data);
12267 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->classes.first; _class; _class = _class->next)
12268 ComputeClassMembers(_class, 0);
12271 int ComputeTypeSize(struct Type * type)
12273 unsigned int size = type ? type->size : 0;
12275 if(!size && type && !type->computing)
12277 type->computing = 1;
12281 type->alignment = size = sizeof(char);
12284 type->alignment = size = sizeof(char);
12287 type->alignment = size = sizeof(int);
12290 type->alignment = size = sizeof(long long);
12293 type->alignment = size = targetBits / 8;
12294 type->pointerAlignment = 1;
12297 type->alignment = size = targetBits / 8;
12298 type->pointerAlignment = 1;
12301 type->alignment = size = sizeof(long);
12304 type->alignment = size = sizeof(short);
12307 type->alignment = size = sizeof(float);
12310 type->alignment = size = sizeof(double);
12314 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
12316 if(_class && _class->type == 1)
12318 ComputeClassMembers(_class, 0);
12319 type->alignment = _class->structAlignment;
12320 type->pointerAlignment = (unsigned int)_class->pointerAlignment;
12321 size = _class->structSize;
12322 if(type->alignment && size % type->alignment)
12323 size += type->alignment - (size % type->alignment);
12325 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
12327 if(!_class->dataType)
12328 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12329 size = type->alignment = ComputeTypeSize(_class->dataType);
12333 size = type->alignment = targetBits / 8;
12334 type->pointerAlignment = 1;
12340 size = type->alignment = targetBits / 8;
12341 type->pointerAlignment = 1;
12344 if(type->__anon1.__anon4.arraySizeExp)
12346 ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
12347 ComputeExpression(type->__anon1.__anon4.arraySizeExp);
12348 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)))
12350 struct Location oldLoc = yylloc;
12351 char expression[10240];
12353 expression[0] = '\0';
12354 type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
12355 yylloc = type->__anon1.__anon4.arraySizeExp->loc;
12357 PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
12358 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
12361 GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
12363 else if(type->__anon1.__anon4.enumClass)
12365 if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
12367 type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
12370 type->__anon1.__anon4.arraySize = 0;
12374 type->__anon1.__anon4.arraySize = 0;
12376 size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
12377 if(type->__anon1.type)
12379 type->alignment = type->__anon1.type->alignment;
12380 type->pointerAlignment = type->__anon1.type->pointerAlignment;
12385 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12387 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12389 if(symbol && symbol->type)
12391 ComputeTypeSize(symbol->type);
12392 size = symbol->type->size;
12397 struct Type * member;
12399 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12401 int __simpleStruct0, __simpleStruct1;
12402 unsigned int addSize = ComputeTypeSize(member);
12404 member->offset = size;
12405 if(member->alignment && size % member->alignment)
12406 member->offset += member->alignment - (size % member->alignment);
12407 size = member->offset;
12408 if(member->pointerAlignment && type->size <= 4)
12409 type->pointerAlignment = 1;
12410 else if(!member->pointerAlignment && member->alignment >= 8)
12411 type->pointerAlignment = 0;
12412 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12415 if(type->alignment && size % type->alignment)
12416 size += type->alignment - (size % type->alignment);
12422 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12424 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12426 if(symbol && symbol->type)
12428 ComputeTypeSize(symbol->type);
12429 size = symbol->type->size;
12430 type->alignment = symbol->type->alignment;
12435 struct Type * member;
12437 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12439 int __simpleStruct0, __simpleStruct1;
12440 unsigned int addSize = ComputeTypeSize(member);
12442 member->offset = size;
12443 if(member->alignment && size % member->alignment)
12444 member->offset += member->alignment - (size % member->alignment);
12445 size = member->offset;
12446 if(member->pointerAlignment && type->size <= 4)
12447 type->pointerAlignment = 1;
12448 else if(!member->pointerAlignment && member->alignment >= 8)
12449 type->pointerAlignment = 0;
12450 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12451 size = ((size > addSize) ? size : addSize);
12453 if(type->alignment && size % type->alignment)
12454 size += type->alignment - (size % type->alignment);
12460 struct TemplateParameter * param = type->__anon1.templateParameter;
12461 struct Type * baseType = ProcessTemplateParameterType(param);
12465 size = ComputeTypeSize(baseType);
12466 type->alignment = baseType->alignment;
12467 type->pointerAlignment = baseType->pointerAlignment;
12470 type->alignment = size = sizeof(uint64);
12475 type->alignment = size = sizeof(enum
12483 type->alignment = size = targetBits / 8;
12484 type->pointerAlignment = 1;
12489 type->computing = 0;
12494 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl)
12496 struct External * external = (((void *)0));
12497 struct Symbol * classSym = FindClass(name);
12498 struct __ecereNameSpace__ecere__sys__OldList * curDeclarations = (((void *)0));
12500 if(!inCompiler || !classSym)
12501 return (((void *)0));
12502 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
12503 return (((void *)0));
12504 if(!classSym->__anon1.registered || (classSym->__anon1.registered->type == 0 && classSym->__anon1.registered->structSize && classSym->__anon1.registered->base && classSym->__anon1.registered->base->base))
12505 _DeclareStruct(neededBy, "ecere::com::Instance", 0, 1, fwdDecl);
12506 external = classSym->__anon2.__anon1.structExternal;
12507 if(external && external->__anon1.declaration)
12509 struct Specifier * spec;
12511 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12512 if(spec->type == 3 || spec->type == 4)
12514 curDeclarations = spec->__anon1.__anon2.definitions;
12518 if(classSym->__anon1.registered && !classSym->declaring && classSym->imported && (!classSym->declaredStructSym || (classSym->__anon1.registered->type == 5 && !skipNoHead && external && !curDeclarations)))
12520 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12521 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
12522 char structName[1024];
12523 unsigned int addedPadding = 0;
12524 struct Specifier * curSpec = (((void *)0));
12526 classSym->declaring++;
12527 if(strchr(classSym->string, '<'))
12529 if(classSym->__anon1.registered->templateClass)
12530 external = _DeclareStruct(neededBy, classSym->__anon1.registered->templateClass->fullName, skipNoHead, needDereference, fwdDecl);
12531 classSym->declaring--;
12535 FullClassNameCat(structName, name, 0);
12536 classSym->declaredStructSym = 1;
12537 if(!external || (classSym->__anon1.registered->type == 5 && !skipNoHead && !curDeclarations))
12539 unsigned int add = 0;
12543 external = MkExternalDeclaration((((void *)0)));
12544 classSym->__anon2.__anon1.structExternal = external;
12545 external->symbol = classSym;
12550 declarations = MkList();
12551 AddMembers(external, declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
12553 if(external->__anon1.declaration)
12555 struct Specifier * spec;
12557 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12558 if(spec->type == 3 || spec->type == 4)
12561 curDeclarations = spec->__anon1.__anon2.definitions;
12565 if(declarations && (!(*declarations).count || ((*declarations).count == 1 && addedPadding)))
12567 FreeList(declarations, (void *)(FreeClassDef));
12568 declarations = (((void *)0));
12570 if(classSym->__anon1.registered->type != 5 && !declarations)
12572 FreeExternal(external);
12573 external = (((void *)0));
12574 classSym->__anon2.__anon1.structExternal = (((void *)0));
12579 curSpec->__anon1.__anon2.definitions = declarations;
12582 specifiers = MkList();
12583 declarators = MkList();
12584 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
12585 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12588 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12591 classSym->declaring--;
12593 else if(!classSym->declaredStructSym && classSym->__anon2.__anon1.structExternal)
12595 classSym->declaredStructSym = 1;
12596 if(classSym->__anon1.registered)
12597 DeclareMembers(classSym->__anon2.__anon1.structExternal, classSym->__anon1.registered, 0);
12598 if(classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
12600 struct Specifier * spec;
12602 for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
12604 if(spec->__anon1.__anon2.definitions)
12605 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
12609 if(inCompiler && neededBy && (external || !classSym->imported))
12613 classSym->__anon2.__anon1.structExternal = external = MkExternalDeclaration((((void *)0)));
12614 external->symbol = classSym;
12615 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12617 if(reachedPass15 && !external->__anon1.declaration && classSym->__anon1.registered && classSym->__anon1.registered->type == 5)
12619 char structName[1024];
12620 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12623 FullClassNameCat(structName, name, 0);
12624 specifiers = MkList();
12625 declarators = MkList();
12626 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))));
12627 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12631 struct External * e = external->fwdDecl ? external->fwdDecl : external;
12633 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)e->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
12634 __ecereMethod_External_CreateUniqueEdge(neededBy, e, !needDereference && !external->fwdDecl);
12637 __ecereMethod_External_CreateUniqueEdge(neededBy, external, !needDereference);
12642 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)
12644 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
12645 unsigned int found = 0;
12646 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
12647 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
12648 unsigned int freeType = 0;
12650 yylloc = member->loc;
12655 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
12659 dataMember = *curMember;
12665 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
12666 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
12667 int _subMemberStackPos = 0;
12670 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, ident->string, privateModule, _subMemberStack, &_subMemberStackPos);
12673 dataMember = thisMember;
12674 if(curMember && thisMember->memberAccess == 1)
12676 *curMember = thisMember;
12677 *curClass = thisMember->_class;
12678 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
12679 *subMemberStackPos = _subMemberStackPos;
12685 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
12686 if(method && method->type == 1)
12689 method = (((void *)0));
12694 struct Type * type = (((void *)0));
12698 if(!dataMember->dataType && dataMember->dataTypeString)
12700 struct Context * context = SetupTemplatesContext(_class);
12702 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
12703 FinishTemplatesContext(context);
12705 type = dataMember->dataType;
12709 if(!method->dataType)
12710 ProcessMethodType(method);
12711 type = method->dataType;
12713 if(ident && ident->next)
12715 for(ident = ident->next; ident && type; ident = ident->next)
12717 if(type->kind == 8)
12719 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
12721 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
12723 type = dataMember->dataType;
12725 else if(type->kind == 9 || type->kind == 10)
12727 struct Type * memberType;
12729 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
12731 if(!strcmp(memberType->name, ident->string))
12740 if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
12743 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
12744 struct __ecereNameSpace__ecere__com__Class * sClass;
12746 for(sClass = _class; sClass; sClass = sClass->base)
12749 if(sClass->templateClass)
12750 sClass = sClass->templateClass;
12751 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
12753 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
12755 for(sClass = sClass->base; sClass; sClass = sClass->base)
12757 if(sClass->templateClass)
12758 sClass = sClass->templateClass;
12759 id += sClass->templateParams.count;
12770 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
12772 if(arg.__anon1.__anon1.dataTypeString)
12774 unsigned int constant = type->constant;
12776 type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
12777 if(type->kind == 8 && constant)
12778 type->constant = 1;
12779 else if(type->kind == 13)
12781 struct Type * t = type->__anon1.type;
12783 while(t->kind == 13)
12784 t = t->__anon1.type;
12786 t->constant = constant;
12789 if(type && _class->templateClass)
12790 type->passAsTemplate = 1;
12797 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
12799 struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
12800 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
12801 int paramCount = 0;
12802 int lastParam = -1;
12803 char templateString[1024];
12804 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
12806 sprintf(templateString, "%s<", expClass->templateClass->fullName);
12807 for(cClass = expClass; cClass; cClass = cClass->base)
12811 if(cClass->templateClass)
12812 cClass = cClass->templateClass;
12813 for(param = cClass->templateParams.first; param; param = param->next)
12816 struct __ecereNameSpace__ecere__com__Class * sClass;
12817 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
12819 for(sClass = cClass->base; sClass; sClass = sClass->base)
12821 if(sClass->templateClass)
12822 sClass = sClass->templateClass;
12823 id += sClass->templateParams.count;
12825 arg = expClass->templateArgs[id];
12826 for(sClass = _class; sClass; sClass = sClass->base)
12828 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
12830 struct __ecereNameSpace__ecere__com__Class * nextClass;
12832 if(sClass->templateClass)
12833 sClass = sClass->templateClass;
12834 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
12836 if(nextClass->templateClass)
12837 nextClass = nextClass->templateClass;
12838 p += nextClass->templateParams.count;
12840 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
12842 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
12844 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12846 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
12847 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
12854 char argument[256];
12856 argument[0] = '\0';
12857 switch(param->type)
12861 char expString[1024];
12862 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12863 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
12864 struct Expression * exp;
12865 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
12867 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
12868 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
12869 ProcessExpressionType(exp);
12870 ComputeExpression(exp);
12871 expString[0] = '\0';
12872 PrintExpression(exp, expString);
12873 strcat(argument, expString);
12874 FreeExpression(exp);
12879 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
12884 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12885 strcat(argument, arg.__anon1.__anon1.dataTypeString);
12892 strcat(templateString, ", ");
12893 if(lastParam != p - 1)
12895 strcat(templateString, param->name);
12896 strcat(templateString, " = ");
12898 strcat(templateString, argument);
12907 int len = strlen(templateString);
12909 if(templateString[len - 1] == '<')
12913 if(templateString[len - 1] == '>')
12914 templateString[len++] = ' ';
12915 templateString[len++] = '>';
12917 templateString[len++] = '\0';
12920 struct Context * context = SetupTemplatesContext(_class);
12924 type = ProcessTypeString(templateString, 0);
12926 FinishTemplatesContext(context);
12929 if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
12931 ProcessExpressionType(member->initializer->__anon1.exp);
12932 if(!member->initializer->__anon1.exp->expType)
12936 char expString[10240];
12938 expString[0] = '\0';
12939 PrintExpression(member->initializer->__anon1.exp, expString);
12940 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
12941 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
12944 else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
12946 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
12949 else if(member->initializer)
12951 ProcessInitializer(member->initializer, type);
12958 if(_class && _class->type == 3)
12960 if(member->initializer)
12962 struct Type * type = MkClassType(_class->fullName);
12964 ProcessInitializer(member->initializer, type);
12970 if(member->initializer)
12972 ProcessInitializer(member->initializer, (((void *)0)));
12978 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12982 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12984 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
12988 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
12993 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
12995 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
12997 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)))
12999 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
13001 if(_class->type == 4)
13003 struct __ecereNameSpace__ecere__sys__OldList converts =
13007 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13010 if(!_class->symbol)
13011 _class->symbol = FindClass(_class->fullName);
13012 type->__anon1._class = _class->symbol;
13013 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))
13015 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13016 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13020 struct __ecereNameSpace__ecere__com__Class * baseClass;
13022 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
13024 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
13026 for(value = e->values.first; value; value = value->next)
13028 if(!strcmp(value->name, string))
13033 FreeType(sourceExp->expType);
13034 sourceExp->isConstant = 1;
13035 sourceExp->expType = MkClassType(baseClass->fullName);
13036 if(inCompiler || inPreCompiler || inDebugger)
13038 char constant[256];
13040 FreeExpContents(sourceExp);
13041 sourceExp->type = 2;
13042 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
13043 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13045 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
13046 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13048 while(converts.first)
13050 struct Conversion * convert = converts.first;
13052 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
13053 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
13055 ((type ? __extension__ ({
13056 void * __ecerePtrToDelete = (type);
13058 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13059 }) : 0), type = 0);
13066 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
13067 ((type ? __extension__ ({
13068 void * __ecerePtrToDelete = (type);
13070 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13071 }) : 0), type = 0);
13074 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)))
13075 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
13080 void ComputeExpression(struct Expression * exp)
13086 struct Identifier * id = exp->__anon1.__anon1.identifier;
13088 if(id && exp->isConstant && !inCompiler && !inPreCompiler && !inDebugger)
13090 struct __ecereNameSpace__ecere__com__Class * c = (exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
13092 if(c && c->type == 4)
13094 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13098 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13099 struct __ecereNameSpace__ecere__com__EnumClassData * e = (c ? ((void *)(((char *)c->data) + enumClass->offsetClass)) : (((void *)0)));
13101 for(value = e->values.first; value; value = value->next)
13103 if(!strcmp(value->name, id->string))
13108 const char * dts = c->dataTypeString;
13110 FreeExpContents(exp);
13112 exp->__anon1.__anon1.constant = (dts && (!strcmp(dts, "int") || !strcmp(dts, "int64") || !strcmp(dts, "short") || !strcmp(dts, "char"))) ? PrintInt64(value->data) : PrintUInt64(value->data);
13121 ComputeInstantiation(exp);
13126 struct Expression * exp1, * exp2 = (((void *)0));
13127 struct Operand op1 =
13134 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
13137 struct Operand op2 =
13144 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
13148 if(exp->__anon1.op.exp2)
13150 struct Expression * e = exp->__anon1.op.exp2;
13152 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
13154 if(e->type == 5 || e->type == 32 || e->type == 23)
13157 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13159 e = (*e->__anon1.list).last;
13162 if(exp->__anon1.op.op == 261 && e && e->expType)
13164 if(e->type == 3 && e->__anon1.__anon2.string)
13166 char * string = e->__anon1.__anon2.string;
13167 int len = strlen(string);
13168 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
13170 len = UnescapeString(tmp, string + 1, len - 2);
13171 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
13172 FreeExpContents(exp);
13174 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
13178 struct Type * type = e->expType;
13181 FreeExpContents(exp);
13183 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13189 ComputeExpression(exp->__anon1.op.exp2);
13191 if(exp->__anon1.op.exp1)
13193 ComputeExpression(exp->__anon1.op.exp1);
13194 exp1 = exp->__anon1.op.exp1;
13195 exp2 = exp->__anon1.op.exp2;
13196 op1 = GetOperand(exp1);
13198 op1.type->refCount++;
13201 op2 = GetOperand(exp2);
13203 op2.type->refCount++;
13208 exp1 = exp->__anon1.op.exp2;
13209 op1 = GetOperand(exp1);
13211 op1.type->refCount++;
13213 CallOperator(exp, exp1, exp2, &op1, &op2);
13215 FreeType(op1.type);
13217 FreeType(op2.type);
13223 struct Expression * e, * n;
13225 for(e = (*exp->__anon1.list).first; e; e = n)
13230 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
13231 struct Expression * prev = exp->prev;
13232 struct Expression * next = exp->next;
13234 if(exp->expType && exp->expType->kind == 8 && (!e->expType || e->expType->kind != 8))
13236 FreeType(e->expType);
13237 e->expType = exp->expType;
13238 e->expType->refCount++;
13240 ComputeExpression(e);
13241 FreeType(exp->expType);
13242 FreeType(exp->destType);
13246 ((e ? __extension__ ({
13247 void * __ecerePtrToDelete = (e);
13249 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13251 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
13262 struct Expression * memberExp = exp->__anon1.member.exp;
13263 struct Identifier * memberID = exp->__anon1.member.member;
13264 struct Type * type;
13266 ComputeExpression(exp->__anon1.member.exp);
13267 type = exp->__anon1.member.exp->expType;
13270 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)));
13271 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13272 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13273 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
13275 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
13276 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
13280 struct Symbol * classSym;
13283 PrintTypeNoConst(type, string, 0, 1);
13284 classSym = FindClass(string);
13285 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13287 if(exp->__anon1.member.member)
13289 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
13291 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
13293 if(!prop && !member && _class && exp->__anon1.member.member)
13295 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
13297 convertTo = _class;
13298 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13299 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
13305 struct Type * type = prop->dataType;
13307 if(_class->type == 3)
13309 if(type->kind == 8)
13311 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13313 if(_class->type == 3)
13315 if(!_class->dataType)
13316 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13317 type = _class->dataType;
13325 float (* Get)(float) = (void *)prop->Get;
13327 GetFloat(exp->__anon1.member.exp, &value);
13328 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
13335 double (* Get)(double);
13337 GetDouble(exp->__anon1.member.exp, &value);
13339 Get = (void *)prop->Set;
13341 Get = (void *)prop->Get;
13342 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
13352 struct Expression * value = exp->__anon1.member.exp;
13353 struct Type * type;
13355 if(!prop->dataType)
13356 ProcessPropertyType(prop);
13357 type = prop->dataType;
13361 else if(_class->type == 1)
13367 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13369 if(propertyClass->type == 1 && value->type == 1)
13371 void (* Set)(void *, void *) = (void *)prop->Set;
13373 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13374 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13375 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13376 exp->__anon1.instance->loc = exp->loc;
13378 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
13379 PopulateInstance(exp->__anon1.instance);
13386 void (* Set)(void *, int) = (void *)prop->Set;
13388 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13389 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13390 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13391 exp->__anon1.instance->loc = exp->loc;
13393 GetInt(value, &intValue);
13394 Set(exp->__anon1.instance->data, intValue);
13395 PopulateInstance(exp->__anon1.instance);
13400 long long intValue;
13401 void (* Set)(void *, long long) = (void *)prop->Set;
13403 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13404 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13405 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13406 exp->__anon1.instance->loc = exp->loc;
13408 GetInt64(value, &intValue);
13409 Set(exp->__anon1.instance->data, intValue);
13410 PopulateInstance(exp->__anon1.instance);
13416 void (* Set)(void *, intptr_t) = (void *)prop->Set;
13418 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13419 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13420 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13421 exp->__anon1.instance->loc = exp->loc;
13423 GetIntPtr(value, &intValue);
13424 Set(exp->__anon1.instance->data, intValue);
13425 PopulateInstance(exp->__anon1.instance);
13431 void (* Set)(void *, ssize_t) = (void *)prop->Set;
13433 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13434 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13435 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13436 exp->__anon1.instance->loc = exp->loc;
13438 GetIntSize(value, &intValue);
13439 Set(exp->__anon1.instance->data, intValue);
13440 PopulateInstance(exp->__anon1.instance);
13446 void (* Set)(void *, float) = (void *)prop->Set;
13448 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13449 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13450 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13451 exp->__anon1.instance->loc = exp->loc;
13453 GetFloat(value, &floatValue);
13454 Set(exp->__anon1.instance->data, floatValue);
13455 PopulateInstance(exp->__anon1.instance);
13460 double doubleValue;
13461 void (* Set)(void *, double) = (void *)prop->Set;
13463 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13464 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13465 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13466 exp->__anon1.instance->loc = exp->loc;
13468 GetDouble(value, &doubleValue);
13469 Set(exp->__anon1.instance->data, doubleValue);
13470 PopulateInstance(exp->__anon1.instance);
13475 else if(_class->type == 2)
13481 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13483 if(propertyClass->type == 1 && value->__anon1.instance->data)
13485 unsigned int (* Set)(void *) = (void *)prop->Set;
13486 unsigned int bits = Set(value->__anon1.instance->data);
13488 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13492 else if(_class->type == 2)
13494 unsigned int value;
13495 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
13498 GetUInt(exp->__anon1.member.exp, &value);
13500 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13509 if(_class->type == 2)
13511 unsigned int value;
13513 GetUInt(exp->__anon1.member.exp, &value);
13518 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13520 if(_class->type == 1)
13522 void (* Get)(unsigned int, void *) = (void *)prop->Get;
13524 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13525 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13526 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13527 exp->__anon1.instance->loc = exp->loc;
13529 Get(value, exp->__anon1.instance->data);
13530 PopulateInstance(exp->__anon1.instance);
13532 else if(_class->type == 2)
13534 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
13535 uint64 bits = Get(value);
13537 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
13544 else if(_class->type == 1)
13546 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
13552 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13554 if(_class->type == 1 && value)
13556 void (* Get)(void *, void *) = (void *)prop->Get;
13558 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13559 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13560 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13561 exp->__anon1.instance->loc = exp->loc;
13563 Get(value, exp->__anon1.instance->data);
13564 PopulateInstance(exp->__anon1.instance);
13575 exp->isConstant = 0;
13584 FreeExpression(memberExp);
13585 FreeIdentifier(memberID);
13591 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
13593 FreeExpContents(exp);
13594 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13601 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
13603 if(classSym && classSym->__anon1.registered)
13605 if(classSym->__anon1.registered->fixed)
13607 FreeSpecifier(exp->__anon1._class);
13608 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
13613 char className[1024];
13615 strcpy(className, "__ecereClass_");
13616 FullClassNameCat(className, classSym->string, 1);
13617 DeclareClass(curExternal, classSym, className);
13618 FreeExpContents(exp);
13620 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
13621 exp->__anon1.member.member = MkIdentifier("structSize");
13628 struct Type * type;
13629 struct Expression * e = exp;
13631 if(exp->type == 11)
13633 if(exp->__anon1.cast.exp)
13634 ComputeExpression(exp->__anon1.cast.exp);
13635 e = exp->__anon1.cast.exp;
13637 if(e && exp->expType)
13639 type = exp->expType;
13640 if(type->kind == 8)
13642 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13644 if(_class && (_class->type == 3 || _class->type == 2))
13646 if(!_class->dataType)
13647 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13648 type = _class->dataType;
13659 if(GetChar(e, &value))
13661 FreeExpContents(exp);
13662 exp->__anon1.__anon1.constant = PrintChar(value);
13668 unsigned char value = 0;
13670 if(GetUChar(e, &value))
13672 FreeExpContents(exp);
13673 exp->__anon1.__anon1.constant = PrintUChar(value);
13683 if(GetShort(e, &value))
13685 FreeExpContents(exp);
13686 exp->__anon1.__anon1.constant = PrintShort(value);
13692 unsigned short value = 0;
13694 if(GetUShort(e, &value))
13696 FreeExpContents(exp);
13697 exp->__anon1.__anon1.constant = PrintUShort(value);
13707 if(GetInt(e, &value))
13709 FreeExpContents(exp);
13710 exp->__anon1.__anon1.constant = PrintInt(value);
13716 unsigned int value = 0;
13718 if(GetUInt(e, &value))
13720 FreeExpContents(exp);
13721 exp->__anon1.__anon1.constant = PrintUInt(value);
13729 long long value = 0;
13731 if(GetInt64(e, &value))
13733 FreeExpContents(exp);
13734 exp->__anon1.__anon1.constant = PrintInt64(value);
13742 if(GetUInt64(e, &value))
13744 FreeExpContents(exp);
13745 exp->__anon1.__anon1.constant = PrintUInt64(value);
13753 intptr_t value = 0;
13755 if(GetIntPtr(e, &value))
13757 FreeExpContents(exp);
13758 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13764 uintptr_t value = 0;
13766 if(GetUIntPtr(e, &value))
13768 FreeExpContents(exp);
13769 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13779 if(GetIntSize(e, &value))
13781 FreeExpContents(exp);
13782 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13790 if(GetUIntSize(e, &value))
13792 FreeExpContents(exp);
13793 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13802 if(GetFloat(e, &value))
13804 FreeExpContents(exp);
13805 exp->__anon1.__anon1.constant = PrintFloat(value);
13814 if(GetDouble(e, &value))
13816 FreeExpContents(exp);
13817 exp->__anon1.__anon1.constant = PrintDouble(value);
13828 struct Operand op1 =
13835 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
13838 struct Operand op2 =
13845 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
13848 struct Operand op3 =
13855 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
13859 if(exp->__anon1.cond.exp)
13860 ComputeExpression((*exp->__anon1.cond.exp).last);
13861 if(exp->__anon1.cond.elseExp)
13862 ComputeExpression(exp->__anon1.cond.elseExp);
13863 if(exp->__anon1.cond.cond)
13864 ComputeExpression(exp->__anon1.cond.cond);
13865 op1 = GetOperand(exp->__anon1.cond.cond);
13867 op1.type->refCount++;
13868 op2 = GetOperand((*exp->__anon1.cond.exp).last);
13870 op2.type->refCount++;
13871 op3 = GetOperand(exp->__anon1.cond.elseExp);
13873 op3.type->refCount++;
13876 FreeExpContents(exp);
13877 op1.ops.Cond(exp, &op1, &op2, &op3);
13880 FreeType(op1.type);
13882 FreeType(op2.type);
13884 FreeType(op3.type);
13890 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
13892 struct __ecereNameSpace__ecere__com__Instance * module;
13894 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))
13896 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))
13898 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))
13900 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)
13902 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13908 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
13910 struct Type * source;
13911 struct Type * realDest = dest;
13912 struct Type * backupSourceExpType = (((void *)0));
13913 struct Expression * nbExp = GetNonBracketsExp(sourceExp);
13914 struct Expression * computedExp = nbExp;
13917 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)
13919 computedExp = CopyExpression(nbExp);
13920 ComputeExpression(computedExp);
13922 source = sourceExp->expType;
13923 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
13925 if(computedExp != nbExp)
13927 FreeExpression(computedExp);
13928 computedExp = nbExp;
13933 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
13935 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
13937 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
13939 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
13941 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
13943 if(sourceBase == destBase)
13945 if(computedExp != nbExp)
13947 FreeExpression(computedExp);
13948 computedExp = nbExp;
13957 struct __ecereNameSpace__ecere__sys__OldList * specs;
13958 unsigned int flag = 0;
13959 long long value = (((int)0x7fffffff));
13961 source->refCount++;
13962 if(computedExp->type == 2)
13964 if(source->isSigned)
13965 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13967 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13969 else if(computedExp->type == 4 && computedExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
13971 if(source->isSigned)
13972 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13974 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13976 if(computedExp != nbExp)
13978 FreeExpression(computedExp);
13979 computedExp = nbExp;
13981 if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "unichar"))
13984 source = __extension__ ({
13985 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13987 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
13990 if(dest->kind == 8)
13992 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
13994 if(_class && _class->type == 3)
13996 if(source->kind != 8)
13998 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13999 struct Type * tempDest, * tempSource;
14001 for(; _class->base->type != 1000; _class = _class->base)
14004 tempDest = tempType;
14005 tempType->kind = 8;
14006 if(!_class->symbol)
14007 _class->symbol = FindClass(_class->fullName);
14008 tempType->__anon1._class = _class->symbol;
14009 tempType->truth = dest->truth;
14010 if(tempType->__anon1._class)
14011 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14012 backupSourceExpType = sourceExp->expType;
14013 if(dest->passAsTemplate)
14015 sourceExp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14016 CopyTypeInto(sourceExp->expType, dest);
14017 sourceExp->expType->passAsTemplate = 0;
14021 sourceExp->expType = dest;
14025 ((tempType ? __extension__ ({
14026 void * __ecerePtrToDelete = (tempType);
14028 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14029 }) : 0), tempType = 0);
14032 if(_class && _class->type == 2 && source->kind != 8)
14034 if(!dest->__anon1._class->__anon1.registered->dataType)
14035 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
14036 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14039 FreeType(sourceExp->expType);
14040 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
14041 source->refCount++;
14044 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
14046 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14047 struct Declarator * decl;
14050 ReadString(string, sourceExp->__anon1.__anon2.string);
14051 decl = SpecDeclFromString(string, specs, (((void *)0)));
14052 FreeExpContents(sourceExp);
14053 FreeType(sourceExp->expType);
14054 sourceExp->type = 24;
14055 sourceExp->__anon1._classExp.specifiers = specs;
14056 sourceExp->__anon1._classExp.decl = decl;
14057 sourceExp->expType = dest;
14061 if(backupSourceExpType)
14062 FreeType(backupSourceExpType);
14066 else if(source->kind == 8)
14068 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
14070 if(_class && (_class->type == 3 || _class->type == 2))
14072 if(dest->kind != 8)
14074 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14075 struct Type * tempDest, * tempSource;
14077 if(!source->__anon1._class->__anon1.registered->dataType)
14078 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
14079 for(; _class->base->type != 1000; _class = _class->base)
14082 tempSource = tempType;
14083 tempType->kind = 8;
14084 tempType->__anon1._class = FindClass(_class->fullName);
14085 tempType->truth = source->truth;
14086 tempType->classObjectType = source->classObjectType;
14087 if(tempType->__anon1._class)
14088 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14089 if(conversions && conversions->last)
14091 ((struct Conversion *)conversions->last)->resultType = dest;
14094 FreeType(sourceExp->expType);
14095 sourceExp->expType = MkClassType(_class->fullName);
14096 sourceExp->expType->truth = source->truth;
14097 sourceExp->expType->classObjectType = source->classObjectType;
14098 if(!sourceExp->destType)
14100 FreeType(sourceExp->destType);
14101 sourceExp->destType = sourceExp->expType;
14102 if(sourceExp->expType)
14103 sourceExp->expType->refCount++;
14105 if(!_class->dataType)
14106 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14108 dest = MkClassType(source->__anon1._class->string);
14109 dest->truth = source->truth;
14110 dest->classObjectType = source->classObjectType;
14112 source = _class->dataType;
14113 source->refCount++;
14114 ((tempType ? __extension__ ({
14115 void * __ecerePtrToDelete = (tempType);
14117 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14118 }) : 0), tempType = 0);
14124 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14131 if(dest->kind == 8)
14133 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
14134 unsigned int fittingValue = 0;
14136 if(_class && _class->type == 4)
14138 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14139 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14141 if(c && value >= 0 && value <= c->largest)
14144 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
14146 if(_class->type == 0 || _class->type == 5)
14148 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14150 *newExp = *sourceExp;
14151 if(sourceExp->destType)
14152 sourceExp->destType->refCount++;
14153 if(sourceExp->expType)
14154 sourceExp->expType->refCount++;
14155 sourceExp->type = 11;
14156 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
14157 sourceExp->__anon1.cast.exp = newExp;
14158 FreeType(sourceExp->expType);
14159 sourceExp->expType = (((void *)0));
14160 ProcessExpressionType(sourceExp);
14163 FreeType(sourceExp->expType);
14164 sourceExp->expType = dest;
14169 if(backupSourceExpType)
14170 FreeType(backupSourceExpType);
14173 if(!_class->dataType)
14174 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14176 dest = _class->dataType;
14179 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))
14181 specs = MkListOne(MkSpecifier(DOUBLE));
14183 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))
14185 specs = MkListOne(MkSpecifier(FLOAT));
14187 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))
14190 if(!dest->isSigned)
14191 ListAdd(specs, MkSpecifier(UNSIGNED));
14192 ListAdd(specs, MkSpecifier(INT64));
14194 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
14197 if(!dest->isSigned)
14198 ListAdd(specs, MkSpecifier(UNSIGNED));
14199 ListAdd(specs, MkSpecifier(INT));
14201 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14204 if(!dest->isSigned)
14205 ListAdd(specs, MkSpecifier(UNSIGNED));
14206 ListAdd(specs, MkSpecifier(SHORT));
14208 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14211 if(!dest->isSigned)
14212 ListAdd(specs, MkSpecifier(UNSIGNED));
14213 ListAdd(specs, MkSpecifier(CHAR));
14219 if(backupSourceExpType)
14221 if(sourceExp->expType)
14222 FreeType(sourceExp->expType);
14223 sourceExp->expType = backupSourceExpType;
14228 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))
14230 specs = MkListOne(MkSpecifier(DOUBLE));
14232 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))
14234 specs = MkListOne(MkSpecifier(FLOAT));
14236 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
14239 ListAdd(specs, MkSpecifier(BOOL));
14241 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)))
14243 if(source->kind == 3)
14247 if(backupSourceExpType)
14248 FreeType(backupSourceExpType);
14254 if(!dest->isSigned)
14255 ListAdd(specs, MkSpecifier(UNSIGNED));
14256 ListAdd(specs, MkSpecifier(CHAR));
14259 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)))))
14261 if(source->kind == 3)
14265 if(backupSourceExpType)
14266 FreeType(backupSourceExpType);
14272 if(!dest->isSigned)
14273 ListAdd(specs, MkSpecifier(UNSIGNED));
14274 ListAdd(specs, MkSpecifier(SHORT));
14277 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
14280 if(!dest->isSigned)
14281 ListAdd(specs, MkSpecifier(UNSIGNED));
14282 ListAdd(specs, MkSpecifier(INT));
14284 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
14287 if(!dest->isSigned)
14288 ListAdd(specs, MkSpecifier(UNSIGNED));
14289 ListAdd(specs, MkSpecifier(INT64));
14291 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14293 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
14299 if(backupSourceExpType)
14301 if(sourceExp->expType)
14302 FreeType(sourceExp->expType);
14303 sourceExp->expType = backupSourceExpType;
14307 if(!flag && !sourceExp->opDestType)
14309 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14311 *newExp = *sourceExp;
14312 newExp->prev = (((void *)0));
14313 newExp->next = (((void *)0));
14314 if(sourceExp->destType)
14315 sourceExp->destType->refCount++;
14316 if(sourceExp->expType)
14317 sourceExp->expType->refCount++;
14318 sourceExp->type = 11;
14319 if(realDest->kind == 8)
14321 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
14322 FreeList(specs, (void *)(FreeSpecifier));
14325 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
14326 if(newExp->type == 4)
14328 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
14331 sourceExp->__anon1.cast.exp = newExp;
14332 FreeType(sourceExp->expType);
14333 sourceExp->expType = (((void *)0));
14334 ProcessExpressionType(sourceExp);
14337 FreeList(specs, (void *)(FreeSpecifier));
14340 if(backupSourceExpType)
14341 FreeType(backupSourceExpType);
14346 if(computedExp != nbExp)
14348 FreeExpression(computedExp);
14349 computedExp = nbExp;
14351 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
14352 sourceExp = (*sourceExp->__anon1.list).last;
14353 if(sourceExp->type == 0)
14355 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
14357 if(dest->kind == 8)
14359 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
14361 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
14362 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14366 for(; _class && _class->type == 4; _class = _class->base)
14368 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
14369 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14371 for(value = e->values.first; value; value = value->next)
14373 if(!strcmp(value->name, id->string))
14378 FreeType(sourceExp->expType);
14379 sourceExp->isConstant = 1;
14380 sourceExp->expType = MkClassType(_class->fullName);
14381 if(inCompiler || inPreCompiler || inDebugger)
14383 FreeExpContents(sourceExp);
14384 sourceExp->type = 2;
14385 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
14386 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
14388 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
14397 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
14408 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
14410 unsigned int result = 1;
14414 struct __ecereNameSpace__ecere__sys__OldList converts =
14418 struct Conversion * convert;
14420 if(destType->kind == 0)
14422 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
14426 for(convert = converts.first; convert; convert = convert->next)
14428 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
14432 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14433 int objectType = exp->expType ? exp->expType->classObjectType : 0;
14436 newExp->prev = (((void *)0));
14437 newExp->next = (((void *)0));
14438 newExp->destType = (((void *)0));
14442 exp->addedThis = 1;
14443 exp->__anon1.member.exp = newExp;
14444 FreeType(exp->__anon1.member.exp->expType);
14445 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
14446 exp->__anon1.member.exp->expType->classObjectType = objectType;
14447 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
14448 exp->__anon1.member.memberType = 1;
14449 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14452 exp->expType->refCount++;
14453 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14459 exp->addedThis = 1;
14460 exp->__anon1.member.exp = newExp;
14461 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)
14463 newExp->byReference = 1;
14465 FreeType(exp->__anon1.member.exp->expType);
14466 exp->__anon1.member.exp->expType = (((void *)0));
14467 if(convert->convert->dataType)
14469 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14470 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
14471 exp->__anon1.member.exp->expType->refCount = 1;
14472 exp->__anon1.member.exp->expType->classObjectType = objectType;
14473 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14475 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
14476 exp->__anon1.member.memberType = 4;
14477 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14479 if(convert->resultType)
14480 convert->resultType->refCount++;
14486 FreeType(exp->expType);
14489 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14490 if(exp->destType->casted)
14493 exp->expType->refCount++;
14497 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14498 if(exp->destType->casted)
14500 if(convert->resultType)
14501 convert->resultType->refCount++;
14505 if(exp->isConstant && inCompiler)
14506 ComputeExpression(exp);
14507 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
14509 if(!result && exp->expType && converts.count)
14511 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14513 if(!result && exp->expType && exp->destType)
14515 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))
14522 static void ProcessFunction(struct FunctionDefinition * function);
14524 void ProcessInstantiationType(struct Instantiation * inst)
14526 yylloc = inst->loc;
14529 struct MembersInit * members;
14530 struct Symbol * classSym;
14531 struct __ecereNameSpace__ecere__com__Class * _class;
14533 classSym = inst->_class->__anon1.__anon1.symbol;
14534 _class = classSym ? classSym->__anon1.registered : (((void *)0));
14535 if(!_class || _class->type != 5)
14536 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
14537 afterExternal = afterExternal ? afterExternal : curExternal;
14539 ProcessExpressionType(inst->exp);
14540 inst->isConstant = 1;
14543 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
14544 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
14545 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
14546 int subMemberStackPos = 0;
14548 for(members = (*inst->members).first; members; members = members->next)
14550 switch(members->type)
14555 static unsigned int instMethodID = 0;
14556 struct External * external = curExternal;
14557 struct Context * context = curContext;
14558 struct Declarator * declarator = members->__anon1.function->declarator;
14559 struct Identifier * nameID = GetDeclId(declarator);
14560 char * unmangled = nameID ? nameID->string : (((void *)0));
14561 struct Expression * exp;
14562 struct External * createdExternal = (((void *)0));
14568 strcpy(name, "__ecereInstMeth_");
14569 FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
14571 strcat(name, nameID->string);
14573 sprintf(number, "_%08d", instMethodID++);
14574 strcat(name, number);
14575 nameID->string = __ecereNameSpace__ecere__sys__CopyString(name);
14579 struct Symbol * symbol = declarator->symbol;
14580 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, unmangled, privateModule);
14582 if(method && method->type == 1)
14584 symbol->__anon1.method = method;
14585 ProcessMethodType(method);
14586 if(!symbol->type->__anon1.__anon2.thisClass)
14588 if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
14590 if(!currentClass->symbol)
14591 currentClass->symbol = FindClass(currentClass->fullName);
14592 symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
14596 if(!_class->symbol)
14597 _class->symbol = FindClass(_class->fullName);
14598 symbol->type->__anon1.__anon2.thisClass = _class->symbol;
14601 DeclareType(curExternal, symbol->type, 1, 1);
14605 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
14608 createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
14611 FreeSpecifier(nameID->_class);
14612 nameID->_class = (((void *)0));
14614 curExternal = createdExternal;
14617 if(createdExternal->__anon1.function)
14618 ProcessFunction(createdExternal->__anon1.function);
14620 else if(declarator)
14622 curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
14623 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
14625 curExternal = external;
14626 curContext = context;
14629 FreeClassFunction(members->__anon1.function);
14630 exp = QMkExpId(name);
14632 members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
14633 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
14639 if(members->__anon1.dataMembers && classSym)
14641 struct MemberInit * member;
14642 struct Location oldyyloc = yylloc;
14644 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
14646 ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
14647 if(member->initializer && !member->initializer->isConstant)
14648 inst->isConstant = 0;
14660 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
14662 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct, unsigned int warnClasses)
14668 if(spec->__anon1.specifier == THISCLASS)
14673 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14674 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14675 ProcessSpecifier(spec, declareStruct, 0);
14682 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
14685 DeclareType(curExternal, symbol->type, 1, 1);
14686 else if(spec->__anon1.__anon1.symbol)
14688 struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
14690 if(warnClasses && !c)
14691 Compiler_Warning("Undeclared class %s\n", spec->__anon1.__anon1.name);
14692 DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
14698 struct Enumerator * e;
14700 if(spec->__anon1.__anon2.list)
14702 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
14705 ProcessExpressionType(e->exp);
14714 if(spec->__anon1.__anon2.definitions)
14716 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
14718 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
14725 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
14730 if(decl->__anon1.identifier->classSym)
14732 FreeSpecifier(decl->__anon1.identifier->_class);
14733 decl->__anon1.identifier->_class = (((void *)0));
14737 if(decl->__anon1.array.exp)
14738 ProcessExpressionType(decl->__anon1.array.exp);
14746 struct Identifier * id = (((void *)0));
14747 struct Specifier * classSpec = (((void *)0));
14749 if(decl->type == 4)
14751 id = GetDeclId(decl);
14752 if(id && id->_class)
14754 classSpec = id->_class;
14755 id->_class = (((void *)0));
14758 if(decl->declarator)
14759 ProcessDeclarator(decl->declarator, isFunction);
14760 if(decl->type == 4)
14764 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
14766 if(!decl->__anon1.function.parameters)
14767 decl->__anon1.function.parameters = MkList();
14768 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
14770 if(decl->__anon1.function.parameters)
14772 struct TypeName * param;
14774 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
14776 if(param->qualifiers)
14778 struct Specifier * spec;
14780 for(spec = (*param->qualifiers).first; spec; spec = spec->next)
14782 if(spec->type == 0)
14784 if(spec->__anon1.specifier == TYPED_OBJECT)
14786 struct Declarator * d = param->declarator;
14787 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);
14789 if(!d || d->type != 5)
14790 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
14791 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14792 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
14793 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
14794 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
14795 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
14799 else if(spec->__anon1.specifier == ANY_OBJECT)
14801 struct Declarator * d = param->declarator;
14803 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14804 param->qualifiers = MkListOne(MkSpecifier(VOID));
14805 if(!d || d->type != 5)
14806 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
14807 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
14810 else if(spec->__anon1.specifier == THISCLASS)
14815 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14816 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14817 ProcessSpecifier(spec, 0, 0);
14822 else if(spec->type == 1)
14824 ProcessSpecifier(spec, isFunction, 1);
14826 else if((spec->type == 3 || spec->type == 4) && !spec->__anon1.__anon2.definitions && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
14828 struct Declarator * d = param->declarator;
14830 if(!d || d->type != 5)
14831 DeclareStruct(curExternal, spec->__anon1.__anon2.id->string, 0, 1);
14835 if(param->declarator)
14836 ProcessDeclarator(param->declarator, 0);
14845 static void ProcessDeclaration(struct Declaration * decl, unsigned int warnClasses)
14847 yylloc = decl->loc;
14852 unsigned int declareStruct = 0;
14854 if(decl->__anon1.__anon1.declarators)
14856 struct InitDeclarator * d;
14858 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14860 struct Type * type, * subType;
14862 ProcessDeclarator(d->declarator, 0);
14863 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14866 ProcessInitializer(d->initializer, type);
14867 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
14869 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
14871 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
14873 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
14874 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
14875 if(decl->__anon1.__anon1.specifiers)
14876 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
14877 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
14880 decl->__anon1.inst = inst;
14884 for(subType = type; subType; )
14886 if(subType->kind == 8)
14891 else if(subType->kind == 13)
14893 else if(subType->kind == 12)
14894 subType = subType->__anon1.__anon4.arrayType;
14903 if(decl->__anon1.__anon1.specifiers)
14905 struct Specifier * s;
14907 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
14909 ProcessSpecifier(s, declareStruct, 1);
14916 ProcessInstantiationType(decl->__anon1.inst);
14921 struct Specifier * spec;
14922 struct Declarator * d;
14923 unsigned int declareStruct = 0;
14925 if(decl->__anon1.__anon1.declarators)
14927 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14929 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14930 struct Type * subType;
14932 ProcessDeclarator(d, 0);
14933 for(subType = type; subType; )
14935 if(subType->kind == 8)
14940 else if(subType->kind == 13)
14942 else if(subType->kind == 12)
14943 subType = subType->__anon1.__anon4.arrayType;
14950 if(decl->__anon1.__anon1.specifiers)
14952 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
14953 ProcessSpecifier(spec, declareStruct, warnClasses);
14960 static void ProcessStatement(struct Statement * stmt)
14962 yylloc = stmt->loc;
14966 ProcessStatement(stmt->__anon1.labeled.stmt);
14969 if(stmt->__anon1.caseStmt.exp)
14971 FreeType(stmt->__anon1.caseStmt.exp->destType);
14972 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
14974 curSwitchType->refCount++;
14975 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
14976 ComputeExpression(stmt->__anon1.caseStmt.exp);
14978 if(stmt->__anon1.caseStmt.stmt)
14979 ProcessStatement(stmt->__anon1.caseStmt.stmt);
14983 if(stmt->__anon1.compound.context)
14985 struct Declaration * decl;
14986 struct Statement * s;
14987 struct Statement * prevCompound = curCompound;
14988 struct Context * prevContext = curContext;
14990 if(!stmt->__anon1.compound.isSwitch)
14991 curCompound = stmt;
14992 curContext = stmt->__anon1.compound.context;
14993 if(stmt->__anon1.compound.declarations)
14995 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
14996 ProcessDeclaration(decl, 1);
14998 if(stmt->__anon1.compound.statements)
15000 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
15001 ProcessStatement(s);
15003 curContext = prevContext;
15004 curCompound = prevCompound;
15010 struct Expression * exp;
15012 if(stmt->__anon1.expressions)
15014 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15015 ProcessExpressionType(exp);
15021 struct Expression * exp;
15023 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
15024 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
15025 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
15026 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
15028 ProcessExpressionType(exp);
15030 if(stmt->__anon1.ifStmt.stmt)
15031 ProcessStatement(stmt->__anon1.ifStmt.stmt);
15032 if(stmt->__anon1.ifStmt.elseStmt)
15033 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
15038 struct Type * oldSwitchType = curSwitchType;
15040 if(stmt->__anon1.switchStmt.exp)
15042 struct Expression * exp;
15044 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
15048 ProcessExpressionType(exp);
15051 curSwitchType = exp->expType;
15054 ProcessStatement(stmt->__anon1.switchStmt.stmt);
15055 curSwitchType = oldSwitchType;
15060 if(stmt->__anon1.whileStmt.exp)
15062 struct Expression * exp;
15064 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
15065 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
15066 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
15067 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
15069 ProcessExpressionType(exp);
15072 if(stmt->__anon1.whileStmt.stmt)
15073 ProcessStatement(stmt->__anon1.whileStmt.stmt);
15078 if(stmt->__anon1.doWhile.exp)
15080 struct Expression * exp;
15082 if((*stmt->__anon1.doWhile.exp).last)
15084 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
15085 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
15086 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
15088 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
15090 ProcessExpressionType(exp);
15093 if(stmt->__anon1.doWhile.stmt)
15094 ProcessStatement(stmt->__anon1.doWhile.stmt);
15099 struct Expression * exp;
15101 if(stmt->__anon1.forStmt.init)
15102 ProcessStatement(stmt->__anon1.forStmt.init);
15103 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
15105 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
15106 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
15107 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
15109 if(stmt->__anon1.forStmt.check)
15110 ProcessStatement(stmt->__anon1.forStmt.check);
15111 if(stmt->__anon1.forStmt.increment)
15113 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
15114 ProcessExpressionType(exp);
15116 if(stmt->__anon1.forStmt.stmt)
15117 ProcessStatement(stmt->__anon1.forStmt.stmt);
15122 struct Identifier * id = stmt->__anon1.forEachStmt.id;
15123 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
15124 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
15125 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
15126 char iteratorType[1024];
15127 struct Type * source;
15128 struct Expression * e;
15129 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));
15130 struct Expression * arrayExp;
15131 const char * typeString = (((void *)0));
15132 int builtinCount = 0;
15134 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
15138 FreeType(e->destType);
15139 e->destType = ProcessTypeString("Container", 0);
15141 if(!isBuiltin || e->next)
15142 ProcessExpressionType(e);
15144 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
15145 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)))
15147 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
15148 struct Symbol * symbol;
15149 struct Expression * expIt = (((void *)0));
15150 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
15151 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
15152 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
15153 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
15158 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
15159 stmt->__anon1.compound.context->parent = curContext;
15160 curContext = stmt->__anon1.compound.context;
15162 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
15164 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
15166 isCustomAVLTree = 1;
15167 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
15170 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
15172 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
15174 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
15177 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
15179 if(inCompiler && isArray)
15181 struct Declarator * decl;
15182 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15184 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
15185 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15186 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
15190 struct Type * type = (((void *)0));
15191 char typeStringBuf[1024];
15193 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
15194 if(((struct Expression *)(*exp).last)->type == 11)
15196 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
15199 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
15201 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)
15203 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
15205 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
15207 else if(arrayExp->__anon1.list)
15209 struct Expression * e;
15211 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15213 ProcessExpressionType(e);
15223 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15227 e->expType = (((void *)0));
15228 e = (*arrayExp->__anon1.list).first;
15229 ProcessExpressionType(e);
15232 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15234 FreeType(e->expType);
15235 e->expType = (((void *)0));
15237 type = (((void *)0));
15245 FreeType(e->expType);
15246 e->expType = (((void *)0));
15252 typeStringBuf[0] = '\0';
15253 PrintType(type, typeStringBuf, 0, 1);
15254 typeString = typeStringBuf;
15262 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
15263 struct Declarator * decl;
15264 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15266 if(arrayExp->__anon1.list)
15268 struct Expression * e;
15270 builtinCount = (*arrayExp->__anon1.list).count;
15271 type = ProcessTypeString(typeString, 0);
15272 while((e = (*arrayExp->__anon1.list).first))
15274 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
15275 e->destType = type;
15277 ProcessExpressionType(e);
15279 ListAdd(initializers, MkInitializerAssignment(e));
15282 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
15284 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
15285 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
15286 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
15287 FreeList(exp, (void *)(FreeExpression));
15289 else if(arrayExp->__anon1.list)
15291 struct Expression * e;
15293 type = ProcessTypeString(typeString, 0);
15294 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15296 e->destType = type;
15298 ProcessExpressionType(e);
15305 arrayExp->expType = ProcessTypeString("Container", 0);
15306 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
15309 else if(inCompiler && isLinkList && !isList)
15311 struct Declarator * decl;
15312 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15314 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
15315 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15316 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
15318 else if(inCompiler && _class->templateArgs)
15321 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
15323 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
15324 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)))))))));
15328 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
15331 switch(block->type)
15334 if(block->__anon1.compound.context)
15335 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15338 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
15339 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15340 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
15341 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15344 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
15345 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15348 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
15349 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15352 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
15353 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15356 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
15357 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15360 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
15361 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15367 block = MkIfStmt(filter, block, (((void *)0)));
15371 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));
15372 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15373 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15374 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15380 sprintf(count, "%d", builtinCount);
15381 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));
15382 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15383 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15384 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15386 else if(isLinkList && !isList)
15388 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
15389 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
15391 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
15393 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));
15397 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15398 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
15400 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));
15402 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15403 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15404 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15408 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
15410 ProcessExpressionType(expIt);
15411 if((*stmt->__anon1.compound.declarations).first)
15412 ProcessDeclaration((*stmt->__anon1.compound.declarations).first, 1);
15414 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
15415 ProcessStatement(stmt);
15418 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
15420 curContext = stmt->__anon1.compound.context->parent;
15425 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
15437 struct Expression * exp;
15439 if(stmt->__anon1.expressions)
15441 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15445 if(curFunction && !curFunction->type)
15446 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
15447 FreeType(exp->destType);
15448 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
15450 exp->destType->refCount++;
15452 ProcessExpressionType(exp);
15459 ProcessDeclaration(stmt->__anon1.decl, 1);
15464 struct AsmField * field;
15466 if(stmt->__anon1.asmStmt.inputFields)
15468 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
15469 if(field->expression)
15470 ProcessExpressionType(field->expression);
15472 if(stmt->__anon1.asmStmt.outputFields)
15474 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
15475 if(field->expression)
15476 ProcessExpressionType(field->expression);
15478 if(stmt->__anon1.asmStmt.clobberedFields)
15480 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
15482 if(field->expression)
15483 ProcessExpressionType(field->expression);
15490 struct PropertyWatch * propWatch;
15491 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15492 struct Expression * object = stmt->__anon1._watch.object;
15493 struct Expression * watcher = stmt->__anon1._watch.watcher;
15496 ProcessExpressionType(watcher);
15498 ProcessExpressionType(object);
15501 if(watcher || thisClass)
15503 struct External * external = curExternal;
15504 struct Context * context = curContext;
15507 stmt->__anon1.expressions = MkList();
15508 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15510 struct ClassFunction * func;
15511 char watcherName[1024];
15512 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;
15513 struct External * createdExternal;
15515 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
15516 if(propWatch->deleteWatch)
15517 strcat(watcherName, "_delete");
15520 struct Identifier * propID;
15522 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15524 strcat(watcherName, "_");
15525 strcat(watcherName, propID->string);
15528 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
15530 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)));
15531 ProcessClassFunctionBody(func, propWatch->compound);
15532 propWatch->compound = (((void *)0));
15533 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
15534 FreeClassFunction(func);
15535 curExternal = createdExternal;
15536 ProcessFunction(createdExternal->__anon1.function);
15537 if(propWatch->deleteWatch)
15539 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15541 ListAdd(args, CopyExpression(object));
15542 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15543 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
15544 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
15548 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
15549 struct Identifier * propID;
15551 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15553 char propName[1024];
15554 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15558 char getName[1024], setName[1024];
15559 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15561 DeclareProperty(createdExternal, prop, setName, getName);
15562 strcpy(propName, "__ecereProp_");
15563 FullClassNameCat(propName, prop->_class->fullName, 0);
15564 strcat(propName, "_");
15565 FullClassNameCat(propName, prop->name, 1);
15566 ListAdd(args, CopyExpression(object));
15567 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15568 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15569 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
15570 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
15571 __ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
15574 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15579 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
15581 curExternal = external;
15582 curContext = context;
15584 FreeExpression(watcher);
15586 FreeExpression(object);
15587 FreeList(watches, (void *)(FreePropertyWatch));
15590 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15594 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15596 ProcessStatement(propWatch->compound);
15603 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15604 struct Expression * object = stmt->__anon1._watch.object;
15605 struct __ecereNameSpace__ecere__com__Class * _class;
15608 ProcessExpressionType(object);
15611 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
15614 struct Identifier * propID;
15617 stmt->__anon1.expressions = MkList();
15618 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
15620 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
15627 for(propID = (*watches).first; propID; propID = propID->next)
15629 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15633 CreateFireWatcher(prop, object, stmt);
15636 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15641 struct __ecereNameSpace__ecere__com__Property * prop;
15642 struct __ecereNameSpace__ecere__com__Class * base;
15644 for(base = _class; base; base = base->base)
15646 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
15648 if(prop->isProperty && prop->isWatchable)
15650 CreateFireWatcher(prop, object, stmt);
15656 FreeExpression(object);
15657 FreeList(watches, (void *)(FreeIdentifier));
15660 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15666 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15667 struct Expression * object = stmt->__anon1._watch.object;
15668 struct Expression * watcher = stmt->__anon1._watch.watcher;
15669 struct __ecereNameSpace__ecere__com__Class * _class;
15672 ProcessExpressionType(object);
15674 ProcessExpressionType(watcher);
15677 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
15678 if(watcher || thisClass)
15682 struct Identifier * propID;
15685 stmt->__anon1.expressions = MkList();
15688 struct __ecereNameSpace__ecere__sys__OldList * args;
15691 ListAdd(args, CopyExpression(object));
15692 ListAdd(args, MkExpConstant("0"));
15693 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15694 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15698 for(propID = (*watches).first; propID; propID = propID->next)
15700 char propName[1024];
15701 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15705 char getName[1024], setName[1024];
15706 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15708 DeclareProperty(curExternal, prop, setName, getName);
15709 strcpy(propName, "__ecereProp_");
15710 FullClassNameCat(propName, prop->_class->fullName, 0);
15711 strcat(propName, "_");
15712 FullClassNameCat(propName, prop->name, 1);
15713 ListAdd(args, CopyExpression(object));
15714 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15715 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15716 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15719 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15723 FreeExpression(object);
15725 FreeExpression(watcher);
15726 FreeList(watches, (void *)(FreeIdentifier));
15729 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15732 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15739 void ComputeDataTypes()
15741 struct External * external;
15743 currentClass = (((void *)0));
15744 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
15745 DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
15746 DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
15747 DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
15748 DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
15749 DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
15750 DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
15751 DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
15752 DeclareFunctionUtil((((void *)0)), "eSystem_New");
15753 DeclareFunctionUtil((((void *)0)), "eSystem_New0");
15754 DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
15755 DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
15756 DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
15757 DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
15758 DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
15759 DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
15760 DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
15761 DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
15762 DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
15763 DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
15764 DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
15766 for(external = (*ast).first; external; external = external->next)
15768 afterExternal = curExternal = external;
15769 if(external->type == 0)
15773 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15774 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15776 currentClass = external->__anon1.function->_class;
15777 ProcessFunction(external->__anon1.function);
15779 else if(external->type == 1)
15781 if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
15783 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15784 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15786 currentClass = (((void *)0));
15787 if(external->__anon1.declaration)
15788 ProcessDeclaration(external->__anon1.declaration, 1);
15790 else if(external->type == 2)
15792 struct ClassDefinition * _class = external->__anon1._class;
15794 currentClass = external->symbol->__anon1.registered;
15797 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15798 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15800 if(_class->definitions)
15802 ProcessClass(_class->definitions, _class->symbol);
15806 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
15807 ((external ? __extension__ ({
15808 void * __ecerePtrToDelete = (external);
15810 __ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
15811 }) : 0), external = 0);
15814 else if(external->type == 4)
15816 thisNameSpace = external->__anon1.id->string;
15819 currentClass = (((void *)0));
15820 thisNameSpace = (((void *)0));
15821 curExternal = (((void *)0));
15824 void ProcessExpressionType(struct Expression * exp)
15826 unsigned int unresolved = 0;
15827 struct Location oldyylloc = yylloc;
15828 unsigned int notByReference = 0;
15830 if(!exp || exp->expType)
15837 struct Identifier * id = exp->__anon1.__anon1.identifier;
15839 if(!id || !topContext)
15841 if(id->_class && id->_class->__anon1.__anon1.name)
15843 id->classSym = id->_class->__anon1.__anon1.symbol;
15845 if(!strcmp(id->string, "__runtimePlatform"))
15847 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
15850 else if(strstr(id->string, "__ecereClass") == id->string)
15852 exp->expType = ProcessTypeString("ecere::com::Class", 1);
15855 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
15857 ReplaceClassMembers(exp, thisClass);
15860 ProcessExpressionType(exp);
15863 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
15868 struct Symbol * symbol = (((void *)0));
15869 unsigned int findInGlobal = 0;
15871 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)
15874 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15877 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
15883 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
15886 ProcessExpressionType(exp);
15890 else if(currentClass && !id->_class)
15892 if(ResolveIdWithClass(exp, currentClass, 1))
15895 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15899 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15902 struct Type * type = symbol->type;
15903 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
15905 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
15907 struct Context * context = SetupTemplatesContext(_class);
15909 type = ReplaceThisClassType(_class);
15910 FinishTemplatesContext(context);
15912 type->refCount = 0;
15914 FreeSpecifier(id->_class);
15915 id->_class = (((void *)0));
15916 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15917 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
15918 id->classSym = (((void *)0));
15919 exp->expType = type;
15922 if(type && (type->kind == 15))
15923 exp->isConstant = 1;
15924 if(symbol->isParam || !strcmp(id->string, "this"))
15926 if(_class && _class->type == 1 && !type->declaredWithStruct)
15927 exp->byReference = 1;
15929 if(symbol->isIterator)
15931 if(symbol->isIterator == 3)
15934 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
15935 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
15936 exp->expType = (((void *)0));
15937 ProcessExpressionType(exp);
15939 else if(symbol->isIterator != 4)
15942 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
15943 exp->__anon1.member.exp->expType = exp->expType;
15944 exp->__anon1.member.member = MkIdentifier("data");
15945 exp->expType = (((void *)0));
15946 ProcessExpressionType(exp);
15953 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
15955 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15959 strcpy(name, thisNameSpace);
15960 strcat(name, "::");
15961 strcat(name, id->string);
15962 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
15965 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
15970 for(c = 0; c < definedExpStackPos; c++)
15971 if(definedExpStack[c] == definedExp)
15973 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
15975 struct Location backupYylloc = yylloc;
15976 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
15978 definedExpStack[definedExpStackPos++] = definedExp;
15979 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
15981 int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count);
15983 __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
15984 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15986 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15987 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write]);
15988 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, definedExp->value, 1, strlen(definedExp->value)) : (int)1;
15991 unsigned int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode);
15993 __internal_VirtualMethod = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
15994 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15996 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15997 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek]);
15998 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, 0, 0) : (unsigned int)1;
16001 parsedExpression = (((void *)0));
16003 expression_yyparse();
16004 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
16006 fileInput = backInput;
16007 yylloc = backupYylloc;
16008 if(parsedExpression)
16010 FreeIdentifier(id);
16012 exp->__anon1.list = MkListOne(parsedExpression);
16013 ApplyLocation(parsedExpression, &yylloc);
16014 ProcessExpressionType(exp);
16015 definedExpStackPos--;
16018 definedExpStackPos--;
16024 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
16030 struct GlobalData * data = (((void *)0));
16032 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16036 strcpy(name, thisNameSpace);
16037 strcat(name, "::");
16038 strcat(name, id->string);
16039 data = FindGlobalData(name);
16042 data = FindGlobalData(id->string);
16045 DeclareGlobalData(curExternal, data);
16046 exp->expType = data->dataType;
16048 data->dataType->refCount++;
16049 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16050 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
16051 FreeSpecifier(id->_class);
16052 id->_class = (((void *)0));
16057 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
16059 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16063 strcpy(name, thisNameSpace);
16064 strcat(name, "::");
16065 strcat(name, id->string);
16066 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
16069 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
16074 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16075 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
16077 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
16078 strcpy(name, "__ecereFunction_");
16079 FullClassNameCat(name, id->string, 0);
16080 if(DeclareFunction(curExternal, function, name))
16082 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16083 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
16085 exp->expType = function->dataType;
16086 if(function->dataType)
16087 function->dataType->refCount++;
16088 FreeSpecifier(id->_class);
16089 id->_class = (((void *)0));
16101 if(!exp->__anon1.instance->_class)
16103 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
16105 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
16108 ProcessInstantiationType(exp->__anon1.instance);
16109 exp->isConstant = exp->__anon1.instance->isConstant;
16110 if(exp->__anon1.instance->_class)
16112 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
16120 char * constant = exp->__anon1.__anon1.constant;
16121 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
16123 exp->expType = type;
16124 if(constant[0] == '\'')
16126 if((int)((unsigned char *)constant)[1] > 127)
16129 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
16133 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
16134 exp->__anon1.__anon1.constant = PrintUInt(ch);
16136 type->__anon1._class = FindClass("unichar");
16137 type->isSigned = 0;
16142 type->isSigned = 1;
16147 char * dot = strchr(constant, '.');
16148 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
16153 exponent = strchr(constant, 'p');
16155 exponent = strchr(constant, 'P');
16159 exponent = strchr(constant, 'e');
16161 exponent = strchr(constant, 'E');
16163 if(dot || exponent)
16165 if(strchr(constant, 'f') || strchr(constant, 'F'))
16169 type->isSigned = 1;
16173 unsigned int isSigned = constant[0] == '-';
16174 char * endP = (((void *)0));
16175 long long i64 = strtoll(constant, &endP, 0);
16176 uint64 ui64 = strtoull(constant, &endP, 0);
16177 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16178 unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16182 if(i64 < (((int)0x80000000)))
16187 if(ui64 > (((int)0x7fffffff)))
16189 if(ui64 > (0xffffffff))
16192 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
16196 else if(constant[0] != '0' || !constant[1])
16201 type->kind = is64Bit ? 4 : 3;
16202 type->isSigned = isSigned;
16205 exp->isConstant = 1;
16206 if(exp->destType && exp->destType->kind == 7)
16208 else if(exp->destType && exp->destType->kind == 6)
16210 else if(exp->destType && exp->destType->kind == 4)
16217 exp->isConstant = 1;
16218 exp->expType = __extension__ ({
16219 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16221 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
16222 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16224 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
16225 }), __ecereInstance2;
16231 ProcessExpressionType(exp->__anon1._new.size);
16232 exp->expType = __extension__ ({
16233 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16235 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
16237 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16241 ProcessExpressionType(exp->__anon1._renew.size);
16242 ProcessExpressionType(exp->__anon1._renew.exp);
16243 exp->expType = __extension__ ({
16244 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16246 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
16248 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16252 unsigned int assign = 0, boolResult = 0, boolOps = 0;
16253 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
16254 unsigned int useDestType = 0, useSideType = 0;
16255 struct Location oldyylloc = yylloc;
16256 unsigned int useSideUnit = 0;
16257 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
16258 unsigned int powerOp = 0, relationOp = 0;
16259 struct __ecereNameSpace__ecere__com__Class * c1 = (((void *)0)), * c2 = (((void *)0));
16260 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
16262 switch(exp->__anon1.op.op)
16312 if(exp->__anon1.op.op == '/')
16317 if(exp->__anon1.op.exp1)
16321 if(exp->__anon1.op.op == '*')
16326 if(exp->__anon1.op.op == '&')
16328 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
16330 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
16331 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
16333 if(symbol && symbol->isIterator == 2)
16336 exp->__anon1.member.exp = exp->__anon1.op.exp2;
16337 exp->__anon1.member.member = MkIdentifier("key");
16338 exp->expType = (((void *)0));
16339 exp->__anon1.op.exp2->expType = symbol->type;
16340 symbol->type->refCount++;
16341 ProcessExpressionType(exp);
16347 if(exp->__anon1.op.exp1)
16349 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
16351 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
16353 if(exp->__anon1.op.exp1->destType)
16354 FreeType(exp->__anon1.op.exp1->destType);
16355 exp->__anon1.op.exp1->destType = exp->destType;
16356 exp->__anon1.op.exp1->opDestType = 1;
16358 exp->destType->refCount++;
16362 if(exp->__anon1.op.exp1->destType)
16363 FreeType(exp->__anon1.op.exp1->destType);
16364 exp->__anon1.op.exp1->destType = dummy;
16367 exp->__anon1.op.exp1->opDestType = 1;
16369 exp->__anon1.op.exp1->usedInComparison = 1;
16371 if(exp->__anon1.op.op == '+' || exp->__anon1.op.op == '-')
16373 if(exp->opDestType)
16374 exp->__anon1.op.exp1->parentOpDestType = 1;
16375 if(exp->usedInComparison)
16376 exp->__anon1.op.exp1->usedInComparison = 1;
16378 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16379 exp->__anon1.op.exp1->destType->count++;
16380 ProcessExpressionType(exp->__anon1.op.exp1);
16381 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16382 exp->__anon1.op.exp1->destType->count--;
16383 exp->__anon1.op.exp1->opDestType = 0;
16384 exp->__anon1.op.exp1->usedInComparison = 0;
16385 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)
16387 exp->__anon1.op.exp2 = MkExpConstant("1");
16388 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
16391 if(exp->__anon1.op.exp1->destType == dummy)
16394 exp->__anon1.op.exp1->destType = (((void *)0));
16396 if(exp->__anon1.op.exp2)
16398 if(!assign && exp->__anon1.op.exp1->expType && (exp->__anon1.op.exp1->expType->kind == 1 || exp->__anon1.op.exp1->expType->kind == 2))
16400 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);
16402 FreeType(exp->__anon1.op.exp1->expType);
16403 exp->__anon1.op.exp1->expType = type;
16406 type1 = exp->__anon1.op.exp1->expType;
16408 if(exp->__anon1.op.exp2)
16410 char expString[10240];
16412 expString[0] = '\0';
16413 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
16415 if(exp->__anon1.op.exp1)
16417 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
16418 if(exp->__anon1.op.exp1->expType)
16419 exp->__anon1.op.exp1->expType->refCount++;
16423 exp->__anon1.op.exp2->destType = exp->destType;
16424 if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
16425 exp->__anon1.op.exp2->opDestType = 1;
16427 exp->destType->refCount++;
16431 exp->expType = type1;
16436 PrintExpression(exp->__anon1.op.exp2, expString);
16437 if(type1 && type1->kind == 13)
16439 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)
16440 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
16441 else if(exp->__anon1.op.op == '=')
16443 if(exp->__anon1.op.exp2->destType)
16444 FreeType(exp->__anon1.op.exp2->destType);
16445 exp->__anon1.op.exp2->destType = type1;
16452 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)
16456 if(exp->__anon1.op.exp2->destType)
16457 FreeType(exp->__anon1.op.exp2->destType);
16458 exp->__anon1.op.exp2->destType = type1;
16465 exp->expType = type1;
16467 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
16469 if(exp->__anon1.op.exp2->destType)
16470 FreeType(exp->__anon1.op.exp2->destType);
16471 exp->__anon1.op.exp2->destType = exp->destType;
16472 if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
16473 exp->__anon1.op.exp2->opDestType = 1;
16475 exp->destType->refCount++;
16479 if(exp->__anon1.op.exp2->destType)
16480 FreeType(exp->__anon1.op.exp2->destType);
16481 exp->__anon1.op.exp2->destType = dummy;
16484 exp->__anon1.op.exp2->opDestType = 1;
16486 exp->__anon1.op.exp2->usedInComparison = 1;
16488 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))
16490 FreeType(exp->__anon1.op.exp2->destType);
16491 exp->__anon1.op.exp2->destType = type1;
16494 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16495 exp->__anon1.op.exp2->destType->count++;
16496 if(exp->__anon1.op.op == SIZEOF)
16498 struct Expression * e = exp->__anon1.op.exp2;
16500 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
16502 if(e->type == 5 || e->type == 32 || e->type == 23)
16505 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
16507 e = (*e->__anon1.list).last;
16510 if(e->type == 11 && e->__anon1.cast.exp)
16511 e->__anon1.cast.exp->needCast = 1;
16513 if(exp->__anon1.op.op == '+' || exp->__anon1.op.op == '-')
16515 if(exp->opDestType)
16516 exp->__anon1.op.exp2->parentOpDestType = 1;
16517 if(exp->usedInComparison)
16518 exp->__anon1.op.exp2->usedInComparison = 1;
16520 ProcessExpressionType(exp->__anon1.op.exp2);
16521 exp->__anon1.op.exp2->opDestType = 0;
16522 exp->__anon1.op.exp2->usedInComparison = 0;
16523 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16524 exp->__anon1.op.exp2->destType->count--;
16525 if(!assign && (exp->__anon1.op.exp1 || exp->__anon1.op.op == '~'))
16527 if(exp->__anon1.op.exp2->expType && (exp->__anon1.op.exp2->expType->kind == 1 || exp->__anon1.op.exp2->expType->kind == 2))
16529 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);
16531 FreeType(exp->__anon1.op.exp2->expType);
16532 exp->__anon1.op.exp2->expType = type;
16535 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
16537 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)
16539 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
16540 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16542 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)))
16544 if(exp->__anon1.op.op == ADD_ASSIGN)
16545 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16547 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))
16549 if(exp->__anon1.op.op == ADD_ASSIGN)
16550 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16552 else if(inCompiler)
16554 char type1String[1024];
16555 char type2String[1024];
16557 type1String[0] = '\0';
16558 type2String[0] = '\0';
16559 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
16560 PrintType(type1, type2String, 0, 1);
16561 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16562 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
16565 if(exp->__anon1.op.exp2->destType == dummy)
16568 exp->__anon1.op.exp2->destType = (((void *)0));
16570 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
16572 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16573 type2->refCount = 1;
16574 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
16575 type2->isSigned = 1;
16577 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))
16579 type2 = __extension__ ({
16580 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16582 __ecereInstance1->kind = 3, __ecereInstance1;
16584 type2->refCount = 1;
16585 type2->isSigned = 1;
16589 type2 = exp->__anon1.op.exp2->expType;
16594 c1 = type1 && type1->kind == 8 && type1->__anon1._class ? type1->__anon1._class->__anon1.registered : (((void *)0));
16595 c2 = type2 && type2->kind == 8 && type2->__anon1._class ? type2->__anon1._class->__anon1.registered : (((void *)0));
16596 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))))
16597 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "ambiguous units in relational operation\n", (((void *)0))));
16598 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)))
16600 if(exp->opDestType || exp->usedInComparison)
16601 exp->ambiguousUnits = 1;
16603 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "ambiguous units\n", (((void *)0))));
16606 if(exp->__anon1.op.op == SIZEOF)
16608 exp->expType = __extension__ ({
16609 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16611 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16613 exp->isConstant = 1;
16615 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
16617 exp->expType = Dereference(type2);
16618 if(type2 && type2->kind == 8)
16619 notByReference = 1;
16621 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
16622 exp->expType = Reference(type2);
16623 else if(exp->__anon1.op.op == LEFT_OP || exp->__anon1.op.op == RIGHT_OP)
16625 if(exp->__anon1.op.exp1->expType)
16627 exp->expType = exp->__anon1.op.exp1->expType;
16628 exp->expType->refCount++;
16633 if(c1 && !c1->dataType)
16634 c1->dataType = ProcessTypeString(c1->dataTypeString, 0);
16635 if(c2 && !c2->dataType)
16636 c2->dataType = ProcessTypeString(c2->dataTypeString, 0);
16639 if(exp->__anon1.op.exp1)
16641 if(exp->__anon1.op.exp1->destType)
16642 FreeType(exp->__anon1.op.exp1->destType);
16643 exp->__anon1.op.exp1->destType = MkClassType("bool");
16644 exp->__anon1.op.exp1->destType->truth = 1;
16645 if(!exp->__anon1.op.exp1->expType)
16646 ProcessExpressionType(exp->__anon1.op.exp1);
16648 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16649 FreeType(exp->__anon1.op.exp1->expType);
16650 exp->__anon1.op.exp1->expType = MkClassType("bool");
16651 exp->__anon1.op.exp1->expType->truth = 1;
16653 if(exp->__anon1.op.exp2)
16655 if(exp->__anon1.op.exp2->destType)
16656 FreeType(exp->__anon1.op.exp2->destType);
16657 exp->__anon1.op.exp2->destType = MkClassType("bool");
16658 exp->__anon1.op.exp2->destType->truth = 1;
16659 if(!exp->__anon1.op.exp2->expType)
16660 ProcessExpressionType(exp->__anon1.op.exp2);
16662 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16663 FreeType(exp->__anon1.op.exp2->expType);
16664 exp->__anon1.op.exp2->expType = MkClassType("bool");
16665 exp->__anon1.op.exp2->expType->truth = 1;
16668 else if(powerOp && exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((c1 && c1->type == 3) || (c2 && c2->type == 3)))
16670 if(c1 && c1->type == 3 && c2 && c2->type == 3)
16672 if(c1->dataType->kind == 7)
16673 exp->expType = c1->dataType;
16674 else if(c2->dataType->kind == 7)
16675 exp->expType = c2->dataType;
16676 else if(c1->dataType->kind == 6)
16677 exp->expType = c1->dataType;
16678 else if(c2->dataType->kind == 6)
16679 exp->expType = c2->dataType;
16681 exp->expType = c1->dataType;
16683 else if((c1 && c1->type == 3) || exp->__anon1.op.op == '/')
16684 exp->expType = type1;
16686 exp->expType = type2;
16688 exp->expType->refCount++;
16690 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")))))
16692 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"))))
16694 if(exp->__anon1.op.op == '-' && ((c1 && c1->type == 4) || (c2 && c2->type == 4)))
16696 struct Type * intType = ProcessTypeString((c1 && c1->dataType->kind == 4) || (c2 && c2->dataType->kind == 4) ? "int64" : "int", 0);
16698 if(exp->__anon1.op.exp1->destType)
16699 FreeType(exp->__anon1.op.exp1->destType);
16700 if(exp->__anon1.op.exp2->destType)
16701 FreeType(exp->__anon1.op.exp2->destType);
16702 exp->__anon1.op.exp1->destType = intType;
16703 exp->__anon1.op.exp2->destType = intType;
16704 intType->refCount++;
16708 if(exp->__anon1.op.exp2->destType)
16709 FreeType(exp->__anon1.op.exp2->destType);
16710 exp->__anon1.op.exp2->destType = type1;
16712 if(exp->__anon1.op.exp1->destType)
16713 FreeType(exp->__anon1.op.exp1->destType);
16714 exp->__anon1.op.exp1->destType = type2;
16717 if(!boolResult && !exp->opDestType && (!exp->destType || exp->destType->kind != 8) && c1 && c1->type == 3 && c2 && c2->type == 3 && c1 != c2)
16719 if(exp->usedInComparison || exp->parentOpDestType)
16720 exp->ambiguousUnits = 1;
16722 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);
16724 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
16726 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16730 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16732 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
16733 ProcessExpressionType(exp->__anon1.op.exp1);
16734 if(type2->kind != 13)
16736 ProcessExpressionType(classExp);
16737 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
16738 if(!exp->__anon1.op.exp2->expType)
16742 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
16743 c2 = (((void *)0));
16746 ProcessExpressionType(exp->__anon1.op.exp2);
16750 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)))
16752 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
16753 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16754 exp->expType = type1;
16758 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)))
16760 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
16761 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16762 exp->expType = type2;
16766 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))
16768 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
16772 unsigned int success = 0;
16774 if(type1->kind == 13 && type2->kind == 13)
16776 if(exp->__anon1.op.op == '+')
16777 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16778 else if(exp->__anon1.op.op == '-')
16780 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
16782 exp->expType = __extension__ ({
16783 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16785 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
16788 if(type1->__anon1.type->kind == 20)
16790 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16794 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16796 ProcessExpressionType(classExp);
16798 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"))));
16799 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
16807 if(!success && exp->__anon1.op.exp1->type == 2)
16809 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16812 FreeType(exp->expType);
16813 exp->expType = exp->__anon1.op.exp1->destType;
16814 if(exp->__anon1.op.exp1->destType)
16815 exp->__anon1.op.exp1->destType->refCount++;
16818 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16821 FreeType(exp->expType);
16822 exp->expType = exp->__anon1.op.exp2->destType;
16823 if(exp->__anon1.op.exp2->destType)
16824 exp->__anon1.op.exp2->destType->refCount++;
16830 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16833 FreeType(exp->expType);
16834 exp->expType = exp->__anon1.op.exp2->destType;
16835 if(exp->__anon1.op.exp2->destType)
16836 exp->__anon1.op.exp2->destType->refCount++;
16839 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16842 FreeType(exp->expType);
16843 exp->expType = exp->__anon1.op.exp1->destType;
16844 if(exp->__anon1.op.exp1->destType)
16845 exp->__anon1.op.exp1->destType->refCount++;
16851 char expString1[10240];
16852 char expString2[10240];
16856 expString1[0] = '\0';
16857 expString2[0] = '\0';
16862 PrintExpression(exp->__anon1.op.exp1, expString1);
16863 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16864 PrintExpression(exp->__anon1.op.exp2, expString2);
16865 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16866 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
16867 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
16869 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
16873 else if(!boolResult && !useSideUnit && c2 && c2->type == 3 && type1 && type1->kind != 8)
16875 if(exp->__anon1.op.exp1->destType)
16876 FreeType(exp->__anon1.op.exp1->destType);
16877 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16878 if(type2->__anon1._class->__anon1.registered->dataType)
16879 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16880 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16881 exp->expType = type2;
16885 else if(!boolResult && !useSideUnit && c1 && c1->type == 3 && type2 && type2->kind != 8)
16887 if(exp->__anon1.op.exp2->destType)
16888 FreeType(exp->__anon1.op.exp2->destType);
16889 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16890 if(type1->__anon1._class->__anon1.registered->dataType)
16891 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16892 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16893 exp->expType = type1;
16899 unsigned int valid = 0;
16901 if(!boolResult && useSideUnit && c1 && c1->type == 3 && type2 && type2->kind != 8)
16903 if(exp->__anon1.op.exp2->destType)
16904 FreeType(exp->__anon1.op.exp2->destType);
16905 exp->__anon1.op.exp2->destType = c1->dataType;
16906 exp->__anon1.op.exp2->destType->refCount++;
16907 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16910 type2 = exp->__anon1.op.exp2->destType;
16911 c2 = type2 && type2->kind == 8 && type2->__anon1._class ? type2->__anon1._class->__anon1.registered : (((void *)0));
16914 exp->expType = type2;
16917 if(!boolResult && useSideUnit && c2 && c2->type == 3 && type1 && type1->kind != 8)
16919 if(exp->__anon1.op.exp1->destType)
16920 FreeType(exp->__anon1.op.exp1->destType);
16921 exp->__anon1.op.exp1->destType = c2->dataType;
16922 exp->__anon1.op.exp1->destType->refCount++;
16923 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16924 type1 = exp->__anon1.op.exp1->destType;
16925 c1 = type1 && type1->kind == 8 && type1->__anon1._class ? type1->__anon1._class->__anon1.registered : (((void *)0));
16926 exp->expType = type1;
16929 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
16931 unsigned int op1IsEnum = c1 && c1->type == 4;
16932 unsigned int op2IsEnum = c2 && c2->type == 4;
16934 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
16936 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16938 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16941 FreeType(exp->expType);
16942 exp->expType = exp->__anon1.op.exp2->expType;
16943 if(exp->__anon1.op.exp2->expType)
16944 exp->__anon1.op.exp2->expType->refCount++;
16948 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16950 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16953 FreeType(exp->expType);
16954 exp->expType = exp->__anon1.op.exp1->expType;
16955 if(exp->__anon1.op.exp1->expType)
16956 exp->__anon1.op.exp1->expType->refCount++;
16963 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16965 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16968 FreeType(exp->expType);
16969 exp->expType = exp->__anon1.op.exp1->expType;
16970 if(exp->__anon1.op.exp1->expType)
16971 exp->__anon1.op.exp1->expType->refCount++;
16975 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16977 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16980 FreeType(exp->expType);
16981 exp->expType = exp->__anon1.op.exp2->expType;
16982 if(exp->__anon1.op.exp2->expType)
16983 exp->__anon1.op.exp2->expType->refCount++;
16991 if(c2 && c2->type == 3 && (!c1 || c1->type != 3))
16993 if(exp->__anon1.op.exp1->destType)
16994 FreeType(exp->__anon1.op.exp1->destType);
16995 exp->__anon1.op.exp1->destType = type2;
16997 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17000 FreeType(exp->expType);
17001 exp->expType = exp->__anon1.op.exp1->destType;
17002 if(exp->__anon1.op.exp1->destType)
17003 exp->__anon1.op.exp1->destType->refCount++;
17008 if(exp->__anon1.op.exp2->destType)
17009 FreeType(exp->__anon1.op.exp2->destType);
17010 exp->__anon1.op.exp2->destType = type1;
17012 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
17015 FreeType(exp->expType);
17016 exp->expType = exp->__anon1.op.exp2->destType;
17017 if(exp->__anon1.op.exp2->destType)
17018 exp->__anon1.op.exp2->destType->refCount++;
17020 else if(type1 && type2)
17022 char expString1[10240];
17023 char expString2[10240];
17024 char type1String[1024];
17025 char type2String[1024];
17027 expString1[0] = '\0';
17028 expString2[0] = '\0';
17029 type1String[0] = '\0';
17030 type2String[0] = '\0';
17033 PrintExpression(exp->__anon1.op.exp1, expString1);
17034 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
17035 PrintExpression(exp->__anon1.op.exp2, expString2);
17036 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
17037 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
17038 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
17040 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
17041 if(c1 && c1->type == 4)
17043 exp->expType = exp->__anon1.op.exp1->expType;
17044 if(exp->__anon1.op.exp1->expType)
17045 exp->__anon1.op.exp1->expType->refCount++;
17047 else if(c2 && c2->type == 4)
17049 exp->expType = exp->__anon1.op.exp2->expType;
17050 if(exp->__anon1.op.exp2->expType)
17051 exp->__anon1.op.exp2->expType->refCount++;
17059 if(c2 && c2->type == 4)
17061 struct Type * oldType = exp->__anon1.op.exp1->expType;
17063 exp->__anon1.op.exp1->expType = (((void *)0));
17064 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17067 exp->__anon1.op.exp1->expType = oldType;
17069 if(exp->__anon1.op.exp1->destType)
17070 FreeType(exp->__anon1.op.exp1->destType);
17071 exp->__anon1.op.exp1->destType = type2;
17073 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17076 FreeType(exp->expType);
17077 exp->expType = exp->__anon1.op.exp1->destType;
17078 if(exp->__anon1.op.exp1->destType)
17079 exp->__anon1.op.exp1->destType->refCount++;
17083 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
17085 if(type1 && c2 && c2->type == 3)
17087 if(exp->__anon1.op.exp1->destType)
17088 FreeType(exp->__anon1.op.exp1->destType);
17089 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
17090 if(type2->__anon1._class->__anon1.registered->dataType)
17091 type2->__anon1._class->__anon1.registered->dataType->refCount++;
17092 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
17094 if(exp->__anon1.op.op == '!')
17096 exp->expType = MkClassType("bool");
17097 exp->expType->truth = 1;
17101 exp->expType = type2;
17106 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
17108 if(c2 && c2->type == 3)
17110 if(exp->__anon1.op.exp2->destType)
17111 FreeType(exp->__anon1.op.exp2->destType);
17112 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
17113 if(type1->__anon1._class->__anon1.registered->dataType)
17114 type1->__anon1._class->__anon1.registered->dataType->refCount++;
17115 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
17117 exp->expType = type1;
17123 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
17125 char expString[10000];
17127 expString[0] = '\0';
17130 PrintExpression(exp->__anon1.op.exp1, expString);
17131 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17134 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17136 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
17138 char expString[10240];
17140 expString[0] = '\0';
17143 PrintExpression(exp->__anon1.op.exp2, expString);
17144 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17147 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17151 FreeType(exp->expType);
17152 exp->expType = MkClassType("bool");
17153 exp->expType->truth = 1;
17155 if(exp->__anon1.op.op != SIZEOF)
17156 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
17157 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
17159 DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
17161 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
17162 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
17163 yylloc = oldyylloc;
17172 struct Expression * e;
17174 exp->isConstant = 1;
17175 for(e = (*exp->__anon1.list).first; e; e = e->next)
17179 FreeType(e->destType);
17180 e->opDestType = exp->opDestType;
17181 e->usedInComparison = exp->usedInComparison;
17182 e->parentOpDestType = exp->parentOpDestType;
17183 e->destType = exp->destType;
17186 exp->destType->refCount++;
17189 ProcessExpressionType(e);
17190 if(e->ambiguousUnits)
17191 exp->ambiguousUnits = 1;
17192 if(!exp->expType && !e->next)
17194 exp->expType = e->expType;
17196 e->expType->refCount++;
17197 exp->needCast = e->needCast;
17200 exp->isConstant = 0;
17202 e = (*exp->__anon1.list).first;
17203 if(!e->next && e->type == 8)
17205 struct Expression * next = exp->next, * prev = exp->prev;
17207 FreeType(exp->expType);
17208 FreeType(exp->destType);
17209 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17213 ((e ? __extension__ ({
17214 void * __ecerePtrToDelete = (e);
17216 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
17218 ProcessExpressionType(exp);
17224 struct Expression * e;
17226 exp->isConstant = 1;
17227 ProcessExpressionType(exp->__anon1.index.exp);
17228 if(!exp->__anon1.index.exp->isConstant)
17229 exp->isConstant = 0;
17230 if(exp->__anon1.index.exp->expType)
17232 struct Type * source = exp->__anon1.index.exp->expType;
17234 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
17236 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
17237 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
17239 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
17241 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
17242 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
17244 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
17246 if(type->kind == 8)
17247 type->constant = 1;
17248 else if(type->kind == 13)
17250 struct Type * t = type;
17252 while(t->kind == 13)
17253 t = t->__anon1.type;
17256 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
17261 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
17263 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
17266 FreeType(e->destType);
17267 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
17269 ProcessExpressionType(e);
17274 exp->isConstant = 0;
17277 exp->expType = Dereference(exp->__anon1.index.exp->expType);
17279 DeclareType(curExternal, exp->expType, 1, 0);
17284 struct Expression * e;
17285 struct Type * functionType;
17286 struct Type * methodType = (((void *)0));
17292 PrintExpression(exp->__anon1.call.exp, name);
17293 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
17295 PrintExpression(exp->__anon1.call.exp, name);
17298 if(exp->__anon1.call.exp->type == 0)
17300 struct Expression * idExp = exp->__anon1.call.exp;
17301 struct Identifier * id = idExp->__anon1.__anon1.identifier;
17303 if(!strcmp(id->string, "__builtin_frame_address"))
17305 exp->expType = ProcessTypeString("void *", 1);
17306 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17307 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17310 else if(!strcmp(id->string, "__ENDIAN_PAD"))
17312 exp->expType = ProcessTypeString("int", 1);
17313 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17314 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17317 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
17319 struct Expression * a = (((void *)0));
17320 struct Expression * b = (((void *)0));
17321 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
17323 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
17325 a = (*exp->__anon1.call.arguments).first;
17326 b = (*exp->__anon1.call.arguments).last;
17330 else if((*exp->__anon1.call.arguments).count == 1)
17332 a = (*exp->__anon1.call.arguments).first;
17337 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
17338 idExp->__anon1.__anon1.identifier = (((void *)0));
17339 FreeExpContents(exp);
17340 ProcessExpressionType(a);
17342 ProcessExpressionType(b);
17344 exp->__anon1.list = MkList();
17345 if(a->expType && (!b || b->expType))
17347 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
17351 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17352 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
17353 struct Declaration * decl;
17354 char temp1[1024], temp2[1024];
17356 GetTypeSpecs(a->expType, specs);
17357 if(a && !a->isConstant && a->type != 0)
17359 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
17360 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
17361 tempExp1 = QMkExpId(temp1);
17362 tempExp1->expType = a->expType;
17364 a->expType->refCount++;
17365 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
17367 if(b && !b->isConstant && b->type != 0)
17369 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
17370 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
17371 tempExp2 = QMkExpId(temp2);
17372 tempExp2->expType = b->expType;
17374 b->expType->refCount++;
17375 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
17377 decl = MkDeclaration(specs, decls);
17378 if(!curCompound->__anon1.compound.declarations)
17379 curCompound->__anon1.compound.declarations = MkList();
17380 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
17384 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
17386 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
17388 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
17389 exp->expType = a->expType;
17391 a->expType->refCount++;
17393 else if(!strcmp(id->string, "Abs"))
17395 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
17396 exp->expType = a->expType;
17398 a->expType->refCount++;
17400 else if(!strcmp(id->string, "Sgn"))
17402 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"))))));
17403 exp->expType = ProcessTypeString("int", 0);
17405 FreeExpression(tempExp1);
17407 FreeExpression(tempExp2);
17408 FreeIdentifier(id);
17414 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
17416 if(!exp->__anon1.call.exp->destType)
17418 exp->__anon1.call.exp->destType = dummy;
17421 ProcessExpressionType(exp->__anon1.call.exp);
17422 if(exp->__anon1.call.exp->destType == dummy)
17425 exp->__anon1.call.exp->destType = (((void *)0));
17429 functionType = exp->__anon1.call.exp->expType;
17430 if(functionType && functionType->kind == 16)
17432 methodType = functionType;
17433 functionType = methodType->__anon1.__anon3.method->dataType;
17434 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
17436 char typeString[1024];
17438 typeString[0] = '\0';
17440 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
17442 functionType->__anon1.__anon2.thisClass = (((void *)0));
17443 PrintType(functionType, typeString, 1, 1);
17444 functionType->__anon1.__anon2.thisClass = back;
17446 if(strstr(typeString, "thisclass"))
17448 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17449 struct Declarator * decl;
17452 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17454 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17455 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))
17456 thisClassParams = 0;
17457 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17459 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
17461 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
17462 ProcessDeclarator(decl, 1);
17463 thisClass = backupThisClass;
17465 thisClassParams = 1;
17466 functionType = ProcessType(specs, decl);
17467 functionType->refCount = 0;
17468 FinishTemplatesContext(context);
17470 struct Type * p, * op;
17472 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)
17475 p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17478 if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
17480 functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17483 FreeList(specs, (void *)(FreeSpecifier));
17484 FreeDeclarator(decl);
17488 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
17490 struct Type * type = functionType->__anon1.type;
17492 if(!functionType->refCount)
17494 functionType->__anon1.type = (((void *)0));
17495 FreeType(functionType);
17497 functionType = type;
17499 if(functionType && functionType->kind != 11)
17501 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
17503 else if(functionType)
17505 unsigned int emptyParams = 0, noParams = 0;
17506 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
17507 struct Type * type = functionType->__anon1.__anon2.params.first;
17508 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
17510 struct Location oldyylloc = yylloc;
17514 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
17516 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
17519 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
17521 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)
17523 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
17526 e->destType = type;
17528 type = functionType->__anon1.__anon2.params.first;
17531 type->refCount = 0;
17533 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
17535 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
17536 type->byReference = functionType->byReference;
17537 type->typedByReference = functionType->typedByReference;
17540 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
17542 e->destType = type;
17544 type = functionType->__anon1.__anon2.params.first;
17547 type->refCount = 0;
17550 if(type && type->kind == 0)
17553 if(!type->refCount)
17555 type = (((void *)0));
17557 for(; e; e = e->next)
17559 if(!type && !emptyParams)
17562 if(methodType && methodType->__anon1.__anon3.methodClass)
17563 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);
17565 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);
17568 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
17570 struct Type * templatedType = (((void *)0));
17571 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
17572 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
17575 if(_class && _class->templateArgs)
17577 struct __ecereNameSpace__ecere__com__Class * sClass;
17579 for(sClass = _class; sClass; sClass = sClass->base)
17581 if(sClass->templateClass)
17582 sClass = sClass->templateClass;
17584 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
17586 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
17588 struct __ecereNameSpace__ecere__com__Class * nextClass;
17590 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17592 if(nextClass->templateClass)
17593 nextClass = nextClass->templateClass;
17594 id += nextClass->templateParams.count;
17604 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
17606 unsigned int constant = type->constant;
17607 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
17610 struct Context * context = SetupTemplatesContext(_class);
17612 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
17613 FinishTemplatesContext(context);
17615 if(templatedType->kind == 8 && constant)
17616 templatedType->constant = 1;
17617 else if(templatedType->kind == 13)
17619 struct Type * t = templatedType->__anon1.type;
17621 while(t->kind == 13)
17622 t = t->__anon1.type;
17624 t->constant = constant;
17626 e->destType = templatedType;
17629 templatedType->passAsTemplate = 1;
17634 e->destType = type;
17641 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
17643 e->destType = type->prev;
17644 e->destType->refCount++;
17648 e->destType = type;
17653 if(type && type->kind != 14)
17655 struct Type * next = type->next;
17657 if(!type->refCount)
17662 if(type && type->kind != 14)
17664 if(methodType && methodType->__anon1.__anon3.methodClass)
17665 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);
17667 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);
17669 yylloc = oldyylloc;
17670 if(type && !type->refCount)
17675 functionType = __extension__ ({
17676 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17678 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
17680 if(exp->__anon1.call.exp->type == 0)
17682 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
17686 struct Symbol * symbol;
17687 struct Location oldyylloc = yylloc;
17689 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
17690 if(strstr(string, "__builtin_") == string)
17694 functionType->__anon1.__anon2.returnType = exp->destType;
17695 exp->destType->refCount++;
17699 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
17700 symbol = __extension__ ({
17701 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
17703 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
17705 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
17706 if(strstr(symbol->string, "::"))
17707 globalContext->hasNameSpace = 1;
17708 yylloc = oldyylloc;
17711 else if(exp->__anon1.call.exp->type == 8)
17715 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
17716 if(!functionType->__anon1.__anon2.returnType)
17718 functionType->__anon1.__anon2.returnType = __extension__ ({
17719 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17721 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
17725 if(functionType && functionType->kind == 11)
17727 exp->expType = functionType->__anon1.__anon2.returnType;
17728 if(functionType->__anon1.__anon2.returnType)
17729 functionType->__anon1.__anon2.returnType->refCount++;
17730 if(!functionType->refCount)
17731 FreeType(functionType);
17733 if(exp->__anon1.call.arguments)
17735 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
17736 ProcessExpressionType(e);
17742 struct Type * type;
17743 struct Location oldyylloc = yylloc;
17744 unsigned int thisPtr;
17745 struct Expression * checkExp = exp->__anon1.member.exp;
17749 if(checkExp->type == 11)
17750 checkExp = checkExp->__anon1.cast.exp;
17751 else if(checkExp->type == 5)
17752 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
17756 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
17757 exp->thisPtr = thisPtr;
17758 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
17760 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
17762 ProcessExpressionType(exp->__anon1.member.exp);
17763 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)
17765 exp->isConstant = 0;
17768 exp->isConstant = exp->__anon1.member.exp->isConstant;
17769 type = exp->__anon1.member.exp->expType;
17771 if(type && (type->kind == 20))
17773 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
17774 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
17778 for(param = _class->templateParams.first; param; param = param->next)
17780 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
17784 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
17786 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
17790 struct Expression * expMember = exp->__anon1.member.exp;
17791 struct Declarator * decl;
17792 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17793 char thisClassTypeString[1024];
17795 FreeIdentifier(exp->__anon1.member.member);
17796 ProcessExpressionType(argExp);
17798 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
17802 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
17803 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
17806 strcpy(thisClassTypeString, _class->fullName);
17808 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
17809 exp->expType = ProcessType(specs, decl);
17810 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
17812 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
17813 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
17814 int paramCount = 0;
17815 int lastParam = -1;
17816 char templateString[1024];
17817 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
17819 sprintf(templateString, "%s<", expClass->templateClass->fullName);
17820 for(cClass = expClass; cClass; cClass = cClass->base)
17824 for(param = cClass->templateParams.first; param; param = param->next)
17827 struct __ecereNameSpace__ecere__com__Class * sClass;
17828 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
17830 for(sClass = cClass->base; sClass; sClass = sClass->base)
17831 id += sClass->templateParams.count;
17832 arg = expClass->templateArgs[id];
17833 for(sClass = _class; sClass; sClass = sClass->base)
17835 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
17837 struct __ecereNameSpace__ecere__com__Class * nextClass;
17839 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17840 p += nextClass->templateParams.count;
17841 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
17843 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
17845 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17847 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
17848 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
17855 char argument[256];
17857 argument[0] = '\0';
17858 switch(param->type)
17862 char expString[1024];
17863 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17864 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
17865 struct Expression * exp;
17866 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
17868 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
17869 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
17870 ProcessExpressionType(exp);
17871 ComputeExpression(exp);
17872 expString[0] = '\0';
17873 PrintExpression(exp, expString);
17874 strcat(argument, expString);
17875 FreeExpression(exp);
17880 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
17885 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17887 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
17888 strcat(argument, thisClassTypeString);
17890 strcat(argument, arg.__anon1.__anon1.dataTypeString);
17898 strcat(templateString, ", ");
17899 if(lastParam != p - 1)
17901 strcat(templateString, param->name);
17902 strcat(templateString, " = ");
17904 strcat(templateString, argument);
17913 int len = strlen(templateString);
17915 if(templateString[len - 1] == '>')
17916 templateString[len++] = ' ';
17917 templateString[len++] = '>';
17918 templateString[len++] = '\0';
17921 struct Context * context = SetupTemplatesContext(_class);
17923 FreeType(exp->expType);
17924 exp->expType = ProcessTypeString(templateString, 0);
17925 FinishTemplatesContext(context);
17928 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
17929 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
17931 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")))))))));
17934 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
17936 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
17939 if(type && (type->kind == 20))
17941 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)))
17943 struct Identifier * id = exp->__anon1.member.member;
17944 int typeKind = type->kind;
17945 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));
17947 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
17949 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
17954 if(typeKind == 3 || typeKind == 15)
17955 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
17958 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17960 _class = type->__anon1._class->__anon1.registered;
17962 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
17964 _class = FindClass("char *")->__anon1.registered;
17966 else if(type->kind == 13)
17968 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
17969 FreeType(exp->expType);
17970 exp->expType = ProcessTypeString("uintptr", 0);
17971 exp->byReference = 1;
17975 char string[1024] = "";
17976 struct Symbol * classSym;
17978 PrintTypeNoConst(type, string, 0, 1);
17979 classSym = FindClass(string);
17981 _class = classSym->__anon1.registered;
17987 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
17988 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
17989 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
17990 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
17991 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
17993 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
17994 exp->__anon1.member.memberType = 1;
17995 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
17996 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
17999 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
18001 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
18002 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
18004 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
18006 member = (((void *)0));
18008 if(!member && !prop)
18009 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
18010 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
18011 exp->__anon1.member.thisPtr = 1;
18015 unsigned int useMemberForNonConst = 0;
18019 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
18020 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);
18021 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
18022 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
18024 if((!prop || useMemberForNonConst) && !member)
18026 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
18029 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
18030 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);
18031 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
18032 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
18037 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
18038 prop = (((void *)0));
18040 member = (((void *)0));
18044 if(!prop && !member && !method)
18045 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
18046 if(!prop && !member && !method)
18050 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
18053 exp->__anon1.member.memberType = 5;
18054 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
18058 char structName[1024];
18059 struct Identifier * id = exp->__anon1.member.member;
18060 struct Expression * classExp = exp->__anon1.member.exp;
18063 FreeType(classExp->expType);
18064 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
18065 strcpy(structName, "__ecereClassData_");
18066 FullClassNameCat(structName, type->__anon1._class->string, 0);
18068 exp->__anon1.member.member = id;
18069 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"))))))));
18071 ProcessExpressionType(exp);
18077 struct Symbol * classSym = FindClass(id->string);
18081 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
18084 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
18088 if(exp->__anon1.member.exp->destType)
18089 FreeType(exp->__anon1.member.exp->destType);
18091 if(method && !method->_class->symbol)
18092 method->_class->symbol = FindClass(method->_class->fullName);
18093 if(prop && !prop->_class->symbol)
18094 prop->_class->symbol = FindClass(prop->_class->fullName);
18095 exp->__anon1.member.exp->destType = __extension__ ({
18096 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18098 __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;
18103 exp->__anon1.member.memberType = 1;
18104 if(!prop->dataType)
18105 ProcessPropertyType(prop);
18106 exp->expType = prop->dataType;
18107 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
18109 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18111 CopyTypeInto(type, exp->expType);
18112 type->refCount = 1;
18113 type->constant = 1;
18114 exp->expType = type;
18116 else if(prop->dataType)
18117 prop->dataType->refCount++;
18121 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18123 FreeExpContents(exp);
18125 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18126 ProcessExpressionType(exp);
18129 exp->__anon1.member.memberType = 3;
18130 DeclareStruct(curExternal, _class->fullName, 0, 1);
18131 if(member->_class != _class)
18132 DeclareStruct(curExternal, member->_class->fullName, 0, 1);
18133 if(!member->dataType)
18135 struct Context * context = SetupTemplatesContext(_class);
18137 member->dataType = ProcessTypeString(member->dataTypeString, 0);
18138 FinishTemplatesContext(context);
18140 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)
18141 member->dataType->bitMemberSize = ((struct __ecereNameSpace__ecere__com__BitMember *)member)->size;
18142 exp->expType = member->dataType;
18143 if(member->dataType)
18144 member->dataType->refCount++;
18146 else if(revConvert)
18148 exp->__anon1.member.memberType = 4;
18149 exp->expType = MkClassType(revConvert->_class->fullName);
18154 exp->__anon1.member.memberType = 2;
18156 if(!method->dataType)
18157 ProcessMethodType(method);
18158 exp->expType = __extension__ ({
18159 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18161 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
18163 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
18164 exp->expType->__anon1.__anon3.usedClass = _class;
18166 else if(!classProp)
18168 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18170 FreeExpContents(exp);
18172 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18173 FreeType(exp->expType);
18174 exp->expType = MkClassType("ecere::com::Class");
18177 yylloc = exp->__anon1.member.member->loc;
18178 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
18180 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
18182 if(_class && exp->expType)
18184 struct __ecereNameSpace__ecere__com__Class * tClass;
18186 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
18187 while(tClass && !tClass->templateClass)
18188 tClass = tClass->base;
18189 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
18192 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18193 struct __ecereNameSpace__ecere__com__Class * sClass;
18195 for(sClass = tClass; sClass; sClass = sClass->base)
18198 if(sClass->templateClass)
18199 sClass = sClass->templateClass;
18200 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18202 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
18204 for(sClass = sClass->base; sClass; sClass = sClass->base)
18205 id += sClass->templateParams.count;
18213 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
18215 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18216 struct Context * context = SetupTemplatesContext(tClass);
18217 unsigned int constant = exp->expType->constant;
18218 unsigned int passAsTemplate = 0;
18219 struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
18220 struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
18222 if(t && t->kind == 8 && t->__anon1._class)
18223 thisClassFrom = t->__anon1._class->__anon1.registered;
18225 thisClassFrom = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "class");
18227 passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
18228 FreeType(exp->expType);
18229 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18230 exp->expType->thisClassFrom = thisClassFrom;
18231 if(exp->expType->kind == 8 && constant)
18232 exp->expType->constant = 1;
18233 else if(exp->expType->kind == 13)
18235 struct Type * t = exp->expType->__anon1.type;
18237 while(t->kind == 13)
18238 t = t->__anon1.type;
18240 t->constant = constant;
18244 if(exp->expType->kind == 21)
18246 FreeType(exp->expType);
18247 exp->expType = ReplaceThisClassType(_class);
18250 exp->expType->passAsTemplate = 1;
18253 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18254 if(exp->destType->kind == 8 && constant)
18255 exp->destType->constant = 1;
18256 else if(exp->destType->kind == 13)
18258 struct Type * t = exp->destType->__anon1.type;
18260 while(t->kind == 13)
18261 t = t->__anon1.type;
18263 t->constant = constant;
18265 if(exp->destType->kind == 21)
18267 FreeType(exp->destType);
18268 exp->destType = ReplaceThisClassType(_class);
18272 FinishTemplatesContext(context);
18275 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)
18278 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18279 struct __ecereNameSpace__ecere__com__Class * sClass;
18281 for(sClass = tClass; sClass; sClass = sClass->base)
18284 if(sClass->templateClass)
18285 sClass = sClass->templateClass;
18286 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18288 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
18290 for(sClass = sClass->base; sClass; sClass = sClass->base)
18291 id += sClass->templateParams.count;
18301 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18302 struct Context * context = SetupTemplatesContext(tClass);
18303 struct Type * basicType;
18305 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18308 if(basicType->kind == 21)
18310 FreeType(basicType);
18311 basicType = ReplaceThisClassType(_class);
18313 FreeType(exp->expType);
18314 exp->expType = __extension__ ({
18315 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18317 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
18321 exp->destType = exp->expType;
18322 exp->destType->refCount++;
18325 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18326 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18327 struct Declarator * decl;
18329 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18332 exp->destType->refCount++;
18334 exp->expType->refCount++;
18336 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
18337 exp->__anon1.cast.exp = newExp;
18340 FinishTemplatesContext(context);
18343 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
18345 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
18349 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
18351 int paramCount = 0;
18352 int lastParam = -1;
18353 char templateString[1024];
18354 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
18356 sprintf(templateString, "%s<", expClass->templateClass->fullName);
18357 while(cClass != expClass)
18359 struct __ecereNameSpace__ecere__com__Class * sClass;
18361 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
18364 for(param = cClass->templateParams.first; param; param = param->next)
18366 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
18368 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
18369 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
18371 while(cClassCur != tClass && !paramCur)
18373 struct __ecereNameSpace__ecere__com__Class * sClassCur;
18375 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
18377 cClassCur = sClassCur;
18378 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
18380 if(!strcmp(paramCur->name, param->name))
18387 if(paramCur && paramCur->type == 0)
18388 arg = tClass->templateArgs[cp];
18390 arg = expClass->templateArgs[p];
18392 char argument[256];
18394 argument[0] = '\0';
18395 switch(param->type)
18399 char expString[1024];
18400 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18401 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
18402 struct Expression * exp;
18403 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
18405 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
18406 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
18407 ProcessExpressionType(exp);
18408 ComputeExpression(exp);
18409 expString[0] = '\0';
18410 PrintExpression(exp, expString);
18411 strcat(argument, expString);
18412 FreeExpression(exp);
18417 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
18422 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
18423 strcat(argument, arg.__anon1.__anon1.dataTypeString);
18430 strcat(templateString, ", ");
18431 if(lastParam != p - 1)
18433 strcat(templateString, param->name);
18434 strcat(templateString, " = ");
18436 strcat(templateString, argument);
18445 int len = strlen(templateString);
18447 if(templateString[len - 1] == '>')
18448 templateString[len++] = ' ';
18449 templateString[len++] = '>';
18450 templateString[len++] = '\0';
18452 FreeType(exp->expType);
18454 struct Context * context = SetupTemplatesContext(tClass);
18456 exp->expType = ProcessTypeString(templateString, 0);
18457 FinishTemplatesContext(context);
18464 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)");
18466 else if(type && (type->kind == 9 || type->kind == 10))
18468 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
18472 exp->expType = memberType;
18474 memberType->refCount++;
18479 char expString[10240];
18481 expString[0] = '\0';
18484 PrintExpression(exp, expString);
18485 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18487 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
18489 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
18491 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
18493 struct Identifier * id = exp->__anon1.member.member;
18494 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));
18498 FreeType(exp->expType);
18499 exp->expType = ReplaceThisClassType(_class);
18503 yylloc = oldyylloc;
18508 struct Type * destType = exp->destType;
18510 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
18512 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
18514 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
18518 ProcessExpressionType(exp);
18525 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
18527 if(classSym && classSym->__anon1.registered)
18529 if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
18532 struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
18535 DeclareStruct(curExternal, classSym->string, 0, 1);
18536 FreeSpecifier(exp->__anon1._class);
18537 FullClassNameCat(name, classSym->string, 0);
18541 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
18545 struct Expression * e;
18548 if(b->structSize == b->offset)
18549 exp->__anon1.op.exp1 = MkExpConstant("0");
18551 exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18552 exp->__anon1.op.op = '+';
18554 while(b->offset != 0)
18556 struct Symbol * sym;
18557 struct Expression * typeSize;
18560 sym = FindClass(b->fullName);
18562 DeclareStruct(curExternal, sym->string, 0, 1);
18563 FullClassNameCat(name, sym->string, 0);
18564 if(b->structSize == b->offset)
18565 typeSize = MkExpConstant("0");
18567 typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18568 e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
18569 e = e->__anon1.op.exp2;
18575 if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
18577 FreeSpecifier(exp->__anon1._class);
18578 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
18583 char className[1024];
18585 strcpy(className, "__ecereClass_");
18586 FullClassNameCat(className, classSym->string, 1);
18587 DeclareClass(curExternal, classSym, className);
18588 FreeExpContents(exp);
18590 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
18591 exp->__anon1.member.member = MkIdentifier("structSize");
18595 exp->expType = __extension__ ({
18596 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18598 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18604 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
18606 exp->expType = __extension__ ({
18607 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18609 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18611 exp->isConstant = 1;
18612 DeclareType(curExternal, type, 1, 0);
18618 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
18621 FreeType(exp->__anon1.cast.exp->destType);
18622 exp->__anon1.cast.exp->destType = type;
18625 ProcessExpressionType(exp->__anon1.cast.exp);
18628 exp->expType = type;
18629 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
18631 void * prev = exp->prev, * next = exp->next;
18632 struct Type * expType = exp->__anon1.cast.exp->destType;
18633 struct Expression * castExp = exp->__anon1.cast.exp;
18634 struct Type * destType = exp->destType;
18637 expType->refCount++;
18638 FreeType(exp->expType);
18639 FreeTypeName(exp->__anon1.cast.typeName);
18641 FreeType(exp->expType);
18642 FreeType(exp->destType);
18643 exp->expType = expType;
18644 exp->destType = destType;
18645 ((castExp ? __extension__ ({
18646 void * __ecerePtrToDelete = (castExp);
18648 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
18649 }) : 0), castExp = 0);
18655 exp->isConstant = exp->__anon1.cast.exp->isConstant;
18661 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
18663 exp->expType = type;
18668 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
18670 ProcessExpressionType(exp->__anon1.vaArg.exp);
18671 exp->expType = type;
18676 struct Expression * e;
18677 struct Type * t = exp->destType;
18679 if(t && !exp->destType->casted)
18681 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18682 CopyTypeInto(t, exp->destType);
18687 exp->isConstant = 1;
18688 FreeType(exp->__anon1.cond.cond->destType);
18689 exp->__anon1.cond.cond->destType = MkClassType("bool");
18690 exp->__anon1.cond.cond->destType->truth = 1;
18691 ProcessExpressionType(exp->__anon1.cond.cond);
18692 if(!exp->__anon1.cond.cond->isConstant)
18693 exp->isConstant = 0;
18694 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
18698 FreeType(e->destType);
18701 e->destType->refCount++;
18703 ProcessExpressionType(e);
18706 exp->expType = e->expType;
18708 e->expType->refCount++;
18711 exp->isConstant = 0;
18713 FreeType(exp->__anon1.cond.elseExp->destType);
18714 exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
18715 if(exp->__anon1.cond.elseExp->destType)
18716 exp->__anon1.cond.elseExp->destType->refCount++;
18717 ProcessExpressionType(exp->__anon1.cond.elseExp);
18718 if(!exp->__anon1.cond.elseExp->isConstant)
18719 exp->isConstant = 0;
18725 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
18727 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
18729 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
18731 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
18733 exp->destType->refCount++;
18735 ProcessStatement(exp->__anon1.compound);
18736 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
18738 exp->expType->refCount++;
18744 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
18746 if(spec && spec->type == 1)
18748 exp->expType = MkClassType(spec->__anon1.__anon1.name);
18749 exp->expType->kind = 19;
18750 exp->byReference = 1;
18754 exp->expType = MkClassType("ecere::com::Class");
18755 exp->byReference = 1;
18761 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
18765 struct Identifier * id = exp->__anon1.classData.id;
18766 char structName[1024];
18767 struct Expression * classExp;
18769 strcpy(structName, "__ecereClassData_");
18770 FullClassNameCat(structName, _class->fullName, 0);
18772 exp->__anon1.member.member = id;
18773 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
18774 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
18776 classExp = MkExpIdentifier(MkIdentifier("class"));
18777 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"))))))));
18778 ProcessExpressionType(exp);
18785 struct Type * type = (((void *)0));
18786 const char * typeString = (((void *)0));
18787 char typeStringBuf[1024];
18789 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))
18791 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
18793 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
18795 else if(exp->__anon1.list)
18797 struct Expression * e;
18799 for(e = (*exp->__anon1.list).first; e; e = e->next)
18801 ProcessExpressionType(e);
18811 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18815 e->expType = (((void *)0));
18816 e = (*exp->__anon1.list).first;
18817 ProcessExpressionType(e);
18820 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18822 FreeType(e->expType);
18823 e->expType = (((void *)0));
18825 type = (((void *)0));
18833 FreeType(e->expType);
18834 e->expType = (((void *)0));
18840 typeStringBuf[0] = '\0';
18841 PrintTypeNoConst(type, typeStringBuf, 0, 1);
18842 typeString = typeStringBuf;
18844 type = (((void *)0));
18849 char templateString[1024];
18850 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18851 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
18852 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18853 struct Expression * expExt;
18854 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
18856 sprintf(templateString, "Container<%s>", typeString);
18857 if(exp->__anon1.list)
18859 struct Expression * e;
18861 type = ProcessTypeString(typeString, 0);
18862 while((e = (*exp->__anon1.list).first))
18864 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
18865 e->destType = type;
18867 ProcessExpressionType(e);
18868 ListAdd(initializers, MkInitializerAssignment(e));
18871 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
18873 DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
18874 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
18875 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18876 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
18877 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18878 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
18879 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18880 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
18881 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18882 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
18883 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18885 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
18887 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18888 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
18889 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18890 exp->expType = ProcessTypeString(templateString, 0);
18892 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
18893 ProcessExpressionType(expExt);
18897 exp->expType = ProcessTypeString("Container", 0);
18898 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18903 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
18905 FreeType(exp->expType);
18906 exp->expType = ReplaceThisClassType(thisClass);
18908 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)
18910 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
18914 if(exp->expType->kind != 15)
18916 struct Type * member;
18917 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
18919 FreeType(exp->expType);
18920 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18921 exp->expType->kind = symbol->type->kind;
18922 exp->expType->refCount++;
18923 exp->expType->__anon1.__anon1.enumName = enumName;
18924 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
18925 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18926 member->refCount++;
18930 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
18932 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18934 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);
18936 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
18941 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)))
18943 exp->byReference = 1;
18946 if(exp->destType && (exp->destType->kind == 18))
18948 else if(exp->destType && !exp->destType->keepCast)
18950 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
18951 exp->needTemplateCast = 1;
18952 if(exp->destType->kind == 0)
18954 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
18956 unsigned int invalidCast = 0;
18958 if(inCompiler && exp->destType->count && exp->expType)
18960 struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
18961 struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
18963 if(c1 && c1->type != 1)
18964 c1 = (((void *)0));
18965 if(c2 && c2->type != 1)
18966 c2 = (((void *)0));
18967 if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
18970 if(!exp->destType->count || unresolved || invalidCast)
18975 if(exp->destType->kind != 14)
18982 char expString[10240];
18984 expString[0] = '\0';
18985 PrintType(exp->destType, type2, 0, 1);
18988 PrintExpression(exp, expString);
18989 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18992 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
18993 else if(exp->type != 16)
18994 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
18999 char expString[10240];
19001 expString[0] = '\0';
19004 PrintExpression(exp, expString);
19005 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19008 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
19009 else if(exp->type != 16)
19010 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
19022 PrintType(exp->expType, type1, 0, 1);
19023 PrintType(exp->destType, type2, 0, 1);
19025 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)))
19029 struct Expression * nbExp = GetNonBracketsExp(exp);
19030 unsigned int skipWarning = 0;
19031 int kind = exp->destType->kind;
19033 if(nbExp->type == 12 && nbExp->destType && !nbExp->destType->casted && nbExp->destType->kind == exp->destType->kind)
19035 if((kind == 1 || kind == 2) && exp->destType->isSigned == exp->expType->signedBeforePromotion && nbExp->type == 4 && nbExp->__anon1.op.exp1 && nbExp->__anon1.op.exp2)
19037 int op = nbExp->__anon1.op.op;
19038 struct Expression * nbExp1, * nbExp2;
19045 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19046 from = nbExp1->expType->promotedFrom;
19047 if(from == 1 || (kind == 2 && from == 2))
19052 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19053 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19054 from = nbExp1->expType->promotedFrom;
19055 if(op == RIGHT_OP && (from == 1 || (kind == 2 && from == 2)))
19057 else if(nbExp2->isConstant && nbExp2->type == 2 && (nbExp->__anon1.op.op == RIGHT_OP || nbExp1->expType->bitMemberSize))
19059 int n = strtol(nbExp2->__anon1.__anon1.constant, (((void *)0)), 0);
19060 int s = from == 1 ? 8 : 16;
19062 if(nbExp1->expType->bitMemberSize && nbExp1->expType->bitMemberSize < s)
19063 s = nbExp1->expType->bitMemberSize;
19064 if(nbExp->__anon1.op.op == RIGHT_OP)
19068 if(s <= (kind == 1 ? 8 : 16))
19073 if(!exp->destType->isSigned)
19075 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19076 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19077 from = nbExp2->expType->promotedFrom;
19078 if((from == 1 || from == 2) && nbExp1->isConstant && nbExp1->type == 2)
19080 int n = strtol(nbExp1->__anon1.__anon1.constant, (((void *)0)), 0);
19082 if(n == (from == 1 ? 255 : 65535))
19091 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19092 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19093 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
19094 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
19095 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)))
19103 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19104 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19105 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
19106 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
19107 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)))
19115 char expString[10240];
19117 expString[0] = '\0';
19120 PrintExpression(exp, expString);
19121 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19123 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")))
19126 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19128 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19133 FreeType(exp->expType);
19134 exp->destType->refCount++;
19135 exp->expType = exp->destType;
19141 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))
19143 struct Expression * nbExp = GetNonBracketsExp(exp);
19145 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
19147 struct Expression * e = MoveExpContents(exp);
19149 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
19151 exp->__anon1.cast.exp->destType = exp->destType;
19153 exp->destType->refCount++;
19154 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
19158 else if(unresolved)
19160 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
19161 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);
19162 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
19163 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
19165 else if(!exp->expType && exp->type != 16)
19167 char expString[10240];
19169 expString[0] = '\0';
19172 PrintExpression(exp, expString);
19173 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19175 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
19178 ApplyAnyObjectLogic(exp);
19179 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)))
19181 exp->byReference = 1;
19183 yylloc = oldyylloc;
19186 static void ProcessFunction(struct FunctionDefinition * function)
19188 struct Identifier * id = GetDeclId(function->declarator);
19189 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
19190 struct Type * type = symbol ? symbol->type : (((void *)0));
19191 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
19192 struct Context * oldTopContext = topContext;
19194 yylloc = function->loc;
19195 if(type && type->__anon1.__anon2.thisClass)
19197 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
19198 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
19199 char className[1024];
19200 char structName[1024];
19201 struct Declarator * funcDecl;
19202 struct Symbol * thisSymbol;
19203 unsigned int typedObject = 0;
19205 if(_class && !_class->base)
19207 _class = currentClass;
19208 if(_class && !_class->symbol)
19209 _class->symbol = FindClass(_class->fullName);
19210 classSym = _class ? _class->symbol : (((void *)0));
19213 thisClass = _class;
19214 if(inCompiler && _class)
19216 if(type->kind == 11)
19218 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
19220 struct Type * param = symbol->type->__anon1.__anon2.params.first;
19222 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
19225 if(type->classObjectType != 1)
19227 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
19228 symbol->type->__anon1.__anon2.staticMethod = 1;
19229 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
19230 symbol->type->extraParam = 0;
19233 strcpy(className, "__ecereClass_");
19234 FullClassNameCat(className, _class->fullName, 1);
19236 FullClassNameCat(structName, _class->fullName, 0);
19237 funcDecl = GetFuncDecl(function->declarator);
19240 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19242 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19244 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19246 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19247 FreeTypeName(param);
19250 if(!function->propertyNoThis)
19252 struct TypeName * thisParam = (((void *)0));
19254 if(type->classObjectType != 1)
19256 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19257 if(!funcDecl->__anon1.function.parameters)
19258 funcDecl->__anon1.function.parameters = MkList();
19259 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19263 if(type->classObjectType != 1)
19265 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
19266 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
19268 thisParam = __extension__ ({
19269 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
19271 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
19273 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
19274 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19278 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19280 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19282 funcDecl = GetFuncDecl(initDecl->declarator);
19285 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19287 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19289 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19291 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19292 FreeTypeName(param);
19295 if(type->classObjectType != 1)
19297 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
19299 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19301 if(!funcDecl->__anon1.function.parameters)
19302 funcDecl->__anon1.function.parameters = MkList();
19303 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19311 if(type->classObjectType != 1)
19313 thisSymbol = __extension__ ({
19314 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
19316 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
19318 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19319 if(typedObject && thisSymbol->type)
19321 thisSymbol->type->classObjectType = 2;
19322 thisSymbol->type->byReference = type->byReference;
19323 thisSymbol->type->typedByReference = type->byReference;
19327 if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
19329 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
19332 struct __ecereNameSpace__ecere__com__Class * base;
19334 for(base = _class; base && base->type != 1000; base = base->next)
19336 for(member = base->membersAndProperties.first; member; member = member->next)
19337 if(!member->isProperty)
19343 for(member = _class->membersAndProperties.first; member; member = member->next)
19344 if(!member->isProperty)
19348 char pointerName[1024];
19349 struct Declaration * decl;
19350 struct Initializer * initializer;
19351 struct Expression * exp, * bytePtr;
19353 strcpy(pointerName, "__ecerePointer_");
19354 FullClassNameCat(pointerName, _class->fullName, 0);
19356 char className[1024];
19358 strcpy(className, "__ecereClass_");
19359 FullClassNameCat(className, classSym->string, 1);
19360 DeclareClass(curExternal, classSym, className);
19362 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
19365 struct Expression * e;
19367 if(_class->offset && _class->offset == (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize))
19369 e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
19370 ProcessExpressionType(e);
19376 sprintf(string, "%d", _class->offset);
19377 e = MkExpConstant(string);
19379 exp = QBrackets(MkExpOp(bytePtr, '+', e));
19383 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
19385 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
19386 exp->expType = __extension__ ({
19387 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19389 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
19390 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19392 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
19393 }), __ecereInstance2;
19397 yylloc = function->body->loc;
19398 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
19400 struct Context * prevContext = curContext;
19401 struct __ecereNameSpace__ecere__sys__OldList * list;
19403 curContext = function->body->__anon1.compound.context;
19404 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
19405 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
19406 curContext = prevContext;
19408 decl->symbol = (((void *)0));
19409 if(!function->body->__anon1.compound.declarations)
19410 function->body->__anon1.compound.declarations = MkList();
19411 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
19417 thisClass = (((void *)0));
19420 FreeSpecifier(id->_class);
19421 id->_class = (((void *)0));
19422 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19424 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19426 id = GetDeclId(initDecl->declarator);
19427 FreeSpecifier(id->_class);
19428 id->_class = (((void *)0));
19432 topContext = function->body->__anon1.compound.context;
19434 struct FunctionDefinition * oldFunction = curFunction;
19436 curFunction = function;
19438 ProcessStatement(function->body);
19439 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
19441 struct Statement * prevCompound = curCompound;
19442 struct Context * prevContext = curContext;
19443 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
19445 if(!function->body->__anon1.compound.statements)
19446 function->body->__anon1.compound.statements = MkList();
19447 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
19448 curCompound = function->body;
19449 curContext = function->body->__anon1.compound.context;
19450 ProcessStatement(fireWatchers);
19451 curContext = prevContext;
19452 curCompound = prevCompound;
19454 curFunction = oldFunction;
19456 if(function->declarator)
19458 ProcessDeclarator(function->declarator, 1);
19460 topContext = oldTopContext;
19461 thisClass = oldThisClass;
19464 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
19466 struct ClassDef * def;
19467 struct External * external = curExternal;
19468 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
19470 for(def = definitions->first; def; def = def->next)
19474 if(def->__anon1.function->declarator)
19475 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
19477 curExternal = external;
19478 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
19480 else if(def->type == 2)
19482 if(def->__anon1.decl->type == 2)
19484 thisClass = regClass;
19485 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
19486 thisClass = (((void *)0));
19490 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
19493 thisClass = regClass;
19494 ProcessDeclaration(def->__anon1.decl, symbol ? 1 : 0);
19495 thisClass = backThisClass;
19498 else if(def->type == 1 && def->__anon1.defProperties)
19500 struct MemberInit * defProperty;
19501 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);
19503 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19504 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
19506 thisClass = regClass;
19507 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
19508 thisClass = (((void *)0));
19510 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19511 FreeSymbol(thisSymbol);
19513 else if(def->type == 3 && def->__anon1.propertyDef)
19515 struct PropertyDef * prop = def->__anon1.propertyDef;
19517 thisClass = regClass;
19522 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19524 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19526 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
19527 ProcessStatement(prop->setStmt);
19533 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19535 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19537 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
19538 ProcessStatement(prop->getStmt);
19540 if(prop->issetStmt)
19544 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19546 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19548 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
19549 ProcessStatement(prop->issetStmt);
19551 thisClass = (((void *)0));
19553 else if(def->type == 4 && def->__anon1.propertyWatch)
19555 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
19557 thisClass = regClass;
19558 if(propertyWatch->compound)
19560 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);
19562 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19563 curExternal = (((void *)0));
19564 ProcessStatement(propertyWatch->compound);
19566 thisClass = (((void *)0));
19571 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19573 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19575 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19576 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19577 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19578 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19579 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19580 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19581 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19582 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19583 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19584 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19585 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19586 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19587 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19588 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19589 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19590 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19591 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19592 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19593 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19594 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19595 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19596 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19597 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19598 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19599 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19600 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19601 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19602 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19603 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19604 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19605 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19606 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19607 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19608 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19609 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19610 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19611 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19612 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19613 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19614 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19615 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19616 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19617 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19618 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19619 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19620 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19621 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19622 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19623 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19624 __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);
19625 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "External DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference)", DeclareStruct, module, 2);
19626 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclareStruct", "External _DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference, bool fwdDecl)", _DeclareStruct, module, 2);
19627 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(External neededBy, ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19628 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19629 __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);
19630 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19631 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareType", "void DeclareType(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareType, module, 2);
19632 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareTypeForwardDeclare", "void DeclareTypeForwardDeclare(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareTypeForwardDeclare, module, 2);
19633 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19634 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19635 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19636 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19637 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19638 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(External neededFor, ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19639 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19640 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19641 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19642 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(External neededFor, ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19643 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(External neededFor, GlobalData data)", DeclareGlobalData, module, 2);
19644 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19645 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)
19646 __ecereClass_Conversion = class;
19647 __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);
19648 __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);
19649 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19650 __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);
19651 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19652 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19653 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19654 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19655 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19656 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19657 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19658 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19659 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19660 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19661 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19662 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19663 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19664 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19665 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19666 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19667 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19668 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19669 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19670 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("RelatedUnits", "bool RelatedUnits(ecere::com::Class c1, ecere::com::Class c2)", RelatedUnits, module, 1);
19671 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19672 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(External neededBy, const String s)", DeclareFunctionUtil, module, 1);
19673 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);