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 needTemplateCast;
1406 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1410 struct Initializer * prev;
1411 struct Initializer * next;
1412 struct Location loc;
1416 struct Expression * exp;
1417 struct __ecereNameSpace__ecere__sys__OldList * list;
1418 } ecere_gcc_struct __anon1;
1419 unsigned int isConstant;
1420 struct Identifier * id;
1423 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1425 extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
1427 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
1429 struct InitDeclarator
1431 struct InitDeclarator * prev;
1432 struct InitDeclarator * next;
1433 struct Location loc;
1434 struct Declarator * declarator;
1435 struct Initializer * initializer;
1438 void ApplyLocation(struct Expression * exp, struct Location * loc)
1444 if(exp->__anon1.op.exp1)
1445 ApplyLocation(exp->__anon1.op.exp1, loc);
1446 if(exp->__anon1.op.exp2)
1447 ApplyLocation(exp->__anon1.op.exp2, loc);
1450 if(exp->__anon1.list)
1452 struct Expression * e;
1454 for(e = (*exp->__anon1.list).first; e; e = e->next)
1455 ApplyLocation(e, loc);
1459 if(exp->__anon1.index.index)
1461 struct Expression * e;
1463 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
1464 ApplyLocation(e, loc);
1466 if(exp->__anon1.index.exp)
1467 ApplyLocation(exp->__anon1.index.exp, loc);
1470 if(exp->__anon1.call.arguments)
1472 struct Expression * arg;
1474 for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
1475 ApplyLocation(arg, loc);
1477 if(exp->__anon1.call.exp)
1478 ApplyLocation(exp->__anon1.call.exp, loc);
1482 if(exp->__anon1.member.exp)
1483 ApplyLocation(exp->__anon1.member.exp, loc);
1486 if(exp->__anon1.cast.exp)
1487 ApplyLocation(exp->__anon1.cast.exp, loc);
1490 if(exp->__anon1.cond.exp)
1492 struct Expression * e;
1494 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
1495 ApplyLocation(e, loc);
1497 if(exp->__anon1.cond.cond)
1498 ApplyLocation(exp->__anon1.cond.cond, loc);
1499 if(exp->__anon1.cond.elseExp)
1500 ApplyLocation(exp->__anon1.cond.elseExp, loc);
1503 if(exp->__anon1.vaArg.exp)
1504 ApplyLocation(exp->__anon1.vaArg.exp, loc);
1511 void __ecereMethod_Expression_Clear();
1517 struct MembersInit * prev;
1518 struct MembersInit * next;
1519 struct Location loc;
1523 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
1524 struct ClassFunction * function;
1525 } ecere_gcc_struct __anon1;
1528 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
1534 unsigned int (* Add)(struct Expression *, struct Operand *, struct Operand *);
1535 unsigned int (* Sub)(struct Expression *, struct Operand *, struct Operand *);
1536 unsigned int (* Mul)(struct Expression *, struct Operand *, struct Operand *);
1537 unsigned int (* Div)(struct Expression *, struct Operand *, struct Operand *);
1538 unsigned int (* Mod)(struct Expression *, struct Operand *, struct Operand *);
1539 unsigned int (* Neg)(struct Expression *, struct Operand *);
1540 unsigned int (* Inc)(struct Expression *, struct Operand *);
1541 unsigned int (* Dec)(struct Expression *, struct Operand *);
1542 unsigned int (* Asign)(struct Expression *, struct Operand *, struct Operand *);
1543 unsigned int (* AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1544 unsigned int (* SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1545 unsigned int (* MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1546 unsigned int (* DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1547 unsigned int (* ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1548 unsigned int (* BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1549 unsigned int (* BitOr)(struct Expression *, struct Operand *, struct Operand *);
1550 unsigned int (* BitXor)(struct Expression *, struct Operand *, struct Operand *);
1551 unsigned int (* LShift)(struct Expression *, struct Operand *, struct Operand *);
1552 unsigned int (* RShift)(struct Expression *, struct Operand *, struct Operand *);
1553 unsigned int (* BitNot)(struct Expression *, struct Operand *);
1554 unsigned int (* AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1555 unsigned int (* OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1556 unsigned int (* XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1557 unsigned int (* LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1558 unsigned int (* RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1559 unsigned int (* Not)(struct Expression *, struct Operand *);
1560 unsigned int (* Equ)(struct Expression *, struct Operand *, struct Operand *);
1561 unsigned int (* Nqu)(struct Expression *, struct Operand *, struct Operand *);
1562 unsigned int (* And)(struct Expression *, struct Operand *, struct Operand *);
1563 unsigned int (* Or)(struct Expression *, struct Operand *, struct Operand *);
1564 unsigned int (* Grt)(struct Expression *, struct Operand *, struct Operand *);
1565 unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *);
1566 unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1567 unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1568 unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1575 unsigned int ptrSize;
1588 } ecere_gcc_struct __anon1;
1592 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl);
1594 struct External * DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference)
1596 return _DeclareStruct(neededBy, name, skipNoHead, needDereference, 0);
1599 static void _DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef, unsigned int fwdDecl);
1601 void DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef)
1603 _DeclareType(neededFor, type, needDereference, forFunctionDef, 0);
1606 void DeclareTypeForwardDeclare(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef)
1608 _DeclareType(neededFor, type, needDereference, forFunctionDef, 1);
1611 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst);
1613 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
1615 _PrintType(type, string, printName, fullName, 1);
1618 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
1620 _PrintType(type, string, printName, fullName, 0);
1623 struct __ecereNameSpace__ecere__com__Method;
1625 struct __ecereNameSpace__ecere__com__Method
1628 struct __ecereNameSpace__ecere__com__Method * parent;
1629 struct __ecereNameSpace__ecere__com__Method * left;
1630 struct __ecereNameSpace__ecere__com__Method * right;
1635 struct __ecereNameSpace__ecere__com__Class * _class;
1637 const char * dataTypeString;
1638 struct Type * dataType;
1645 struct Symbol * parent;
1646 struct Symbol * left;
1647 struct Symbol * right;
1652 struct __ecereNameSpace__ecere__com__Method * method;
1653 struct __ecereNameSpace__ecere__com__Property * _property;
1654 struct __ecereNameSpace__ecere__com__Class * registered;
1655 } ecere_gcc_struct __anon1;
1656 unsigned int notYetDeclared;
1661 struct External * pointerExternal;
1662 struct External * structExternal;
1663 } ecere_gcc_struct __anon1;
1666 struct External * externalGet;
1667 struct External * externalSet;
1668 struct External * externalPtr;
1669 struct External * externalIsSet;
1670 } ecere_gcc_struct __anon2;
1673 struct External * methodExternal;
1674 struct External * methodCodeExternal;
1675 } ecere_gcc_struct __anon3;
1676 } ecere_gcc_struct __anon2;
1677 unsigned int imported;
1678 unsigned int declaredStructSym;
1679 struct __ecereNameSpace__ecere__com__Class * _class;
1680 unsigned int declaredStruct;
1681 unsigned int needConstructor;
1682 unsigned int needDestructor;
1683 char * constructorName;
1686 char * destructorName;
1687 struct ModuleImport * module;
1688 struct ClassImport * _import;
1689 struct Location nameLoc;
1690 unsigned int isParam;
1691 unsigned int isRemote;
1692 unsigned int isStruct;
1693 unsigned int fireWatchersDone;
1695 unsigned int classData;
1696 unsigned int isStatic;
1698 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
1699 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
1700 struct Context * ctx;
1702 struct Expression * propCategory;
1703 unsigned int mustRegister;
1706 struct __ecereNameSpace__ecere__com__ClassProperty;
1708 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
1710 struct __ecereNameSpace__ecere__com__ClassProperty
1713 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1714 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1715 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1717 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
1718 long long (* Get)(struct __ecereNameSpace__ecere__com__Class *);
1719 const char * dataTypeString;
1720 struct Type * dataType;
1721 unsigned int constant;
1724 struct __ecereNameSpace__ecere__com__BitMember;
1726 struct __ecereNameSpace__ecere__com__BitMember
1728 struct __ecereNameSpace__ecere__com__BitMember * prev;
1729 struct __ecereNameSpace__ecere__com__BitMember * next;
1731 unsigned int isProperty;
1734 struct __ecereNameSpace__ecere__com__Class * _class;
1735 const char * dataTypeString;
1736 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1737 struct Type * dataType;
1744 struct __ecereNameSpace__ecere__com__DataMember;
1746 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1752 const char * dataTypeString;
1753 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1754 } ecere_gcc_struct __anon1;
1755 struct __ecereNameSpace__ecere__com__DataValue expression;
1758 const char * memberString;
1761 struct __ecereNameSpace__ecere__com__DataMember * member;
1762 struct __ecereNameSpace__ecere__com__Property * prop;
1763 struct __ecereNameSpace__ecere__com__Method * method;
1764 } ecere_gcc_struct __anon1;
1765 } ecere_gcc_struct __anon2;
1766 } ecere_gcc_struct __anon1;
1769 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);
1771 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);
1773 struct TemplateParameter;
1775 struct TemplateParameter
1777 struct TemplateParameter * prev;
1778 struct TemplateParameter * next;
1779 struct Location loc;
1781 struct Identifier * identifier;
1784 struct TemplateDatatype * dataType;
1786 } ecere_gcc_struct __anon1;
1787 struct TemplateArgument * defaultArgument;
1788 const char * dataTypeString;
1789 struct Type * baseType;
1799 struct Symbol * _class;
1802 struct __ecereNameSpace__ecere__sys__OldList members;
1804 } ecere_gcc_struct __anon1;
1807 struct Type * returnType;
1808 struct __ecereNameSpace__ecere__sys__OldList params;
1809 struct Symbol * thisClass;
1810 unsigned int staticMethod;
1811 struct TemplateParameter * thisClassTemplate;
1812 } ecere_gcc_struct __anon2;
1815 struct __ecereNameSpace__ecere__com__Method * method;
1816 struct __ecereNameSpace__ecere__com__Class * methodClass;
1817 struct __ecereNameSpace__ecere__com__Class * usedClass;
1818 } ecere_gcc_struct __anon3;
1821 struct Type * arrayType;
1823 struct Expression * arraySizeExp;
1824 unsigned int freeExp;
1825 struct Symbol * enumClass;
1826 } ecere_gcc_struct __anon4;
1828 struct TemplateParameter * templateParameter;
1829 } ecere_gcc_struct __anon1;
1834 struct __ecereNameSpace__ecere__com__Class * thisClassFrom;
1836 int classObjectType;
1838 unsigned int offset;
1842 unsigned int isSigned : 1;
1843 unsigned int constant : 1;
1844 unsigned int truth : 1;
1845 unsigned int byReference : 1;
1846 unsigned int extraParam : 1;
1847 unsigned int directClassAccess : 1;
1848 unsigned int computing : 1;
1849 unsigned int keepCast : 1;
1850 unsigned int passAsTemplate : 1;
1851 unsigned int dllExport : 1;
1852 unsigned int attrStdcall : 1;
1853 unsigned int declaredWithStruct : 1;
1854 unsigned int typedByReference : 1;
1855 unsigned int casted : 1;
1856 unsigned int pointerAlignment : 1;
1857 unsigned int isLong : 1;
1858 unsigned int signedBeforePromotion : 1;
1863 struct Specifier * prev;
1864 struct Specifier * next;
1865 struct Location loc;
1872 struct ExtDecl * extDecl;
1874 struct Symbol * symbol;
1875 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
1876 struct Specifier * nsSpec;
1877 } ecere_gcc_struct __anon1;
1880 struct Identifier * id;
1881 struct __ecereNameSpace__ecere__sys__OldList * list;
1882 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
1883 struct __ecereNameSpace__ecere__sys__OldList * definitions;
1884 unsigned int addNameSpace;
1885 struct Context * ctx;
1886 struct ExtDecl * extDeclStruct;
1887 } ecere_gcc_struct __anon2;
1888 struct Expression * expression;
1889 struct Specifier * _class;
1890 struct TemplateParameter * templateParameter;
1891 } ecere_gcc_struct __anon1;
1894 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
1896 struct TemplatedType
1899 struct __ecereNameSpace__ecere__sys__BTNode * parent;
1900 struct __ecereNameSpace__ecere__sys__BTNode * left;
1901 struct __ecereNameSpace__ecere__sys__BTNode * right;
1903 struct TemplateParameter * param;
1906 struct Type * ProcessTemplateParameterType(struct TemplateParameter * param)
1908 if(param && param->type == 0 && (param->__anon1.dataType || param->dataTypeString))
1910 if(!param->baseType)
1912 if(param->dataTypeString)
1913 param->baseType = ProcessTypeString(param->dataTypeString, 0);
1915 param->baseType = ProcessType(param->__anon1.dataType->specifiers, param->__anon1.dataType->decl);
1917 return param->baseType;
1919 return (((void *)0));
1922 unsigned int NeedCast(struct Type * type1, struct Type * type2)
1924 if(!type1 || !type2 || type1->keepCast || type2->keepCast)
1926 if(type1->kind == 20 && type2->kind == 4 && type2->passAsTemplate == 0)
1930 if(type1->kind == type2->kind && type1->isLong == type2->isLong)
1941 if(type1->passAsTemplate && !type2->passAsTemplate)
1943 return type1->isSigned != type2->isSigned;
1945 return type1->__anon1._class != type2->__anon1._class;
1947 return (type1->__anon1.type && type2->__anon1.type && type1->__anon1.type->constant != type2->__anon1.type->constant) || NeedCast(type1->__anon1.type, type2->__anon1.type);
1955 unsigned int GetOpInt(struct Operand * op2, int * value2)
1957 if(op2->kind == 3 && op2->type->isSigned)
1958 *value2 = op2->__anon1.i;
1959 else if(op2->kind == 3)
1960 *value2 = (int)op2->__anon1.ui;
1961 else if(op2->kind == 4 && op2->type->isSigned)
1962 *value2 = (int)op2->__anon1.i64;
1963 else if(op2->kind == 4)
1964 *value2 = (int)op2->__anon1.ui64;
1965 else if(op2->kind == 23 && op2->type->isSigned)
1966 *value2 = (int)op2->__anon1.i64;
1967 else if(op2->kind == 23)
1968 *value2 = (int)op2->__anon1.ui64;
1969 else if(op2->kind == 22 && op2->type->isSigned)
1970 *value2 = (int)op2->__anon1.i64;
1971 else if(op2->kind == 22)
1972 *value2 = (int)op2->__anon1.ui64;
1973 else if(op2->kind == 2 && op2->type->isSigned)
1974 *value2 = (int)op2->__anon1.s;
1975 else if(op2->kind == 2)
1976 *value2 = (int)op2->__anon1.us;
1977 else if(op2->kind == 1 && op2->type->isSigned)
1978 *value2 = (int)op2->__anon1.c;
1979 else if(op2->kind == 24 || op2->kind == 1)
1980 *value2 = (int)op2->__anon1.uc;
1981 else if(op2->kind == 6)
1982 *value2 = (int)op2->__anon1.f;
1983 else if(op2->kind == 7)
1984 *value2 = (int)op2->__anon1.d;
1985 else if(op2->kind == 13)
1986 *value2 = (int)op2->__anon1.ui64;
1992 unsigned int GetOpUInt(struct Operand * op2, unsigned int * value2)
1994 if(op2->kind == 3 && op2->type->isSigned)
1995 *value2 = (unsigned int)op2->__anon1.i;
1996 else if(op2->kind == 3)
1997 *value2 = op2->__anon1.ui;
1998 else if(op2->kind == 4 && op2->type->isSigned)
1999 *value2 = (unsigned int)op2->__anon1.i64;
2000 else if(op2->kind == 4)
2001 *value2 = (unsigned int)op2->__anon1.ui64;
2002 else if(op2->kind == 23 && op2->type->isSigned)
2003 *value2 = (unsigned int)op2->__anon1.i64;
2004 else if(op2->kind == 23)
2005 *value2 = (unsigned int)op2->__anon1.ui64;
2006 else if(op2->kind == 22 && op2->type->isSigned)
2007 *value2 = (unsigned int)op2->__anon1.i64;
2008 else if(op2->kind == 22)
2009 *value2 = (unsigned int)op2->__anon1.ui64;
2010 else if(op2->kind == 2 && op2->type->isSigned)
2011 *value2 = (unsigned int)op2->__anon1.s;
2012 else if(op2->kind == 2)
2013 *value2 = (unsigned int)op2->__anon1.us;
2014 else if(op2->kind == 1 && op2->type->isSigned)
2015 *value2 = (unsigned int)op2->__anon1.c;
2016 else if(op2->kind == 24 || op2->kind == 1)
2017 *value2 = (unsigned int)op2->__anon1.uc;
2018 else if(op2->kind == 6)
2019 *value2 = (unsigned int)op2->__anon1.f;
2020 else if(op2->kind == 7)
2021 *value2 = (unsigned int)op2->__anon1.d;
2022 else if(op2->kind == 13)
2023 *value2 = (unsigned int)op2->__anon1.ui64;
2029 unsigned int GetOpInt64(struct Operand * op2, long long * value2)
2031 if(op2->kind == 3 && op2->type->isSigned)
2032 *value2 = (long long)op2->__anon1.i;
2033 else if(op2->kind == 3)
2034 *value2 = (long long)op2->__anon1.ui;
2035 else if(op2->kind == 4 && op2->type->isSigned)
2036 *value2 = op2->__anon1.i64;
2037 else if(op2->kind == 4)
2038 *value2 = (long long)op2->__anon1.ui64;
2039 else if(op2->kind == 23 && op2->type->isSigned)
2040 *value2 = op2->__anon1.i64;
2041 else if(op2->kind == 23)
2042 *value2 = (long long)op2->__anon1.ui64;
2043 else if(op2->kind == 22 && op2->type->isSigned)
2044 *value2 = op2->__anon1.i64;
2045 else if(op2->kind == 22)
2046 *value2 = (long long)op2->__anon1.ui64;
2047 else if(op2->kind == 2 && op2->type->isSigned)
2048 *value2 = (long long)op2->__anon1.s;
2049 else if(op2->kind == 2)
2050 *value2 = (long long)op2->__anon1.us;
2051 else if(op2->kind == 1 && op2->type->isSigned)
2052 *value2 = (long long)op2->__anon1.c;
2053 else if(op2->kind == 24 || op2->kind == 1)
2054 *value2 = (long long)op2->__anon1.uc;
2055 else if(op2->kind == 6)
2056 *value2 = (long long)op2->__anon1.f;
2057 else if(op2->kind == 7)
2058 *value2 = (long long)op2->__anon1.d;
2059 else if(op2->kind == 13)
2060 *value2 = (long long)op2->__anon1.ui64;
2066 unsigned int GetOpUInt64(struct Operand * op2, uint64 * value2)
2068 if(op2->kind == 3 && op2->type->isSigned)
2069 *value2 = (uint64)op2->__anon1.i;
2070 else if(op2->kind == 3)
2071 *value2 = (uint64)op2->__anon1.ui;
2072 else if(op2->kind == 4 && op2->type->isSigned)
2073 *value2 = (uint64)op2->__anon1.i64;
2074 else if(op2->kind == 4)
2075 *value2 = op2->__anon1.ui64;
2076 else if(op2->kind == 23 && op2->type->isSigned)
2077 *value2 = (uint64)op2->__anon1.i64;
2078 else if(op2->kind == 23)
2079 *value2 = op2->__anon1.ui64;
2080 else if(op2->kind == 22 && op2->type->isSigned)
2081 *value2 = (uint64)op2->__anon1.i64;
2082 else if(op2->kind == 22)
2083 *value2 = op2->__anon1.ui64;
2084 else if(op2->kind == 2 && op2->type->isSigned)
2085 *value2 = (uint64)op2->__anon1.s;
2086 else if(op2->kind == 2)
2087 *value2 = (uint64)op2->__anon1.us;
2088 else if(op2->kind == 1 && op2->type->isSigned)
2089 *value2 = (uint64)op2->__anon1.c;
2090 else if(op2->kind == 24 || op2->kind == 1)
2091 *value2 = (uint64)op2->__anon1.uc;
2092 else if(op2->kind == 6)
2093 *value2 = (uint64)op2->__anon1.f;
2094 else if(op2->kind == 7)
2095 *value2 = (uint64)op2->__anon1.d;
2096 else if(op2->kind == 13)
2097 *value2 = op2->__anon1.ui64;
2103 unsigned int GetOpIntPtr(struct Operand * op2, intptr_t * value2)
2105 if(op2->kind == 3 && op2->type->isSigned)
2106 *value2 = (intptr_t)op2->__anon1.i;
2107 else if(op2->kind == 3)
2108 *value2 = (intptr_t)op2->__anon1.ui;
2109 else if(op2->kind == 4 && op2->type->isSigned)
2110 *value2 = (intptr_t)op2->__anon1.i64;
2111 else if(op2->kind == 4)
2112 *value2 = (intptr_t)op2->__anon1.ui64;
2113 else if(op2->kind == 23 && op2->type->isSigned)
2114 *value2 = (intptr_t)op2->__anon1.i64;
2115 else if(op2->kind == 23)
2116 *value2 = (intptr_t)op2->__anon1.ui64;
2117 else if(op2->kind == 22 && op2->type->isSigned)
2118 *value2 = (intptr_t)op2->__anon1.i64;
2119 else if(op2->kind == 22)
2120 *value2 = (intptr_t)op2->__anon1.ui64;
2121 else if(op2->kind == 2 && op2->type->isSigned)
2122 *value2 = (intptr_t)op2->__anon1.s;
2123 else if(op2->kind == 2)
2124 *value2 = (intptr_t)op2->__anon1.us;
2125 else if(op2->kind == 1 && op2->type->isSigned)
2126 *value2 = (intptr_t)op2->__anon1.c;
2127 else if(op2->kind == 24 || op2->kind == 1)
2128 *value2 = (intptr_t)op2->__anon1.uc;
2129 else if(op2->kind == 6)
2130 *value2 = (intptr_t)op2->__anon1.f;
2131 else if(op2->kind == 7)
2132 *value2 = (intptr_t)op2->__anon1.d;
2133 else if(op2->kind == 13)
2134 *value2 = (intptr_t)op2->__anon1.ui64;
2140 unsigned int GetOpUIntPtr(struct Operand * op2, uintptr_t * value2)
2142 if(op2->kind == 3 && op2->type->isSigned)
2143 *value2 = (uintptr_t)op2->__anon1.i;
2144 else if(op2->kind == 3)
2145 *value2 = (uintptr_t)op2->__anon1.ui;
2146 else if(op2->kind == 4 && op2->type->isSigned)
2147 *value2 = (uintptr_t)op2->__anon1.i64;
2148 else if(op2->kind == 4)
2149 *value2 = (uintptr_t)op2->__anon1.ui64;
2150 else if(op2->kind == 23 && op2->type->isSigned)
2151 *value2 = (uintptr_t)op2->__anon1.i64;
2152 else if(op2->kind == 23)
2153 *value2 = (uintptr_t)op2->__anon1.ui64;
2154 else if(op2->kind == 22 && op2->type->isSigned)
2155 *value2 = (uintptr_t)op2->__anon1.i64;
2156 else if(op2->kind == 22)
2157 *value2 = (uintptr_t)op2->__anon1.ui64;
2158 else if(op2->kind == 2 && op2->type->isSigned)
2159 *value2 = (uintptr_t)op2->__anon1.s;
2160 else if(op2->kind == 2)
2161 *value2 = (uintptr_t)op2->__anon1.us;
2162 else if(op2->kind == 1 && op2->type->isSigned)
2163 *value2 = (uintptr_t)op2->__anon1.c;
2164 else if(op2->kind == 24 || op2->kind == 1)
2165 *value2 = (uintptr_t)op2->__anon1.uc;
2166 else if(op2->kind == 6)
2167 *value2 = (uintptr_t)op2->__anon1.f;
2168 else if(op2->kind == 7)
2169 *value2 = (uintptr_t)op2->__anon1.d;
2170 else if(op2->kind == 13)
2171 *value2 = (uintptr_t)op2->__anon1.ui64;
2177 unsigned int GetOpIntSize(struct Operand * op2, ssize_t * value2)
2179 if(op2->kind == 3 && op2->type->isSigned)
2180 *value2 = (ssize_t)op2->__anon1.i;
2181 else if(op2->kind == 3)
2182 *value2 = (ssize_t)op2->__anon1.ui;
2183 else if(op2->kind == 4 && op2->type->isSigned)
2184 *value2 = (ssize_t)op2->__anon1.i64;
2185 else if(op2->kind == 4)
2186 *value2 = (ssize_t)op2->__anon1.ui64;
2187 else if(op2->kind == 23 && op2->type->isSigned)
2188 *value2 = (ssize_t)op2->__anon1.i64;
2189 else if(op2->kind == 23)
2190 *value2 = (ssize_t)op2->__anon1.ui64;
2191 else if(op2->kind == 22 && op2->type->isSigned)
2192 *value2 = (ssize_t)op2->__anon1.i64;
2193 else if(op2->kind == 22)
2194 *value2 = (ssize_t)op2->__anon1.ui64;
2195 else if(op2->kind == 2 && op2->type->isSigned)
2196 *value2 = (ssize_t)op2->__anon1.s;
2197 else if(op2->kind == 2)
2198 *value2 = (ssize_t)op2->__anon1.us;
2199 else if(op2->kind == 1 && op2->type->isSigned)
2200 *value2 = (ssize_t)op2->__anon1.c;
2201 else if(op2->kind == 24 || op2->kind == 1)
2202 *value2 = (ssize_t)op2->__anon1.uc;
2203 else if(op2->kind == 6)
2204 *value2 = (ssize_t)op2->__anon1.f;
2205 else if(op2->kind == 7)
2206 *value2 = (ssize_t)op2->__anon1.d;
2207 else if(op2->kind == 13)
2208 *value2 = (ssize_t)op2->__anon1.ui64;
2214 unsigned int GetOpUIntSize(struct Operand * op2, size_t * value2)
2216 if(op2->kind == 3 && op2->type->isSigned)
2217 *value2 = (size_t)op2->__anon1.i;
2218 else if(op2->kind == 3)
2219 *value2 = (size_t)op2->__anon1.ui;
2220 else if(op2->kind == 4 && op2->type->isSigned)
2221 *value2 = (size_t)op2->__anon1.i64;
2222 else if(op2->kind == 4)
2223 *value2 = (size_t)op2->__anon1.ui64;
2224 else if(op2->kind == 23 && op2->type->isSigned)
2225 *value2 = (size_t)op2->__anon1.i64;
2226 else if(op2->kind == 23)
2227 *value2 = (size_t)op2->__anon1.ui64;
2228 else if(op2->kind == 22 && op2->type->isSigned)
2229 *value2 = (size_t)op2->__anon1.i64;
2230 else if(op2->kind == 22)
2231 *value2 = (size_t)op2->__anon1.ui64;
2232 else if(op2->kind == 2 && op2->type->isSigned)
2233 *value2 = (size_t)op2->__anon1.s;
2234 else if(op2->kind == 2)
2235 *value2 = (size_t)op2->__anon1.us;
2236 else if(op2->kind == 1 && op2->type->isSigned)
2237 *value2 = (size_t)op2->__anon1.c;
2238 else if(op2->kind == 24 || op2->kind == 1)
2239 *value2 = (size_t)op2->__anon1.uc;
2240 else if(op2->kind == 6)
2241 *value2 = (size_t)op2->__anon1.f;
2242 else if(op2->kind == 7)
2243 *value2 = (size_t)op2->__anon1.d;
2244 else if(op2->kind == 13)
2245 *value2 = (size_t)op2->__anon1.ui64;
2251 unsigned int GetOpShort(struct Operand * op2, short * value2)
2253 if(op2->kind == 3 && op2->type->isSigned)
2254 *value2 = (short)op2->__anon1.i;
2255 else if(op2->kind == 3)
2256 *value2 = (short)op2->__anon1.ui;
2257 else if(op2->kind == 4 && op2->type->isSigned)
2258 *value2 = (short)op2->__anon1.i64;
2259 else if(op2->kind == 4)
2260 *value2 = (short)op2->__anon1.ui64;
2261 else if(op2->kind == 23 && op2->type->isSigned)
2262 *value2 = (short)op2->__anon1.i64;
2263 else if(op2->kind == 23)
2264 *value2 = (short)op2->__anon1.ui64;
2265 else if(op2->kind == 22 && op2->type->isSigned)
2266 *value2 = (short)op2->__anon1.i64;
2267 else if(op2->kind == 22)
2268 *value2 = (short)op2->__anon1.ui64;
2269 else if(op2->kind == 2 && op2->type->isSigned)
2270 *value2 = op2->__anon1.s;
2271 else if(op2->kind == 2)
2272 *value2 = (short)op2->__anon1.us;
2273 else if(op2->kind == 1 && op2->type->isSigned)
2274 *value2 = (short)op2->__anon1.c;
2275 else if(op2->kind == 24 || op2->kind == 1)
2276 *value2 = (short)op2->__anon1.uc;
2277 else if(op2->kind == 6)
2278 *value2 = (short)op2->__anon1.f;
2279 else if(op2->kind == 7)
2280 *value2 = (short)op2->__anon1.d;
2281 else if(op2->kind == 13)
2282 *value2 = (short)op2->__anon1.ui64;
2288 unsigned int GetOpUShort(struct Operand * op2, unsigned short * value2)
2290 if(op2->kind == 3 && op2->type->isSigned)
2291 *value2 = (unsigned short)op2->__anon1.i;
2292 else if(op2->kind == 3)
2293 *value2 = (unsigned short)op2->__anon1.ui;
2294 else if(op2->kind == 4 && op2->type->isSigned)
2295 *value2 = (unsigned short)op2->__anon1.i64;
2296 else if(op2->kind == 4)
2297 *value2 = (unsigned short)op2->__anon1.ui64;
2298 else if(op2->kind == 23 && op2->type->isSigned)
2299 *value2 = (unsigned short)op2->__anon1.i64;
2300 else if(op2->kind == 23)
2301 *value2 = (unsigned short)op2->__anon1.ui64;
2302 else if(op2->kind == 22 && op2->type->isSigned)
2303 *value2 = (unsigned short)op2->__anon1.i64;
2304 else if(op2->kind == 22)
2305 *value2 = (unsigned short)op2->__anon1.ui64;
2306 else if(op2->kind == 2 && op2->type->isSigned)
2307 *value2 = (unsigned short)op2->__anon1.s;
2308 else if(op2->kind == 2)
2309 *value2 = op2->__anon1.us;
2310 else if(op2->kind == 1 && op2->type->isSigned)
2311 *value2 = (unsigned short)op2->__anon1.c;
2312 else if(op2->kind == 24 || op2->kind == 1)
2313 *value2 = (unsigned short)op2->__anon1.uc;
2314 else if(op2->kind == 6)
2315 *value2 = (unsigned short)op2->__anon1.f;
2316 else if(op2->kind == 7)
2317 *value2 = (unsigned short)op2->__anon1.d;
2318 else if(op2->kind == 13)
2319 *value2 = (unsigned short)op2->__anon1.ui64;
2325 unsigned int GetOpChar(struct Operand * op2, char * value2)
2327 if(op2->kind == 3 && op2->type->isSigned)
2328 *value2 = (char)op2->__anon1.i;
2329 else if(op2->kind == 3)
2330 *value2 = (char)op2->__anon1.ui;
2331 else if(op2->kind == 4 && op2->type->isSigned)
2332 *value2 = (char)op2->__anon1.i64;
2333 else if(op2->kind == 4)
2334 *value2 = (char)op2->__anon1.ui64;
2335 else if(op2->kind == 23 && op2->type->isSigned)
2336 *value2 = (char)op2->__anon1.i64;
2337 else if(op2->kind == 23)
2338 *value2 = (char)op2->__anon1.ui64;
2339 else if(op2->kind == 22 && op2->type->isSigned)
2340 *value2 = (char)op2->__anon1.i64;
2341 else if(op2->kind == 22)
2342 *value2 = (char)op2->__anon1.ui64;
2343 else if(op2->kind == 2 && op2->type->isSigned)
2344 *value2 = (char)op2->__anon1.s;
2345 else if(op2->kind == 2)
2346 *value2 = (char)op2->__anon1.us;
2347 else if(op2->kind == 1 && op2->type->isSigned)
2348 *value2 = op2->__anon1.c;
2349 else if(op2->kind == 24 || op2->kind == 1)
2350 *value2 = (char)op2->__anon1.uc;
2351 else if(op2->kind == 6)
2352 *value2 = (char)op2->__anon1.f;
2353 else if(op2->kind == 7)
2354 *value2 = (char)op2->__anon1.d;
2355 else if(op2->kind == 13)
2356 *value2 = (char)op2->__anon1.ui64;
2362 unsigned int GetOpUChar(struct Operand * op2, unsigned char * value2)
2364 if(op2->kind == 3 && op2->type->isSigned)
2365 *value2 = (unsigned char)op2->__anon1.i;
2366 else if(op2->kind == 3)
2367 *value2 = (unsigned char)op2->__anon1.ui;
2368 else if(op2->kind == 4 && op2->type->isSigned)
2369 *value2 = (unsigned char)op2->__anon1.i64;
2370 else if(op2->kind == 4)
2371 *value2 = (unsigned char)op2->__anon1.ui64;
2372 else if(op2->kind == 23 && op2->type->isSigned)
2373 *value2 = (unsigned char)op2->__anon1.i64;
2374 else if(op2->kind == 23)
2375 *value2 = (unsigned char)op2->__anon1.ui64;
2376 else if(op2->kind == 22 && op2->type->isSigned)
2377 *value2 = (unsigned char)op2->__anon1.i64;
2378 else if(op2->kind == 22)
2379 *value2 = (unsigned char)op2->__anon1.ui64;
2380 else if(op2->kind == 2 && op2->type->isSigned)
2381 *value2 = (unsigned char)op2->__anon1.s;
2382 else if(op2->kind == 2)
2383 *value2 = (unsigned char)op2->__anon1.us;
2384 else if(op2->kind == 1 && op2->type->isSigned)
2385 *value2 = (unsigned char)op2->__anon1.c;
2386 else if(op2->kind == 24 || op2->kind == 1)
2387 *value2 = op2->__anon1.uc;
2388 else if(op2->kind == 6)
2389 *value2 = (unsigned char)op2->__anon1.f;
2390 else if(op2->kind == 7)
2391 *value2 = (unsigned char)op2->__anon1.d;
2392 else if(op2->kind == 13)
2393 *value2 = (unsigned char)op2->__anon1.ui64;
2399 unsigned int GetOpFloat(struct Operand * op2, float * value2)
2401 if(op2->kind == 3 && op2->type->isSigned)
2402 *value2 = (float)(float)op2->__anon1.i;
2403 else if(op2->kind == 3)
2404 *value2 = (float)(float)op2->__anon1.ui;
2405 else if(op2->kind == 4 && op2->type->isSigned)
2406 *value2 = (float)(float)op2->__anon1.i64;
2407 else if(op2->kind == 4)
2408 *value2 = (float)(float)op2->__anon1.ui64;
2409 else if(op2->kind == 23 && op2->type->isSigned)
2410 *value2 = (float)(float)op2->__anon1.i64;
2411 else if(op2->kind == 23)
2412 *value2 = (float)(float)op2->__anon1.ui64;
2413 else if(op2->kind == 22 && op2->type->isSigned)
2414 *value2 = (float)(float)op2->__anon1.i64;
2415 else if(op2->kind == 22)
2416 *value2 = (float)(float)op2->__anon1.ui64;
2417 else if(op2->kind == 2 && op2->type->isSigned)
2418 *value2 = (float)(float)op2->__anon1.s;
2419 else if(op2->kind == 2)
2420 *value2 = (float)(float)op2->__anon1.us;
2421 else if(op2->kind == 1 && op2->type->isSigned)
2422 *value2 = (float)(float)op2->__anon1.c;
2423 else if(op2->kind == 24 || op2->kind == 1)
2424 *value2 = (float)(float)op2->__anon1.uc;
2425 else if(op2->kind == 6)
2426 *value2 = (float)op2->__anon1.f;
2427 else if(op2->kind == 7)
2428 *value2 = (float)op2->__anon1.d;
2429 else if(op2->kind == 13)
2430 *value2 = (float)(float)op2->__anon1.ui64;
2436 unsigned int GetOpDouble(struct Operand * op2, double * value2)
2438 if(op2->kind == 3 && op2->type->isSigned)
2439 *value2 = (double)(double)op2->__anon1.i;
2440 else if(op2->kind == 3)
2441 *value2 = (double)(double)op2->__anon1.ui;
2442 else if(op2->kind == 4 && op2->type->isSigned)
2443 *value2 = (double)(double)op2->__anon1.i64;
2444 else if(op2->kind == 4)
2445 *value2 = (double)(double)op2->__anon1.ui64;
2446 else if(op2->kind == 23 && op2->type->isSigned)
2447 *value2 = (double)(double)op2->__anon1.i64;
2448 else if(op2->kind == 23)
2449 *value2 = (double)(double)op2->__anon1.ui64;
2450 else if(op2->kind == 22 && op2->type->isSigned)
2451 *value2 = (double)(double)op2->__anon1.i64;
2452 else if(op2->kind == 22)
2453 *value2 = (double)(double)op2->__anon1.ui64;
2454 else if(op2->kind == 2 && op2->type->isSigned)
2455 *value2 = (double)(double)op2->__anon1.s;
2456 else if(op2->kind == 2)
2457 *value2 = (double)(double)op2->__anon1.us;
2458 else if(op2->kind == 1 && op2->type->isSigned)
2459 *value2 = (double)(double)op2->__anon1.c;
2460 else if(op2->kind == 24 || op2->kind == 1)
2461 *value2 = (double)(double)op2->__anon1.uc;
2462 else if(op2->kind == 6)
2463 *value2 = (double)op2->__anon1.f;
2464 else if(op2->kind == 7)
2465 *value2 = (double)op2->__anon1.d;
2466 else if(op2->kind == 13)
2467 *value2 = (double)(double)op2->__anon1.ui64;
2473 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2475 int value2 = op2->__anon1.i;
2478 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
2481 exp->expType = op1->type;
2483 op1->type->refCount++;
2488 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2490 unsigned int value2 = op2->__anon1.ui;
2493 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
2496 exp->expType = op1->type;
2498 op1->type->refCount++;
2503 static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2505 long long value2 = op2->__anon1.i64;
2508 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
2511 exp->expType = op1->type;
2513 op1->type->refCount++;
2518 static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2520 uint64 value2 = op2->__anon1.ui64;
2523 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
2526 exp->expType = op1->type;
2528 op1->type->refCount++;
2533 static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2535 short value2 = op2->__anon1.s;
2538 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s + value2));
2541 exp->expType = op1->type;
2543 op1->type->refCount++;
2548 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2550 unsigned short value2 = op2->__anon1.us;
2553 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us + value2));
2556 exp->expType = op1->type;
2558 op1->type->refCount++;
2563 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2565 char value2 = op2->__anon1.c;
2568 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c + value2));
2571 exp->expType = op1->type;
2573 op1->type->refCount++;
2578 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2580 unsigned char value2 = op2->__anon1.uc;
2583 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc + value2));
2586 exp->expType = op1->type;
2588 op1->type->refCount++;
2593 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2595 float value2 = op2->__anon1.f;
2598 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
2601 exp->expType = op1->type;
2603 op1->type->refCount++;
2608 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2610 double value2 = op2->__anon1.d;
2613 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
2616 exp->expType = op1->type;
2618 op1->type->refCount++;
2623 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2625 int value2 = op2->__anon1.i;
2628 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
2631 exp->expType = op1->type;
2633 op1->type->refCount++;
2638 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2640 unsigned int value2 = op2->__anon1.ui;
2643 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
2646 exp->expType = op1->type;
2648 op1->type->refCount++;
2653 static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2655 long long value2 = op2->__anon1.i64;
2658 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
2661 exp->expType = op1->type;
2663 op1->type->refCount++;
2668 static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2670 uint64 value2 = op2->__anon1.ui64;
2673 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
2676 exp->expType = op1->type;
2678 op1->type->refCount++;
2683 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2685 short value2 = op2->__anon1.s;
2688 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s - value2));
2691 exp->expType = op1->type;
2693 op1->type->refCount++;
2698 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2700 unsigned short value2 = op2->__anon1.us;
2703 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us - value2));
2706 exp->expType = op1->type;
2708 op1->type->refCount++;
2713 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2715 char value2 = op2->__anon1.c;
2718 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c - value2));
2721 exp->expType = op1->type;
2723 op1->type->refCount++;
2728 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2730 unsigned char value2 = op2->__anon1.uc;
2733 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc - value2));
2736 exp->expType = op1->type;
2738 op1->type->refCount++;
2743 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2745 float value2 = op2->__anon1.f;
2748 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
2751 exp->expType = op1->type;
2753 op1->type->refCount++;
2758 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2760 double value2 = op2->__anon1.d;
2763 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
2766 exp->expType = op1->type;
2768 op1->type->refCount++;
2773 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2775 int value2 = op2->__anon1.i;
2778 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
2781 exp->expType = op1->type;
2783 op1->type->refCount++;
2788 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2790 unsigned int value2 = op2->__anon1.ui;
2793 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
2796 exp->expType = op1->type;
2798 op1->type->refCount++;
2803 static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2805 long long value2 = op2->__anon1.i64;
2808 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
2811 exp->expType = op1->type;
2813 op1->type->refCount++;
2818 static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2820 uint64 value2 = op2->__anon1.ui64;
2823 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
2826 exp->expType = op1->type;
2828 op1->type->refCount++;
2833 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2835 short value2 = op2->__anon1.s;
2838 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s * value2));
2841 exp->expType = op1->type;
2843 op1->type->refCount++;
2848 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2850 unsigned short value2 = op2->__anon1.us;
2853 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us * value2));
2856 exp->expType = op1->type;
2858 op1->type->refCount++;
2863 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2865 char value2 = op2->__anon1.c;
2868 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c * value2));
2871 exp->expType = op1->type;
2873 op1->type->refCount++;
2878 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2880 unsigned char value2 = op2->__anon1.uc;
2883 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc * value2));
2886 exp->expType = op1->type;
2888 op1->type->refCount++;
2893 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2895 float value2 = op2->__anon1.f;
2898 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
2901 exp->expType = op1->type;
2903 op1->type->refCount++;
2908 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2910 double value2 = op2->__anon1.d;
2913 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
2916 exp->expType = op1->type;
2918 op1->type->refCount++;
2923 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2925 int value2 = op2->__anon1.i;
2928 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i / value2)) : 0);
2931 exp->expType = op1->type;
2933 op1->type->refCount++;
2938 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2940 unsigned int value2 = op2->__anon1.ui;
2943 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui / value2)) : 0);
2946 exp->expType = op1->type;
2948 op1->type->refCount++;
2953 static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2955 long long value2 = op2->__anon1.i64;
2958 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 / value2)) : 0);
2961 exp->expType = op1->type;
2963 op1->type->refCount++;
2968 static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2970 uint64 value2 = op2->__anon1.ui64;
2973 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 / value2)) : 0);
2976 exp->expType = op1->type;
2978 op1->type->refCount++;
2983 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2985 short value2 = op2->__anon1.s;
2988 exp->__anon1.__anon2.string = PrintShort(value2 ? ((short)(op1->__anon1.s / value2)) : 0);
2991 exp->expType = op1->type;
2993 op1->type->refCount++;
2998 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3000 unsigned short value2 = op2->__anon1.us;
3003 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((unsigned short)(op1->__anon1.us / value2)) : 0);
3006 exp->expType = op1->type;
3008 op1->type->refCount++;
3013 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3015 char value2 = op2->__anon1.c;
3018 exp->__anon1.__anon2.string = PrintChar(value2 ? ((char)(op1->__anon1.c / value2)) : 0);
3021 exp->expType = op1->type;
3023 op1->type->refCount++;
3028 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3030 unsigned char value2 = op2->__anon1.uc;
3033 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((unsigned char)(op1->__anon1.uc / value2)) : 0);
3036 exp->expType = op1->type;
3038 op1->type->refCount++;
3043 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3045 float value2 = op2->__anon1.f;
3048 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f / value2));
3051 exp->expType = op1->type;
3053 op1->type->refCount++;
3058 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3060 double value2 = op2->__anon1.d;
3063 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d / value2));
3066 exp->expType = op1->type;
3068 op1->type->refCount++;
3073 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3075 int value2 = op2->__anon1.i;
3078 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i % value2)) : 0);
3081 exp->expType = op1->type;
3083 op1->type->refCount++;
3088 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3090 unsigned int value2 = op2->__anon1.ui;
3093 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui % value2)) : 0);
3096 exp->expType = op1->type;
3098 op1->type->refCount++;
3103 static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3105 long long value2 = op2->__anon1.i64;
3108 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 % value2)) : 0);
3111 exp->expType = op1->type;
3113 op1->type->refCount++;
3118 static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3120 uint64 value2 = op2->__anon1.ui64;
3123 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 % value2)) : 0);
3126 exp->expType = op1->type;
3128 op1->type->refCount++;
3133 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3135 short value2 = op2->__anon1.s;
3138 exp->__anon1.__anon2.string = PrintShort(value2 ? ((short)(op1->__anon1.s % value2)) : 0);
3141 exp->expType = op1->type;
3143 op1->type->refCount++;
3148 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3150 unsigned short value2 = op2->__anon1.us;
3153 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((unsigned short)(op1->__anon1.us % value2)) : 0);
3156 exp->expType = op1->type;
3158 op1->type->refCount++;
3163 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3165 char value2 = op2->__anon1.c;
3168 exp->__anon1.__anon2.string = PrintChar(value2 ? ((char)(op1->__anon1.c % value2)) : 0);
3171 exp->expType = op1->type;
3173 op1->type->refCount++;
3178 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3180 unsigned char value2 = op2->__anon1.uc;
3183 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((unsigned char)(op1->__anon1.uc % value2)) : 0);
3186 exp->expType = op1->type;
3188 op1->type->refCount++;
3193 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
3196 exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
3199 exp->expType = op1->type;
3201 op1->type->refCount++;
3206 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
3209 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
3212 exp->expType = op1->type;
3214 op1->type->refCount++;
3219 static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
3222 exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
3225 exp->expType = op1->type;
3227 op1->type->refCount++;
3232 static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
3235 exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
3238 exp->expType = op1->type;
3240 op1->type->refCount++;
3245 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
3248 exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
3251 exp->expType = op1->type;
3253 op1->type->refCount++;
3258 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
3261 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
3264 exp->expType = op1->type;
3266 op1->type->refCount++;
3271 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
3274 exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
3277 exp->expType = op1->type;
3279 op1->type->refCount++;
3284 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
3287 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
3290 exp->expType = op1->type;
3292 op1->type->refCount++;
3297 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
3300 exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
3303 exp->expType = op1->type;
3305 op1->type->refCount++;
3310 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
3313 exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
3316 exp->expType = op1->type;
3318 op1->type->refCount++;
3323 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
3326 exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
3329 exp->expType = op1->type;
3331 op1->type->refCount++;
3336 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
3339 exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
3342 exp->expType = op1->type;
3344 op1->type->refCount++;
3349 static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
3352 exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
3355 exp->expType = op1->type;
3357 op1->type->refCount++;
3362 static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
3365 exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
3368 exp->expType = op1->type;
3370 op1->type->refCount++;
3375 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
3378 exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
3381 exp->expType = op1->type;
3383 op1->type->refCount++;
3388 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
3391 exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
3394 exp->expType = op1->type;
3396 op1->type->refCount++;
3401 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
3404 exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
3407 exp->expType = op1->type;
3409 op1->type->refCount++;
3414 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
3417 exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
3420 exp->expType = op1->type;
3422 op1->type->refCount++;
3427 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
3430 exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
3433 exp->expType = op1->type;
3435 op1->type->refCount++;
3440 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
3443 exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
3446 exp->expType = op1->type;
3448 op1->type->refCount++;
3453 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
3456 exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
3459 exp->expType = op1->type;
3461 op1->type->refCount++;
3466 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
3469 exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
3472 exp->expType = op1->type;
3474 op1->type->refCount++;
3479 static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
3482 exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
3485 exp->expType = op1->type;
3487 op1->type->refCount++;
3492 static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
3495 exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
3498 exp->expType = op1->type;
3500 op1->type->refCount++;
3505 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
3508 exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
3511 exp->expType = op1->type;
3513 op1->type->refCount++;
3518 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
3521 exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
3524 exp->expType = op1->type;
3526 op1->type->refCount++;
3531 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
3534 exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
3537 exp->expType = op1->type;
3539 op1->type->refCount++;
3544 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
3547 exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
3550 exp->expType = op1->type;
3552 op1->type->refCount++;
3557 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
3560 exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
3563 exp->expType = op1->type;
3565 op1->type->refCount++;
3570 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
3573 exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
3576 exp->expType = op1->type;
3578 op1->type->refCount++;
3583 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3585 int value2 = op2->__anon1.i;
3588 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
3591 exp->expType = op1->type;
3593 op1->type->refCount++;
3598 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3600 unsigned int value2 = op2->__anon1.ui;
3603 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
3606 exp->expType = op1->type;
3608 op1->type->refCount++;
3613 static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3615 long long value2 = op2->__anon1.i64;
3618 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
3621 exp->expType = op1->type;
3623 op1->type->refCount++;
3628 static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3630 uint64 value2 = op2->__anon1.ui64;
3633 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
3636 exp->expType = op1->type;
3638 op1->type->refCount++;
3643 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3645 short value2 = op2->__anon1.s;
3648 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
3651 exp->expType = op1->type;
3653 op1->type->refCount++;
3658 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3660 unsigned short value2 = op2->__anon1.us;
3663 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
3666 exp->expType = op1->type;
3668 op1->type->refCount++;
3673 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3675 char value2 = op2->__anon1.c;
3678 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
3681 exp->expType = op1->type;
3683 op1->type->refCount++;
3688 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3690 unsigned char value2 = op2->__anon1.uc;
3693 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
3696 exp->expType = op1->type;
3698 op1->type->refCount++;
3703 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3705 float value2 = op2->__anon1.f;
3708 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
3711 exp->expType = op1->type;
3713 op1->type->refCount++;
3718 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3720 double value2 = op2->__anon1.d;
3723 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
3726 exp->expType = op1->type;
3728 op1->type->refCount++;
3733 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3735 int value2 = op2->__anon1.i;
3738 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
3741 exp->expType = op1->type;
3743 op1->type->refCount++;
3748 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3750 unsigned int value2 = op2->__anon1.ui;
3753 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
3756 exp->expType = op1->type;
3758 op1->type->refCount++;
3763 static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3765 long long value2 = op2->__anon1.i64;
3768 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
3771 exp->expType = op1->type;
3773 op1->type->refCount++;
3778 static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3780 uint64 value2 = op2->__anon1.ui64;
3783 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
3786 exp->expType = op1->type;
3788 op1->type->refCount++;
3793 static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3795 short value2 = op2->__anon1.s;
3798 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
3801 exp->expType = op1->type;
3803 op1->type->refCount++;
3808 static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3810 unsigned short value2 = op2->__anon1.us;
3813 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
3816 exp->expType = op1->type;
3818 op1->type->refCount++;
3823 static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3825 char value2 = op2->__anon1.c;
3828 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
3831 exp->expType = op1->type;
3833 op1->type->refCount++;
3838 static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3840 unsigned char value2 = op2->__anon1.uc;
3843 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
3846 exp->expType = op1->type;
3848 op1->type->refCount++;
3853 static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3855 float value2 = op2->__anon1.f;
3858 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
3861 exp->expType = op1->type;
3863 op1->type->refCount++;
3868 static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3870 double value2 = op2->__anon1.d;
3873 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
3876 exp->expType = op1->type;
3878 op1->type->refCount++;
3883 static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3885 int value2 = op2->__anon1.i;
3888 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
3891 exp->expType = op1->type;
3893 op1->type->refCount++;
3898 static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3900 unsigned int value2 = op2->__anon1.ui;
3903 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
3906 exp->expType = op1->type;
3908 op1->type->refCount++;
3913 static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3915 long long value2 = op2->__anon1.i64;
3918 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
3921 exp->expType = op1->type;
3923 op1->type->refCount++;
3928 static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3930 uint64 value2 = op2->__anon1.ui64;
3933 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
3936 exp->expType = op1->type;
3938 op1->type->refCount++;
3943 static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3945 short value2 = op2->__anon1.s;
3948 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
3951 exp->expType = op1->type;
3953 op1->type->refCount++;
3958 static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3960 unsigned short value2 = op2->__anon1.us;
3963 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
3966 exp->expType = op1->type;
3968 op1->type->refCount++;
3973 static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3975 char value2 = op2->__anon1.c;
3978 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
3981 exp->expType = op1->type;
3983 op1->type->refCount++;
3988 static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3990 unsigned char value2 = op2->__anon1.uc;
3993 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
3996 exp->expType = op1->type;
3998 op1->type->refCount++;
4003 static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4005 float value2 = op2->__anon1.f;
4008 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
4011 exp->expType = op1->type;
4013 op1->type->refCount++;
4018 static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4020 double value2 = op2->__anon1.d;
4023 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
4026 exp->expType = op1->type;
4028 op1->type->refCount++;
4033 static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4035 int value2 = op2->__anon1.i;
4038 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
4041 exp->expType = op1->type;
4043 op1->type->refCount++;
4048 static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4050 unsigned int value2 = op2->__anon1.ui;
4053 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
4056 exp->expType = op1->type;
4058 op1->type->refCount++;
4063 static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4065 long long value2 = op2->__anon1.i64;
4068 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
4071 exp->expType = op1->type;
4073 op1->type->refCount++;
4078 static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4080 uint64 value2 = op2->__anon1.ui64;
4083 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
4086 exp->expType = op1->type;
4088 op1->type->refCount++;
4093 static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4095 short value2 = op2->__anon1.s;
4098 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
4101 exp->expType = op1->type;
4103 op1->type->refCount++;
4108 static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4110 unsigned short value2 = op2->__anon1.us;
4113 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
4116 exp->expType = op1->type;
4118 op1->type->refCount++;
4123 static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4125 char value2 = op2->__anon1.c;
4128 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
4131 exp->expType = op1->type;
4133 op1->type->refCount++;
4138 static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4140 unsigned char value2 = op2->__anon1.uc;
4143 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
4146 exp->expType = op1->type;
4148 op1->type->refCount++;
4153 static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4155 float value2 = op2->__anon1.f;
4158 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
4161 exp->expType = op1->type;
4163 op1->type->refCount++;
4168 static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4170 double value2 = op2->__anon1.d;
4173 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
4176 exp->expType = op1->type;
4178 op1->type->refCount++;
4183 static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4185 int value2 = op2->__anon1.i;
4188 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i /= value2)) : 0);
4191 exp->expType = op1->type;
4193 op1->type->refCount++;
4198 static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4200 unsigned int value2 = op2->__anon1.ui;
4203 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui /= value2)) : 0);
4206 exp->expType = op1->type;
4208 op1->type->refCount++;
4213 static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4215 long long value2 = op2->__anon1.i64;
4218 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 /= value2)) : 0);
4221 exp->expType = op1->type;
4223 op1->type->refCount++;
4228 static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4230 uint64 value2 = op2->__anon1.ui64;
4233 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 /= value2)) : 0);
4236 exp->expType = op1->type;
4238 op1->type->refCount++;
4243 static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4245 short value2 = op2->__anon1.s;
4248 exp->__anon1.__anon2.string = PrintShort(value2 ? ((op1->__anon1.s /= value2)) : 0);
4251 exp->expType = op1->type;
4253 op1->type->refCount++;
4258 static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4260 unsigned short value2 = op2->__anon1.us;
4263 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((op1->__anon1.us /= value2)) : 0);
4266 exp->expType = op1->type;
4268 op1->type->refCount++;
4273 static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4275 char value2 = op2->__anon1.c;
4278 exp->__anon1.__anon2.string = PrintChar(value2 ? ((op1->__anon1.c /= value2)) : 0);
4281 exp->expType = op1->type;
4283 op1->type->refCount++;
4288 static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4290 unsigned char value2 = op2->__anon1.uc;
4293 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((op1->__anon1.uc /= value2)) : 0);
4296 exp->expType = op1->type;
4298 op1->type->refCount++;
4303 static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4305 float value2 = op2->__anon1.f;
4308 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f /= value2));
4311 exp->expType = op1->type;
4313 op1->type->refCount++;
4318 static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4320 double value2 = op2->__anon1.d;
4323 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d /= value2));
4326 exp->expType = op1->type;
4328 op1->type->refCount++;
4333 static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4335 int value2 = op2->__anon1.i;
4338 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i %= value2)) : 0);
4341 exp->expType = op1->type;
4343 op1->type->refCount++;
4348 static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4350 unsigned int value2 = op2->__anon1.ui;
4353 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui %= value2)) : 0);
4356 exp->expType = op1->type;
4358 op1->type->refCount++;
4363 static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4365 long long value2 = op2->__anon1.i64;
4368 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 %= value2)) : 0);
4371 exp->expType = op1->type;
4373 op1->type->refCount++;
4378 static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4380 uint64 value2 = op2->__anon1.ui64;
4383 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 %= value2)) : 0);
4386 exp->expType = op1->type;
4388 op1->type->refCount++;
4393 static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4395 short value2 = op2->__anon1.s;
4398 exp->__anon1.__anon2.string = PrintShort(value2 ? ((op1->__anon1.s %= value2)) : 0);
4401 exp->expType = op1->type;
4403 op1->type->refCount++;
4408 static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4410 unsigned short value2 = op2->__anon1.us;
4413 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((op1->__anon1.us %= value2)) : 0);
4416 exp->expType = op1->type;
4418 op1->type->refCount++;
4423 static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4425 char value2 = op2->__anon1.c;
4428 exp->__anon1.__anon2.string = PrintChar(value2 ? ((op1->__anon1.c %= value2)) : 0);
4431 exp->expType = op1->type;
4433 op1->type->refCount++;
4438 static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4440 unsigned char value2 = op2->__anon1.uc;
4443 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((op1->__anon1.uc %= value2)) : 0);
4446 exp->expType = op1->type;
4448 op1->type->refCount++;
4453 static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4455 int value2 = op2->__anon1.i;
4458 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
4461 exp->expType = op1->type;
4463 op1->type->refCount++;
4468 static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4470 unsigned int value2 = op2->__anon1.ui;
4473 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
4476 exp->expType = op1->type;
4478 op1->type->refCount++;
4483 static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4485 long long value2 = op2->__anon1.i64;
4488 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
4491 exp->expType = op1->type;
4493 op1->type->refCount++;
4498 static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4500 uint64 value2 = op2->__anon1.ui64;
4503 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
4506 exp->expType = op1->type;
4508 op1->type->refCount++;
4513 static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4515 short value2 = op2->__anon1.s;
4518 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s & value2));
4521 exp->expType = op1->type;
4523 op1->type->refCount++;
4528 static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4530 unsigned short value2 = op2->__anon1.us;
4533 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us & value2));
4536 exp->expType = op1->type;
4538 op1->type->refCount++;
4543 static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4545 char value2 = op2->__anon1.c;
4548 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c & value2));
4551 exp->expType = op1->type;
4553 op1->type->refCount++;
4558 static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4560 unsigned char value2 = op2->__anon1.uc;
4563 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc & value2));
4566 exp->expType = op1->type;
4568 op1->type->refCount++;
4573 static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4575 int value2 = op2->__anon1.i;
4578 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
4581 exp->expType = op1->type;
4583 op1->type->refCount++;
4588 static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4590 unsigned int value2 = op2->__anon1.ui;
4593 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
4596 exp->expType = op1->type;
4598 op1->type->refCount++;
4603 static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4605 long long value2 = op2->__anon1.i64;
4608 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
4611 exp->expType = op1->type;
4613 op1->type->refCount++;
4618 static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4620 uint64 value2 = op2->__anon1.ui64;
4623 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
4626 exp->expType = op1->type;
4628 op1->type->refCount++;
4633 static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4635 short value2 = op2->__anon1.s;
4638 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s | value2));
4641 exp->expType = op1->type;
4643 op1->type->refCount++;
4648 static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4650 unsigned short value2 = op2->__anon1.us;
4653 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us | value2));
4656 exp->expType = op1->type;
4658 op1->type->refCount++;
4663 static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4665 char value2 = op2->__anon1.c;
4668 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c | value2));
4671 exp->expType = op1->type;
4673 op1->type->refCount++;
4678 static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4680 unsigned char value2 = op2->__anon1.uc;
4683 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc | value2));
4686 exp->expType = op1->type;
4688 op1->type->refCount++;
4693 static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4695 int value2 = op2->__anon1.i;
4698 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
4701 exp->expType = op1->type;
4703 op1->type->refCount++;
4708 static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4710 unsigned int value2 = op2->__anon1.ui;
4713 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
4716 exp->expType = op1->type;
4718 op1->type->refCount++;
4723 static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4725 long long value2 = op2->__anon1.i64;
4728 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
4731 exp->expType = op1->type;
4733 op1->type->refCount++;
4738 static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4740 uint64 value2 = op2->__anon1.ui64;
4743 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
4746 exp->expType = op1->type;
4748 op1->type->refCount++;
4753 static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4755 short value2 = op2->__anon1.s;
4758 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s ^ value2));
4761 exp->expType = op1->type;
4763 op1->type->refCount++;
4768 static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4770 unsigned short value2 = op2->__anon1.us;
4773 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us ^ value2));
4776 exp->expType = op1->type;
4778 op1->type->refCount++;
4783 static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4785 char value2 = op2->__anon1.c;
4788 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c ^ value2));
4791 exp->expType = op1->type;
4793 op1->type->refCount++;
4798 static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4800 unsigned char value2 = op2->__anon1.uc;
4803 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc ^ value2));
4806 exp->expType = op1->type;
4808 op1->type->refCount++;
4813 static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4815 int value2 = op2->__anon1.i;
4818 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
4821 exp->expType = op1->type;
4823 op1->type->refCount++;
4828 static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4830 unsigned int value2 = op2->__anon1.ui;
4833 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
4836 exp->expType = op1->type;
4838 op1->type->refCount++;
4843 static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4845 long long value2 = op2->__anon1.i64;
4848 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
4851 exp->expType = op1->type;
4853 op1->type->refCount++;
4858 static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4860 uint64 value2 = op2->__anon1.ui64;
4863 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
4866 exp->expType = op1->type;
4868 op1->type->refCount++;
4873 static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4875 short value2 = op2->__anon1.s;
4878 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s << value2));
4881 exp->expType = op1->type;
4883 op1->type->refCount++;
4888 static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4890 unsigned short value2 = op2->__anon1.us;
4893 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us << value2));
4896 exp->expType = op1->type;
4898 op1->type->refCount++;
4903 static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4905 char value2 = op2->__anon1.c;
4908 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c << value2));
4911 exp->expType = op1->type;
4913 op1->type->refCount++;
4918 static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4920 unsigned char value2 = op2->__anon1.uc;
4923 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc << value2));
4926 exp->expType = op1->type;
4928 op1->type->refCount++;
4933 static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4935 int value2 = op2->__anon1.i;
4938 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
4941 exp->expType = op1->type;
4943 op1->type->refCount++;
4948 static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4950 unsigned int value2 = op2->__anon1.ui;
4953 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
4956 exp->expType = op1->type;
4958 op1->type->refCount++;
4963 static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4965 long long value2 = op2->__anon1.i64;
4968 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
4971 exp->expType = op1->type;
4973 op1->type->refCount++;
4978 static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4980 uint64 value2 = op2->__anon1.ui64;
4983 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
4986 exp->expType = op1->type;
4988 op1->type->refCount++;
4993 static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4995 short value2 = op2->__anon1.s;
4998 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >> value2));
5001 exp->expType = op1->type;
5003 op1->type->refCount++;
5008 static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5010 unsigned short value2 = op2->__anon1.us;
5013 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >> value2));
5016 exp->expType = op1->type;
5018 op1->type->refCount++;
5023 static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5025 char value2 = op2->__anon1.c;
5028 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >> value2));
5031 exp->expType = op1->type;
5033 op1->type->refCount++;
5038 static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5040 unsigned char value2 = op2->__anon1.uc;
5043 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >> value2));
5046 exp->expType = op1->type;
5048 op1->type->refCount++;
5053 static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
5056 exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
5059 exp->expType = op1->type;
5061 op1->type->refCount++;
5066 static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
5069 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
5072 exp->expType = op1->type;
5074 op1->type->refCount++;
5079 static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
5082 exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
5085 exp->expType = op1->type;
5087 op1->type->refCount++;
5092 static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
5095 exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
5098 exp->expType = op1->type;
5100 op1->type->refCount++;
5105 static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
5108 exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
5111 exp->expType = op1->type;
5113 op1->type->refCount++;
5118 static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
5121 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
5124 exp->expType = op1->type;
5126 op1->type->refCount++;
5131 static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
5134 exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
5137 exp->expType = op1->type;
5139 op1->type->refCount++;
5144 static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
5147 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
5150 exp->expType = op1->type;
5152 op1->type->refCount++;
5157 static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5159 int value2 = op2->__anon1.i;
5162 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
5165 exp->expType = op1->type;
5167 op1->type->refCount++;
5172 static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5174 unsigned int value2 = op2->__anon1.ui;
5177 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
5180 exp->expType = op1->type;
5182 op1->type->refCount++;
5187 static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5189 long long value2 = op2->__anon1.i64;
5192 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
5195 exp->expType = op1->type;
5197 op1->type->refCount++;
5202 static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5204 uint64 value2 = op2->__anon1.ui64;
5207 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
5210 exp->expType = op1->type;
5212 op1->type->refCount++;
5217 static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5219 short value2 = op2->__anon1.s;
5222 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
5225 exp->expType = op1->type;
5227 op1->type->refCount++;
5232 static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5234 unsigned short value2 = op2->__anon1.us;
5237 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
5240 exp->expType = op1->type;
5242 op1->type->refCount++;
5247 static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5249 char value2 = op2->__anon1.c;
5252 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
5255 exp->expType = op1->type;
5257 op1->type->refCount++;
5262 static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5264 unsigned char value2 = op2->__anon1.uc;
5267 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
5270 exp->expType = op1->type;
5272 op1->type->refCount++;
5277 static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5279 int value2 = op2->__anon1.i;
5282 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
5285 exp->expType = op1->type;
5287 op1->type->refCount++;
5292 static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5294 unsigned int value2 = op2->__anon1.ui;
5297 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
5300 exp->expType = op1->type;
5302 op1->type->refCount++;
5307 static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5309 long long value2 = op2->__anon1.i64;
5312 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
5315 exp->expType = op1->type;
5317 op1->type->refCount++;
5322 static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5324 uint64 value2 = op2->__anon1.ui64;
5327 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
5330 exp->expType = op1->type;
5332 op1->type->refCount++;
5337 static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5339 short value2 = op2->__anon1.s;
5342 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
5345 exp->expType = op1->type;
5347 op1->type->refCount++;
5352 static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5354 unsigned short value2 = op2->__anon1.us;
5357 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
5360 exp->expType = op1->type;
5362 op1->type->refCount++;
5367 static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5369 char value2 = op2->__anon1.c;
5372 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
5375 exp->expType = op1->type;
5377 op1->type->refCount++;
5382 static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5384 unsigned char value2 = op2->__anon1.uc;
5387 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
5390 exp->expType = op1->type;
5392 op1->type->refCount++;
5397 static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5399 int value2 = op2->__anon1.i;
5402 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
5405 exp->expType = op1->type;
5407 op1->type->refCount++;
5412 static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5414 unsigned int value2 = op2->__anon1.ui;
5417 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
5420 exp->expType = op1->type;
5422 op1->type->refCount++;
5427 static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5429 long long value2 = op2->__anon1.i64;
5432 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
5435 exp->expType = op1->type;
5437 op1->type->refCount++;
5442 static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5444 uint64 value2 = op2->__anon1.ui64;
5447 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
5450 exp->expType = op1->type;
5452 op1->type->refCount++;
5457 static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5459 short value2 = op2->__anon1.s;
5462 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
5465 exp->expType = op1->type;
5467 op1->type->refCount++;
5472 static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5474 unsigned short value2 = op2->__anon1.us;
5477 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
5480 exp->expType = op1->type;
5482 op1->type->refCount++;
5487 static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5489 char value2 = op2->__anon1.c;
5492 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
5495 exp->expType = op1->type;
5497 op1->type->refCount++;
5502 static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5504 unsigned char value2 = op2->__anon1.uc;
5507 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
5510 exp->expType = op1->type;
5512 op1->type->refCount++;
5517 static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5519 int value2 = op2->__anon1.i;
5522 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
5525 exp->expType = op1->type;
5527 op1->type->refCount++;
5532 static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5534 unsigned int value2 = op2->__anon1.ui;
5537 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
5540 exp->expType = op1->type;
5542 op1->type->refCount++;
5547 static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5549 long long value2 = op2->__anon1.i64;
5552 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
5555 exp->expType = op1->type;
5557 op1->type->refCount++;
5562 static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5564 uint64 value2 = op2->__anon1.ui64;
5567 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
5570 exp->expType = op1->type;
5572 op1->type->refCount++;
5577 static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5579 short value2 = op2->__anon1.s;
5582 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
5585 exp->expType = op1->type;
5587 op1->type->refCount++;
5592 static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5594 unsigned short value2 = op2->__anon1.us;
5597 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
5600 exp->expType = op1->type;
5602 op1->type->refCount++;
5607 static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5609 char value2 = op2->__anon1.c;
5612 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
5615 exp->expType = op1->type;
5617 op1->type->refCount++;
5622 static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5624 unsigned char value2 = op2->__anon1.uc;
5627 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
5630 exp->expType = op1->type;
5632 op1->type->refCount++;
5637 static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5639 int value2 = op2->__anon1.i;
5642 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
5645 exp->expType = op1->type;
5647 op1->type->refCount++;
5652 static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5654 unsigned int value2 = op2->__anon1.ui;
5657 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
5660 exp->expType = op1->type;
5662 op1->type->refCount++;
5667 static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5669 long long value2 = op2->__anon1.i64;
5672 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
5675 exp->expType = op1->type;
5677 op1->type->refCount++;
5682 static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5684 uint64 value2 = op2->__anon1.ui64;
5687 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
5690 exp->expType = op1->type;
5692 op1->type->refCount++;
5697 static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5699 short value2 = op2->__anon1.s;
5702 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
5705 exp->expType = op1->type;
5707 op1->type->refCount++;
5712 static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5714 unsigned short value2 = op2->__anon1.us;
5717 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
5720 exp->expType = op1->type;
5722 op1->type->refCount++;
5727 static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5729 char value2 = op2->__anon1.c;
5732 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
5735 exp->expType = op1->type;
5737 op1->type->refCount++;
5742 static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5744 unsigned char value2 = op2->__anon1.uc;
5747 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
5750 exp->expType = op1->type;
5752 op1->type->refCount++;
5757 static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
5760 exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
5763 exp->expType = op1->type;
5765 op1->type->refCount++;
5770 static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
5773 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
5776 exp->expType = op1->type;
5778 op1->type->refCount++;
5783 static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
5786 exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
5789 exp->expType = op1->type;
5791 op1->type->refCount++;
5796 static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
5799 exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
5802 exp->expType = op1->type;
5804 op1->type->refCount++;
5809 static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
5812 exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
5815 exp->expType = op1->type;
5817 op1->type->refCount++;
5822 static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
5825 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
5828 exp->expType = op1->type;
5830 op1->type->refCount++;
5835 static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
5838 exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
5841 exp->expType = op1->type;
5843 op1->type->refCount++;
5848 static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
5851 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
5854 exp->expType = op1->type;
5856 op1->type->refCount++;
5861 static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5863 int value2 = op2->__anon1.i;
5866 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
5869 exp->expType = op1->type;
5871 op1->type->refCount++;
5876 static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5878 unsigned int value2 = op2->__anon1.ui;
5881 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
5884 exp->expType = op1->type;
5886 op1->type->refCount++;
5891 static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5893 long long value2 = op2->__anon1.i64;
5896 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
5899 exp->expType = op1->type;
5901 op1->type->refCount++;
5906 static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5908 uint64 value2 = op2->__anon1.ui64;
5911 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
5914 exp->expType = op1->type;
5916 op1->type->refCount++;
5921 static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5923 short value2 = op2->__anon1.s;
5926 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
5929 exp->expType = op1->type;
5931 op1->type->refCount++;
5936 static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5938 unsigned short value2 = op2->__anon1.us;
5941 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
5944 exp->expType = op1->type;
5946 op1->type->refCount++;
5951 static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5953 char value2 = op2->__anon1.c;
5956 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
5959 exp->expType = op1->type;
5961 op1->type->refCount++;
5966 static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5968 unsigned char value2 = op2->__anon1.uc;
5971 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
5974 exp->expType = op1->type;
5976 op1->type->refCount++;
5981 static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5983 float value2 = op2->__anon1.f;
5986 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
5989 exp->expType = op1->type;
5991 op1->type->refCount++;
5996 static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5998 double value2 = op2->__anon1.d;
6001 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
6004 exp->expType = op1->type;
6006 op1->type->refCount++;
6011 static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6013 int value2 = op2->__anon1.i;
6016 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
6019 exp->expType = op1->type;
6021 op1->type->refCount++;
6026 static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6028 unsigned int value2 = op2->__anon1.ui;
6031 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
6034 exp->expType = op1->type;
6036 op1->type->refCount++;
6041 static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6043 long long value2 = op2->__anon1.i64;
6046 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
6049 exp->expType = op1->type;
6051 op1->type->refCount++;
6056 static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6058 uint64 value2 = op2->__anon1.ui64;
6061 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
6064 exp->expType = op1->type;
6066 op1->type->refCount++;
6071 static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6073 short value2 = op2->__anon1.s;
6076 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
6079 exp->expType = op1->type;
6081 op1->type->refCount++;
6086 static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6088 unsigned short value2 = op2->__anon1.us;
6091 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
6094 exp->expType = op1->type;
6096 op1->type->refCount++;
6101 static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6103 char value2 = op2->__anon1.c;
6106 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
6109 exp->expType = op1->type;
6111 op1->type->refCount++;
6116 static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6118 unsigned char value2 = op2->__anon1.uc;
6121 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
6124 exp->expType = op1->type;
6126 op1->type->refCount++;
6131 static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6133 float value2 = op2->__anon1.f;
6136 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
6139 exp->expType = op1->type;
6141 op1->type->refCount++;
6146 static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6148 double value2 = op2->__anon1.d;
6151 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
6154 exp->expType = op1->type;
6156 op1->type->refCount++;
6161 static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6163 int value2 = op2->__anon1.i;
6166 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
6169 exp->expType = op1->type;
6171 op1->type->refCount++;
6176 static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6178 unsigned int value2 = op2->__anon1.ui;
6181 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
6184 exp->expType = op1->type;
6186 op1->type->refCount++;
6191 static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6193 long long value2 = op2->__anon1.i64;
6196 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
6199 exp->expType = op1->type;
6201 op1->type->refCount++;
6206 static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6208 uint64 value2 = op2->__anon1.ui64;
6211 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
6214 exp->expType = op1->type;
6216 op1->type->refCount++;
6221 static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6223 short value2 = op2->__anon1.s;
6226 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
6229 exp->expType = op1->type;
6231 op1->type->refCount++;
6236 static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6238 unsigned short value2 = op2->__anon1.us;
6241 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
6244 exp->expType = op1->type;
6246 op1->type->refCount++;
6251 static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6253 char value2 = op2->__anon1.c;
6256 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
6259 exp->expType = op1->type;
6261 op1->type->refCount++;
6266 static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6268 unsigned char value2 = op2->__anon1.uc;
6271 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
6274 exp->expType = op1->type;
6276 op1->type->refCount++;
6281 static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6283 float value2 = op2->__anon1.f;
6286 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
6289 exp->expType = op1->type;
6291 op1->type->refCount++;
6296 static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6298 double value2 = op2->__anon1.d;
6301 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
6304 exp->expType = op1->type;
6306 op1->type->refCount++;
6311 static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6313 int value2 = op2->__anon1.i;
6316 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
6319 exp->expType = op1->type;
6321 op1->type->refCount++;
6326 static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6328 unsigned int value2 = op2->__anon1.ui;
6331 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
6334 exp->expType = op1->type;
6336 op1->type->refCount++;
6341 static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6343 long long value2 = op2->__anon1.i64;
6346 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
6349 exp->expType = op1->type;
6351 op1->type->refCount++;
6356 static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6358 uint64 value2 = op2->__anon1.ui64;
6361 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
6364 exp->expType = op1->type;
6366 op1->type->refCount++;
6371 static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6373 short value2 = op2->__anon1.s;
6376 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
6379 exp->expType = op1->type;
6381 op1->type->refCount++;
6386 static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6388 unsigned short value2 = op2->__anon1.us;
6391 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
6394 exp->expType = op1->type;
6396 op1->type->refCount++;
6401 static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6403 char value2 = op2->__anon1.c;
6406 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
6409 exp->expType = op1->type;
6411 op1->type->refCount++;
6416 static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6418 unsigned char value2 = op2->__anon1.uc;
6421 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
6424 exp->expType = op1->type;
6426 op1->type->refCount++;
6431 static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6433 float value2 = op2->__anon1.f;
6436 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
6439 exp->expType = op1->type;
6441 op1->type->refCount++;
6446 static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6448 double value2 = op2->__anon1.d;
6451 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
6454 exp->expType = op1->type;
6456 op1->type->refCount++;
6461 static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6463 int value2 = op2->__anon1.i;
6466 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
6469 exp->expType = op1->type;
6471 op1->type->refCount++;
6476 static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6478 unsigned int value2 = op2->__anon1.ui;
6481 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
6484 exp->expType = op1->type;
6486 op1->type->refCount++;
6491 static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6493 long long value2 = op2->__anon1.i64;
6496 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
6499 exp->expType = op1->type;
6501 op1->type->refCount++;
6506 static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6508 uint64 value2 = op2->__anon1.ui64;
6511 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
6514 exp->expType = op1->type;
6516 op1->type->refCount++;
6521 static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6523 short value2 = op2->__anon1.s;
6526 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
6529 exp->expType = op1->type;
6531 op1->type->refCount++;
6536 static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6538 unsigned short value2 = op2->__anon1.us;
6541 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
6544 exp->expType = op1->type;
6546 op1->type->refCount++;
6551 static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6553 char value2 = op2->__anon1.c;
6556 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
6559 exp->expType = op1->type;
6561 op1->type->refCount++;
6566 static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6568 unsigned char value2 = op2->__anon1.uc;
6571 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
6574 exp->expType = op1->type;
6576 op1->type->refCount++;
6581 static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6583 float value2 = op2->__anon1.f;
6586 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
6589 exp->expType = op1->type;
6591 op1->type->refCount++;
6596 static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6598 double value2 = op2->__anon1.d;
6601 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
6604 exp->expType = op1->type;
6606 op1->type->refCount++;
6611 static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6613 int value2 = op2->__anon1.i;
6616 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
6619 exp->expType = op1->type;
6621 op1->type->refCount++;
6626 static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6628 unsigned int value2 = op2->__anon1.ui;
6631 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
6634 exp->expType = op1->type;
6636 op1->type->refCount++;
6641 static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6643 long long value2 = op2->__anon1.i64;
6646 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
6649 exp->expType = op1->type;
6651 op1->type->refCount++;
6656 static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6658 uint64 value2 = op2->__anon1.ui64;
6661 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
6664 exp->expType = op1->type;
6666 op1->type->refCount++;
6671 static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6673 short value2 = op2->__anon1.s;
6676 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
6679 exp->expType = op1->type;
6681 op1->type->refCount++;
6686 static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6688 unsigned short value2 = op2->__anon1.us;
6691 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
6694 exp->expType = op1->type;
6696 op1->type->refCount++;
6701 static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6703 char value2 = op2->__anon1.c;
6706 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
6709 exp->expType = op1->type;
6711 op1->type->refCount++;
6716 static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6718 unsigned char value2 = op2->__anon1.uc;
6721 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
6724 exp->expType = op1->type;
6726 op1->type->refCount++;
6731 static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6733 float value2 = op2->__anon1.f;
6736 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
6739 exp->expType = op1->type;
6741 op1->type->refCount++;
6746 static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6748 double value2 = op2->__anon1.d;
6751 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
6754 exp->expType = op1->type;
6756 op1->type->refCount++;
6761 static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6763 int value2 = op2->__anon1.i;
6766 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
6769 exp->expType = op1->type;
6771 op1->type->refCount++;
6776 static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6778 unsigned int value2 = op2->__anon1.ui;
6781 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
6784 exp->expType = op1->type;
6786 op1->type->refCount++;
6791 static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6793 long long value2 = op2->__anon1.i64;
6796 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
6799 exp->expType = op1->type;
6801 op1->type->refCount++;
6806 static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6808 uint64 value2 = op2->__anon1.ui64;
6811 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
6814 exp->expType = op1->type;
6816 op1->type->refCount++;
6821 static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6823 short value2 = op2->__anon1.s;
6826 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
6829 exp->expType = op1->type;
6831 op1->type->refCount++;
6836 static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6838 unsigned short value2 = op2->__anon1.us;
6841 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
6844 exp->expType = op1->type;
6846 op1->type->refCount++;
6851 static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6853 char value2 = op2->__anon1.c;
6856 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
6859 exp->expType = op1->type;
6861 op1->type->refCount++;
6866 static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6868 unsigned char value2 = op2->__anon1.uc;
6871 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
6874 exp->expType = op1->type;
6876 op1->type->refCount++;
6881 static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6883 float value2 = op2->__anon1.f;
6886 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
6889 exp->expType = op1->type;
6891 op1->type->refCount++;
6896 static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6898 double value2 = op2->__anon1.d;
6901 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
6904 exp->expType = op1->type;
6906 op1->type->refCount++;
6911 static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6913 int value2 = op2->__anon1.i;
6916 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
6919 exp->expType = op1->type;
6921 op1->type->refCount++;
6926 static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6928 unsigned int value2 = op2->__anon1.ui;
6931 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
6934 exp->expType = op1->type;
6936 op1->type->refCount++;
6941 static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6943 long long value2 = op2->__anon1.i64;
6946 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
6949 exp->expType = op1->type;
6951 op1->type->refCount++;
6956 static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6958 uint64 value2 = op2->__anon1.ui64;
6961 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
6964 exp->expType = op1->type;
6966 op1->type->refCount++;
6971 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6973 short value2 = op2->__anon1.s;
6976 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
6979 exp->expType = op1->type;
6981 op1->type->refCount++;
6986 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6988 unsigned short value2 = op2->__anon1.us;
6991 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
6994 exp->expType = op1->type;
6996 op1->type->refCount++;
7001 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7003 char value2 = op2->__anon1.c;
7006 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
7009 exp->expType = op1->type;
7011 op1->type->refCount++;
7016 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7018 unsigned char value2 = op2->__anon1.uc;
7021 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
7024 exp->expType = op1->type;
7026 op1->type->refCount++;
7031 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7033 float value2 = op2->__anon1.f;
7036 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
7039 exp->expType = op1->type;
7041 op1->type->refCount++;
7046 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7048 double value2 = op2->__anon1.d;
7051 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
7054 exp->expType = op1->type;
7056 op1->type->refCount++;
7061 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7064 exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
7067 exp->expType = op1->type;
7069 op1->type->refCount++;
7074 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7077 exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
7080 exp->expType = op1->type;
7082 op1->type->refCount++;
7087 static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7090 exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
7093 exp->expType = op1->type;
7095 op1->type->refCount++;
7100 static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7103 exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
7106 exp->expType = op1->type;
7108 op1->type->refCount++;
7113 static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7116 exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
7119 exp->expType = op1->type;
7121 op1->type->refCount++;
7126 static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7129 exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
7132 exp->expType = op1->type;
7134 op1->type->refCount++;
7139 static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7142 exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
7145 exp->expType = op1->type;
7147 op1->type->refCount++;
7152 static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7155 exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
7158 exp->expType = op1->type;
7160 op1->type->refCount++;
7165 static void PrintName(struct Type * type, char * string, unsigned int fullName)
7167 if(type->name && type->name[0])
7170 strcat(string, type->name);
7173 char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
7179 strcat(string, name);
7184 static void PrintAttribs(struct Type * type, char * string)
7189 strcat(string, "dllexport ");
7190 if(type->attrStdcall)
7191 strcat(string, "stdcall ");
7195 static struct Type * FindMember(struct Type * type, char * string)
7197 struct Type * memberType;
7199 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
7201 if(!memberType->name)
7203 struct Type * subType = FindMember(memberType, string);
7208 else if(!strcmp(memberType->name, string))
7211 return (((void *)0));
7214 unsigned int __ecereProp_Type_Get_isPointerType(struct Type * this);
7216 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
7218 static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
7220 unsigned int result = 0;
7225 if(op->kind == 1 || op->kind == 15 || op->kind == 24)
7226 result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
7230 if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
7231 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
7234 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)
7235 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7238 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)
7239 result = GetOpFloat(op, &op->__anon1.f);
7242 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)
7243 result = GetOpDouble(op, &op->__anon1.d);
7246 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)
7247 result = GetOpUInt64(op, &op->__anon1.ui64);
7250 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)
7251 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
7254 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
7255 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7258 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
7259 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7265 struct OpTable floatOps =
7267 (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)
7270 struct OpTable doubleOps =
7272 (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)
7275 struct OpTable intOps =
7277 (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)
7280 struct OpTable uintOps =
7282 (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)
7285 struct OpTable int64Ops =
7287 (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)
7290 struct OpTable uint64Ops =
7292 (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)
7295 struct OpTable shortOps =
7297 (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)
7300 struct OpTable ushortOps =
7302 (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)
7305 struct OpTable charOps =
7307 (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)
7310 struct OpTable ucharOps =
7312 (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)
7315 struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned int * offset)
7317 struct Type * memberType;
7319 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
7321 if(!memberType->name)
7323 struct Type * subType = FindMember(memberType, string);
7327 *offset += memberType->offset;
7331 else if(!strcmp(memberType->name, string))
7333 *offset += memberType->offset;
7337 return (((void *)0));
7340 struct __ecereNameSpace__ecere__com__Module;
7342 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);
7344 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
7346 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);
7348 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);
7350 extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Instance * moduleToFind);
7352 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
7357 struct __ecereNameSpace__ecere__sys__BTNode * parent;
7358 struct __ecereNameSpace__ecere__sys__BTNode * left;
7359 struct __ecereNameSpace__ecere__sys__BTNode * right;
7361 struct __ecereNameSpace__ecere__com__Instance * module;
7362 char * dataTypeString;
7363 struct Type * dataType;
7368 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);
7370 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
7372 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);
7374 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
7376 struct __ecereNameSpace__ecere__com__DefinedExpression;
7378 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
7380 struct __ecereNameSpace__ecere__com__DefinedExpression
7382 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
7383 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
7386 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
7389 struct __ecereNameSpace__ecere__sys__BinaryTree;
7391 struct __ecereNameSpace__ecere__sys__BinaryTree
7393 struct __ecereNameSpace__ecere__sys__BTNode * root;
7395 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
7396 void (* FreeKey)(void * key);
7399 struct __ecereNameSpace__ecere__com__Class
7401 struct __ecereNameSpace__ecere__com__Class * prev;
7402 struct __ecereNameSpace__ecere__com__Class * next;
7408 unsigned int (* Constructor)(void * );
7409 void (* Destructor)(void * );
7412 struct __ecereNameSpace__ecere__com__Class * base;
7413 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
7414 struct __ecereNameSpace__ecere__sys__BinaryTree members;
7415 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
7416 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
7417 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
7418 struct __ecereNameSpace__ecere__sys__OldList derivatives;
7422 struct __ecereNameSpace__ecere__com__Instance * module;
7423 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
7424 const char * dataTypeString;
7425 struct Type * dataType;
7427 int defaultAlignment;
7428 void (* Initialize)();
7430 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
7431 const char * designerClass;
7432 unsigned int noExpansion;
7433 const char * defaultProperty;
7434 unsigned int comRedefinition;
7437 unsigned int internalDecl;
7439 unsigned int computeSize;
7440 short structAlignment;
7441 short pointerAlignment;
7442 int destructionWatchOffset;
7444 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
7445 int inheritanceAccess;
7446 const char * fullName;
7448 struct __ecereNameSpace__ecere__sys__OldList conversions;
7449 struct __ecereNameSpace__ecere__sys__OldList templateParams;
7450 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
7451 struct __ecereNameSpace__ecere__com__Class * templateClass;
7452 struct __ecereNameSpace__ecere__sys__OldList templatized;
7454 unsigned int isInstanceClass;
7455 unsigned int byValueSystemClass;
7458 struct __ecereNameSpace__ecere__com__NameSpace
7461 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
7462 struct __ecereNameSpace__ecere__com__NameSpace * left;
7463 struct __ecereNameSpace__ecere__com__NameSpace * right;
7465 struct __ecereNameSpace__ecere__com__NameSpace * parent;
7466 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
7467 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
7468 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
7469 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
7472 struct __ecereNameSpace__ecere__com__DataMember
7474 struct __ecereNameSpace__ecere__com__DataMember * prev;
7475 struct __ecereNameSpace__ecere__com__DataMember * next;
7477 unsigned int isProperty;
7480 struct __ecereNameSpace__ecere__com__Class * _class;
7481 const char * dataTypeString;
7482 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
7483 struct Type * dataType;
7487 struct __ecereNameSpace__ecere__sys__OldList members;
7488 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
7490 short structAlignment;
7491 short pointerAlignment;
7494 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
7496 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
7498 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
7500 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
7502 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
7504 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Conversion;
7506 static void _DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef, unsigned int fwdDecl)
7510 if(type->kind == 11)
7512 struct Type * param;
7514 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
7515 _DeclareType(neededFor, param, forFunctionDef, 0, fwdDecl);
7516 _DeclareType(neededFor, type->__anon1.__anon2.returnType, forFunctionDef, 0, fwdDecl);
7518 else if(type->kind == 13)
7519 _DeclareType(neededFor, type->__anon1.type, 0, 0, fwdDecl);
7520 else if(type->kind == 8)
7522 struct __ecereNameSpace__ecere__com__Class * c = type->__anon1._class->__anon1.registered;
7524 _DeclareStruct(neededFor, c ? c->fullName : "ecere::com::Instance", c ? c->type == 5 : 0, needDereference && c && c->type == 1, fwdDecl);
7526 else if(type->kind == 9 || type->kind == 10)
7528 struct Type * member;
7530 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
7531 _DeclareType(neededFor, member, needDereference, forFunctionDef, fwdDecl);
7533 else if(type->kind == 12)
7534 _DeclareType(neededFor, type->__anon1.__anon4.arrayType, 1, 0, fwdDecl);
7538 static unsigned int CheckConstCompatibility(struct Type * source, struct Type * dest, unsigned int warn)
7540 unsigned int status = 1;
7542 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))
7544 struct __ecereNameSpace__ecere__com__Class * sourceClass = source->kind == 8 ? source->__anon1._class->__anon1.registered : (((void *)0));
7545 struct __ecereNameSpace__ecere__com__Class * destClass = dest->kind == 8 ? dest->__anon1._class->__anon1.registered : (((void *)0));
7547 if((!sourceClass || (sourceClass && sourceClass->type == 0 && !sourceClass->structSize)) && (!destClass || (destClass && destClass->type == 0 && !destClass->structSize)))
7549 struct Type * sourceType = source, * destType = dest;
7551 while((sourceType->kind == 13 || sourceType->kind == 12) && sourceType->__anon1.type)
7552 sourceType = sourceType->__anon1.type;
7553 while((destType->kind == 13 || destType->kind == 12) && destType->__anon1.type)
7554 destType = destType->__anon1.type;
7555 if(!destType->constant && sourceType->constant)
7559 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "discarding const qualifier\n", (((void *)0))));
7566 struct Operand GetOperand(struct Expression * exp)
7575 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
7578 struct Type * type = exp->expType;
7582 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))
7584 if(!type->__anon1._class->__anon1.registered->dataType)
7585 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
7586 type = type->__anon1._class->__anon1.registered->dataType;
7588 if(exp->type == 3 && op.kind == 13)
7590 op.__anon1.ui64 = (uint64)(uintptr_t)exp->__anon1.__anon2.string;
7594 else if(exp->isConstant && exp->type == 2)
7596 op.kind = type->kind;
7603 if(exp->__anon1.__anon1.constant[0] == '\'')
7605 op.__anon1.c = exp->__anon1.__anon1.constant[1];
7608 else if(type->isSigned)
7610 op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7615 op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7621 if(exp->__anon1.__anon1.constant[0] == '\'')
7623 op.__anon1.s = exp->__anon1.__anon1.constant[1];
7626 else if(type->isSigned)
7628 op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7633 op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7639 if(exp->__anon1.__anon1.constant[0] == '\'')
7641 op.__anon1.i = exp->__anon1.__anon1.constant[1];
7644 else if(type->isSigned)
7646 op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7651 op.__anon1.ui = (unsigned int)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7659 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7664 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7672 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7677 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7685 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7690 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7696 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
7697 op.__anon1.f = __ecereMethod_float_inf();
7698 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
7699 op.__anon1.f = -__ecereMethod_float_inf();
7700 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
7701 op.__anon1.f = __ecereMethod_float_nan();
7702 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
7703 op.__anon1.f = -__ecereMethod_float_nan();
7705 op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
7709 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
7710 op.__anon1.d = __ecereMethod_double_inf();
7711 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
7712 op.__anon1.d = -__ecereMethod_double_inf();
7713 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
7714 op.__anon1.d = __ecereMethod_double_nan();
7715 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
7716 op.__anon1.d = -__ecereMethod_double_nan();
7718 op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
7724 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7734 static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
7738 switch(_class->typeSize)
7741 if(!strcmp(_class->dataTypeString, "uint64"))
7742 v = (long long)*(uint64 *)ptr;
7744 v = *(long long *)ptr;
7747 if(!strcmp(_class->dataTypeString, "uint"))
7748 v = (long long)*(unsigned int *)ptr;
7750 v = (long long)*(int *)ptr;
7753 if(!strcmp(_class->dataTypeString, "uint16"))
7754 v = (long long)*(unsigned short *)ptr;
7756 v = (long long)*(short *)ptr;
7759 if(!strcmp(_class->dataTypeString, "byte"))
7760 v = (long long)*(unsigned char *)ptr;
7762 v = (long long)*(char *)ptr;
7768 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
7770 if(!type->isSigned && type->kind != 22 && type->kind != 23)
7771 ListAdd(specs, MkSpecifier(UNSIGNED));
7776 if(type->__anon1._class->__anon1.registered)
7778 if(!type->__anon1._class->__anon1.registered->dataType)
7779 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
7780 GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
7785 ListAdd(specs, MkSpecifier(DOUBLE));
7788 ListAdd(specs, MkSpecifier(FLOAT));
7791 ListAdd(specs, MkSpecifier(CHAR));
7794 ListAdd(specs, MkSpecifier(_BOOL));
7797 ListAdd(specs, MkSpecifier(SHORT));
7800 ListAdd(specs, MkSpecifier(INT64));
7803 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
7806 ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
7810 ListAdd(specs, MkSpecifier(INT));
7815 static void PrintTypeSpecs(struct Type * type, char * string, unsigned int fullName, unsigned int printConst)
7819 if(printConst && type->constant)
7820 strcat(string, "const ");
7825 struct Symbol * c = type->__anon1._class;
7826 unsigned int isObjectBaseClass = !c || !c->string || !strcmp(c->string, "class");
7828 if(type->classObjectType == 2 && isObjectBaseClass)
7829 strcat(string, "typed_object");
7830 else if(type->classObjectType == 3 && isObjectBaseClass)
7831 strcat(string, "any_object");
7835 strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
7837 if(type->byReference)
7838 strcat(string, " &");
7842 strcat(string, "void");
7845 strcat(string, type->isSigned ? "int" : "uint");
7848 strcat(string, type->isSigned ? "int64" : "uint64");
7851 strcat(string, type->isSigned ? "intptr" : "uintptr");
7854 strcat(string, type->isSigned ? "intsize" : "uintsize");
7857 strcat(string, type->isSigned ? "char" : "byte");
7860 strcat(string, "_Bool");
7863 strcat(string, type->isSigned ? "short" : "uint16");
7866 strcat(string, "float");
7869 strcat(string, "double");
7872 if(type->__anon1.__anon1.enumName)
7874 strcat(string, "struct ");
7875 strcat(string, type->__anon1.__anon1.enumName);
7877 else if(type->typeName)
7878 strcat(string, type->typeName);
7881 struct Type * member;
7883 strcat(string, "struct { ");
7884 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
7886 PrintType(member, string, 1, fullName);
7887 strcat(string, "; ");
7889 strcat(string, "}");
7893 if(type->__anon1.__anon1.enumName)
7895 strcat(string, "union ");
7896 strcat(string, type->__anon1.__anon1.enumName);
7898 else if(type->typeName)
7899 strcat(string, type->typeName);
7902 strcat(string, "union ");
7903 strcat(string, "(unnamed)");
7907 if(type->__anon1.__anon1.enumName)
7909 strcat(string, "enum ");
7910 strcat(string, type->__anon1.__anon1.enumName);
7912 else if(type->typeName)
7913 strcat(string, type->typeName);
7915 strcat(string, "int");
7918 strcat(string, "...");
7921 strcat(string, "subclass(");
7922 strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
7923 strcat(string, ")");
7926 strcat(string, type->__anon1.templateParameter->identifier->string);
7929 strcat(string, "thisclass");
7932 strcat(string, "__builtin_va_list");
7938 extern char * __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
7940 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
7942 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
7944 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
7946 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyImport;
7948 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
7950 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType;
7952 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
7954 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MethodImport;
7956 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionImport;
7958 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
7960 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
7962 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
7964 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
7966 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
7968 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
7970 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
7972 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
7974 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
7976 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
7978 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
7980 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
7982 struct __ecereNameSpace__ecere__com__Application
7985 const char * * argv;
7987 unsigned int isGUIApp;
7988 struct __ecereNameSpace__ecere__sys__OldList allModules;
7989 char * parsedCommand;
7990 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
7993 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)
7997 *curMember = (*curMember)->next;
7998 if(subMemberStackPos && *subMemberStackPos > 0 && subMemberStack[*subMemberStackPos - 1]->type == 1)
8000 *curMember = subMemberStack[--(*subMemberStackPos)];
8001 *curMember = (*curMember)->next;
8003 while((*curMember) && (*curMember)->isProperty)
8004 *curMember = (*curMember)->next;
8005 if(subMemberStackPos)
8007 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
8009 subMemberStack[(*subMemberStackPos)++] = *curMember;
8010 *curMember = (*curMember)->members.first;
8011 while(*curMember && (*curMember)->isProperty)
8012 *curMember = (*curMember)->next;
8020 if(subMemberStackPos && *subMemberStackPos)
8022 *curMember = subMemberStack[--(*subMemberStackPos)];
8023 *curMember = (*curMember)->next;
8027 struct __ecereNameSpace__ecere__com__Class * lastCurClass = *curClass;
8029 if(*curClass == _class)
8031 for(*curClass = _class; (*curClass)->base != lastCurClass && (*curClass)->base->type != 1000; *curClass = (*curClass)->base)
8033 *curMember = (*curClass)->membersAndProperties.first;
8035 while((*curMember) && (*curMember)->isProperty)
8036 *curMember = (*curMember)->next;
8037 if(subMemberStackPos)
8039 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
8041 subMemberStack[(*subMemberStackPos)++] = *curMember;
8042 *curMember = (*curMember)->members.first;
8043 while(*curMember && (*curMember)->isProperty)
8044 *curMember = (*curMember)->next;
8051 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
8053 struct __ecereNameSpace__ecere__sys__BinaryTree * tree = &nameSpace->functions;
8054 struct GlobalData * data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((&*tree), name);
8055 struct __ecereNameSpace__ecere__com__NameSpace * child;
8059 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)))
8061 data = ScanGlobalData(child, name);
8069 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
8071 int nsLen = strlen(nameSpace);
8072 struct Symbol * symbol;
8074 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)))
8076 char * s = symbol->string;
8078 if(!strncmp(s, nameSpace, nsLen))
8083 for(c = strlen(s) - 1; c >= 0; c--)
8086 namePart = s + c + 1;
8087 if(!strcmp(namePart, name))
8095 return (((void *)0));
8098 unsigned int GetInt(struct Expression * exp, int * value2)
8100 struct Operand op2 = GetOperand(exp);
8102 return GetOpInt(&op2, value2);
8105 unsigned int GetUInt(struct Expression * exp, unsigned int * value2)
8107 struct Operand op2 = GetOperand(exp);
8109 return GetOpUInt(&op2, value2);
8112 unsigned int GetInt64(struct Expression * exp, long long * value2)
8114 struct Operand op2 = GetOperand(exp);
8116 return GetOpInt64(&op2, value2);
8119 unsigned int GetUInt64(struct Expression * exp, uint64 * value2)
8121 struct Operand op2 = GetOperand(exp);
8123 return GetOpUInt64(&op2, value2);
8126 unsigned int GetIntPtr(struct Expression * exp, intptr_t * value2)
8128 struct Operand op2 = GetOperand(exp);
8130 return GetOpIntPtr(&op2, value2);
8133 unsigned int GetUIntPtr(struct Expression * exp, uintptr_t * value2)
8135 struct Operand op2 = GetOperand(exp);
8137 return GetOpUIntPtr(&op2, value2);
8140 unsigned int GetIntSize(struct Expression * exp, ssize_t * value2)
8142 struct Operand op2 = GetOperand(exp);
8144 return GetOpIntSize(&op2, value2);
8147 unsigned int GetUIntSize(struct Expression * exp, size_t * value2)
8149 struct Operand op2 = GetOperand(exp);
8151 return GetOpUIntSize(&op2, value2);
8154 unsigned int GetShort(struct Expression * exp, short * value2)
8156 struct Operand op2 = GetOperand(exp);
8158 return GetOpShort(&op2, value2);
8161 unsigned int GetUShort(struct Expression * exp, unsigned short * value2)
8163 struct Operand op2 = GetOperand(exp);
8165 return GetOpUShort(&op2, value2);
8168 unsigned int GetChar(struct Expression * exp, char * value2)
8170 struct Operand op2 = GetOperand(exp);
8172 return GetOpChar(&op2, value2);
8175 unsigned int GetUChar(struct Expression * exp, unsigned char * value2)
8177 struct Operand op2 = GetOperand(exp);
8179 return GetOpUChar(&op2, value2);
8182 unsigned int GetFloat(struct Expression * exp, float * value2)
8184 struct Operand op2 = GetOperand(exp);
8186 return GetOpFloat(&op2, value2);
8189 unsigned int GetDouble(struct Expression * exp, double * value2)
8191 struct Operand op2 = GetOperand(exp);
8193 return GetOpDouble(&op2, value2);
8196 static void PrePrintType(struct Type * type, char * string, unsigned int fullName, struct Type * parentType, unsigned int printConst)
8198 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8200 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
8201 PrintAttribs(type, string);
8202 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
8203 strcat(string, " const");
8204 PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
8205 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8206 strcat(string, " (");
8207 if(type->kind == 13)
8209 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
8210 PrintAttribs(type->__anon1.type, string);
8212 if(type->kind == 13)
8214 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
8215 strcat(string, "*");
8217 strcat(string, " *");
8219 if(printConst && type->constant && type->kind == 13)
8220 strcat(string, " const");
8223 PrintTypeSpecs(type, string, fullName, printConst);
8226 void PrintExpression(struct Expression * exp, char * string)
8229 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8231 unsigned int backOutputLineNumbers = outputLineNumbers;
8233 outputLineNumbers = 0;
8235 OutputExpression(exp, f);
8236 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8237 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8239 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8240 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
8241 count = strlen(string);
8242 count += ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void * buffer, unsigned int size, unsigned int count))__extension__ ({
8243 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8245 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8246 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(f, string + count, 1, 1023);
8247 string[count] = '\0';
8248 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
8249 outputLineNumbers = backOutputLineNumbers;
8253 struct Type * Dereference(struct Type * source)
8255 struct Type * type = (((void *)0));
8259 if(source->kind == 13 || source->kind == 12)
8261 type = source->__anon1.type;
8262 source->__anon1.type->refCount++;
8264 else if(source->kind == 8 && !strcmp(source->__anon1._class->string, "String"))
8266 type = __extension__ ({
8267 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8269 __ecereInstance1->kind = 1, __ecereInstance1->refCount = 1, __ecereInstance1;
8272 else if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 5)
8278 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot dereference type\n", (((void *)0))));
8283 static struct Type * Reference(struct Type * source)
8285 struct Type * type = (((void *)0));
8289 type = __extension__ ({
8290 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8292 __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
8299 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
8301 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
8303 FreeExpContents(checkedExp);
8304 FreeType(checkedExp->expType);
8305 FreeType(checkedExp->destType);
8306 *checkedExp = *newExp;
8307 ((newExp ? __extension__ ({
8308 void * __ecerePtrToDelete = (newExp);
8310 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8311 }) : 0), newExp = 0);
8312 checkedExp->prev = prev;
8313 checkedExp->next = next;
8316 void FinishTemplatesContext(struct Context * context)
8318 PopContext(context);
8319 FreeContext(context);
8320 ((context ? __extension__ ({
8321 void * __ecerePtrToDelete = (context);
8323 __ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8324 }) : 0), context = 0);
8327 static __attribute__((unused)) void UnusedFunction()
8331 ((const char * (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char * tempString, void * fieldData, unsigned int * needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int, (void *)&a, 0, 0, 0);
8334 struct Expression * ParseExpressionString(char * expression)
8337 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8338 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
8339 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8341 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8342 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
8343 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8344 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8346 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8347 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
8349 parsedExpression = (((void *)0));
8351 expression_yyparse();
8352 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
8353 return parsedExpression;
8356 struct __ecereNameSpace__ecere__com__Module
8358 struct __ecereNameSpace__ecere__com__Instance * application;
8359 struct __ecereNameSpace__ecere__sys__OldList classes;
8360 struct __ecereNameSpace__ecere__sys__OldList defines;
8361 struct __ecereNameSpace__ecere__sys__OldList functions;
8362 struct __ecereNameSpace__ecere__sys__OldList modules;
8363 struct __ecereNameSpace__ecere__com__Instance * prev;
8364 struct __ecereNameSpace__ecere__com__Instance * next;
8370 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
8371 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
8374 static struct GlobalData * FindGlobalData(char * name)
8377 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
8379 nameSpace = globalData;
8380 for(c = 0; name[c]; c++)
8382 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
8384 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
8385 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
8387 strncpy(spaceName, name + start, c - start);
8388 spaceName[c - start] = '\0';
8389 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
8390 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
8392 return (((void *)0));
8393 nameSpace = newSpace;
8401 return ScanGlobalData(nameSpace, name + start);
8403 return (((void *)0));
8406 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
8409 char nameSpace[1024];
8410 const char * namePart;
8411 unsigned int gotColon = 0;
8413 nameSpace[0] = '\0';
8414 for(c = strlen(name) - 1; c >= 0; c--)
8420 namePart = name + c + 1;
8421 while(c >= 0 && name[c] == ':')
8425 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
8429 memcpy(nameSpace, name, c + 1);
8430 nameSpace[c + 1] = 0;
8431 return ScanWithNameSpace(tree, nameSpace, namePart);
8435 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8441 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8445 return ScanWithNameSpace(tree, "", namePart);
8447 return (((void *)0));
8450 static void PrintArraySize(struct Type * arrayType, char * string)
8456 if(arrayType->__anon1.__anon4.enumClass)
8457 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
8458 else if(arrayType->__anon1.__anon4.arraySizeExp)
8459 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
8461 strcat(string, size);
8464 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
8469 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
8471 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8472 strcat(string, ")");
8473 if(type->kind == 12)
8474 PrintArraySize(type, string);
8475 else if(type->kind == 11)
8477 struct Type * param;
8479 strcat(string, "(");
8480 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
8482 PrintType(param, string, 1, fullName);
8484 strcat(string, ", ");
8486 strcat(string, ")");
8488 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8489 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
8492 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
8494 PrePrintType(type, string, fullName, (((void *)0)), printConst);
8495 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
8496 strcat(string, " ");
8497 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
8499 struct Symbol * _class = type->__anon1.__anon2.thisClass;
8501 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
8503 if(type->classObjectType == 1)
8504 strcat(string, "class");
8506 strcat(string, type->byReference ? "typed_object&" : "typed_object");
8508 else if(_class && _class->string)
8510 char * s = _class->string;
8516 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
8522 strcat(string, name);
8525 strcat(string, "::");
8527 if(printName && type->name)
8528 PrintName(type, string, fullName);
8529 PostPrintType(type, string, fullName);
8530 if(type->bitFieldCount)
8534 sprintf(count, ":%d", type->bitFieldCount);
8535 strcat(string, count);
8543 struct Conversion * prev, * next;
8544 struct __ecereNameSpace__ecere__com__Property * convert;
8546 struct Type * resultType;
8549 static void FreeConvert(struct Conversion * convert)
8551 if(convert->resultType)
8552 FreeType(convert->resultType);
8559 struct Enumerator * prev;
8560 struct Enumerator * next;
8561 struct Location loc;
8562 struct Identifier * id;
8563 struct Expression * exp;
8570 struct AsmField * prev;
8571 struct AsmField * next;
8572 struct Location loc;
8574 struct Expression * expression;
8575 struct Identifier * symbolic;
8578 struct ClassDefinition;
8582 struct Context * parent;
8583 struct __ecereNameSpace__ecere__sys__BinaryTree types;
8584 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
8585 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
8586 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
8589 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
8590 struct ClassDefinition * classDef;
8591 unsigned int templateTypesOnly;
8592 unsigned int hasNameSpace;
8597 struct External * prev;
8598 struct External * next;
8599 struct Location loc;
8601 struct Symbol * symbol;
8604 struct FunctionDefinition * function;
8605 struct ClassDefinition * _class;
8606 struct Declaration * declaration;
8607 char * importString;
8608 struct Identifier * id;
8609 struct DBTableDef * table;
8610 } ecere_gcc_struct __anon1;
8612 struct External * fwdDecl;
8613 struct __ecereNameSpace__ecere__com__Instance * outgoing;
8614 struct __ecereNameSpace__ecere__com__Instance * incoming;
8615 int nonBreakableIncoming;
8618 struct ClassDefinition
8620 struct ClassDefinition * prev;
8621 struct ClassDefinition * next;
8622 struct Location loc;
8623 struct Specifier * _class;
8624 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
8625 struct __ecereNameSpace__ecere__sys__OldList * definitions;
8626 struct Symbol * symbol;
8627 struct Location blockStart;
8628 struct Location nameLoc;
8630 unsigned int deleteWatchable;
8633 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
8635 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
8637 void DeclareGlobalData(struct External * neededFor, struct GlobalData * data)
8639 struct Symbol * symbol = data->symbol;
8641 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
8646 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
8649 data->dataType = ProcessTypeString(data->dataTypeString, 0);
8652 struct Declaration * decl;
8653 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
8654 struct Declarator * d;
8655 struct External * external;
8657 specifiers = MkList();
8658 declarators = MkList();
8659 ListAdd(specifiers, MkSpecifier(EXTERN));
8660 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
8661 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
8662 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
8663 decl = MkDeclaration(specifiers, declarators);
8664 external = MkExternalDeclaration(decl);
8666 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
8667 external->symbol = symbol;
8668 symbol->__anon2.__anon1.pointerExternal = external;
8669 DeclareType(external, data->dataType, 1, 1);
8672 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
8673 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, 0);
8676 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
8678 struct Context * ctx;
8679 struct Symbol * symbol = (((void *)0));
8681 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
8683 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
8685 symbol = (((void *)0));
8690 strcpy(curName, thisNameSpace);
8691 strcat(curName, "::");
8692 strcat(curName, name);
8693 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
8696 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
8699 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
8700 if(symbol || ctx == endContext)
8703 if(inCompiler && symbol && ctx == globalContext && symbol->__anon2.__anon1.pointerExternal && curExternal && symbol->__anon2.__anon1.pointerExternal != curExternal)
8704 __ecereMethod_External_CreateUniqueEdge(curExternal, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
8712 struct ClassDef * prev;
8713 struct ClassDef * next;
8714 struct Location loc;
8718 struct Declaration * decl;
8719 struct ClassFunction * function;
8720 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
8721 struct PropertyDef * propertyDef;
8722 struct PropertyWatch * propertyWatch;
8724 struct Identifier * defaultProperty;
8727 struct Identifier * id;
8728 struct Initializer * initializer;
8729 } ecere_gcc_struct __anon1;
8730 } ecere_gcc_struct __anon1;
8737 struct PropertyDef * prev;
8738 struct PropertyDef * next;
8739 struct Location loc;
8740 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
8741 struct Declarator * declarator;
8742 struct Identifier * id;
8743 struct Statement * getStmt;
8744 struct Statement * setStmt;
8745 struct Statement * issetStmt;
8746 struct Symbol * symbol;
8747 struct Expression * category;
8750 unsigned int conversion : 1;
8751 unsigned int isWatchable : 1;
8752 unsigned int isDBProp : 1;
8753 } ecere_gcc_struct __anon1;
8756 static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
8758 struct ClassDef * def;
8761 for(def = (*definitions).first; def; def = def->next)
8765 struct Declaration * decl = def->__anon1.decl;
8767 if(decl && decl->__anon1.__anon1.specifiers)
8769 struct Specifier * spec;
8770 unsigned int isStruct = 0;
8772 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
8774 if(spec->type == 3 || spec->type == 4)
8776 if(spec->__anon1.__anon2.definitions)
8777 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
8783 struct Declarator * d = (((void *)0));
8785 if(decl->__anon1.__anon1.declarators)
8787 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
8789 struct Identifier * idDecl = GetDeclId(d);
8799 sprintf(id, "__anon%d", anonID++);
8800 if(!decl->__anon1.__anon1.declarators)
8801 decl->__anon1.__anon1.declarators = MkList();
8802 ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
8812 typedef union YYSTYPE
8817 struct Identifier * id;
8818 struct Expression * exp;
8819 struct Specifier * specifier;
8820 struct __ecereNameSpace__ecere__sys__OldList * list;
8821 struct Enumerator * enumerator;
8822 struct Declarator * declarator;
8823 struct Pointer * pointer;
8824 struct Initializer * initializer;
8825 struct InitDeclarator * initDeclarator;
8826 struct TypeName * typeName;
8827 struct Declaration * declaration;
8828 struct Statement * stmt;
8829 struct FunctionDefinition * function;
8830 struct External * external;
8831 struct Context * context;
8832 struct AsmField * asmField;
8833 struct Attrib * attrib;
8834 struct ExtDecl * extDecl;
8835 struct Attribute * attribute;
8836 struct Instantiation * instance;
8837 struct MembersInit * membersInit;
8838 struct MemberInit * memberInit;
8839 struct ClassFunction * classFunction;
8840 struct ClassDefinition * _class;
8841 struct ClassDef * classDef;
8842 struct PropertyDef * prop;
8844 struct Symbol * symbol;
8845 struct PropertyWatch * propertyWatch;
8846 struct TemplateParameter * templateParameter;
8847 struct TemplateArgument * templateArgument;
8848 struct TemplateDatatype * templateDatatype;
8849 struct DBTableEntry * dbtableEntry;
8850 struct DBIndexItem * dbindexItem;
8851 struct DBTableDef * dbtableDef;
8852 } ecere_gcc_struct YYSTYPE;
8854 extern YYSTYPE yylval;
8858 struct MemberInit * prev;
8859 struct MemberInit * next;
8860 struct Location loc;
8861 struct Location realLoc;
8862 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
8863 struct Initializer * initializer;
8865 unsigned int variable;
8866 unsigned int takeOutExp;
8869 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
8871 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
8873 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
8875 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
8876 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
8881 const char * dataTypeString;
8883 } ecere_gcc_struct __anon1;
8884 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
8888 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
8890 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
8892 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
8893 struct __ecereNameSpace__ecere__com__Class * sClass;
8895 for(sClass = _class; sClass; sClass = sClass->base)
8898 if(sClass->templateClass)
8899 sClass = sClass->templateClass;
8900 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
8902 if(curParam->type == 0 && !strcmp(param->identifier->string, curParam->name))
8904 for(sClass = sClass->base; sClass; sClass = sClass->base)
8906 if(sClass->templateClass)
8907 sClass = sClass->templateClass;
8908 id += sClass->templateParams.count;
8919 arg = &_class->templateArgs[id];
8920 if(arg && param->type == 0)
8921 (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
8926 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class)
8928 struct Context * context = PushContext();
8930 context->templateTypesOnly = 1;
8931 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
8933 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
8935 for(; param; param = param->next)
8937 if(param->type == 0 && param->identifier)
8939 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
8941 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8947 struct __ecereNameSpace__ecere__com__Class * sClass;
8949 for(sClass = _class; sClass; sClass = sClass->base)
8951 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * p;
8953 for(p = sClass->templateParams.first; p; p = p->next)
8957 struct TemplateParameter * param = p->param;
8958 struct TemplatedType * type;
8962 p->param = param = __extension__ ({
8963 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
8965 __ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
8968 type = __extension__ ({
8969 struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType);
8971 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
8973 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8981 char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
8983 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
8985 unsigned int first = 1;
8987 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
8989 char className[1024];
8991 strcpy(className, _class->fullName);
8992 for(param = _class->templateParams.first; param; param = param->next)
8996 strcat(className, "<");
8998 strcat(className, ", ");
8999 if(lastParam + 1 != p)
9001 strcat(className, param->name);
9002 strcat(className, " = ");
9004 strcat(className, param->name);
9012 int len = strlen(className);
9014 if(className[len - 1] == '>')
9015 className[len++] = ' ';
9016 className[len++] = '>';
9017 className[len++] = '\0';
9019 return __ecereNameSpace__ecere__sys__CopyString(className);
9022 return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
9025 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
9029 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9031 unsigned int first = 1;
9033 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9035 char className[1024];
9037 strcpy(className, _class->fullName);
9038 for(param = _class->templateParams.first; param; param = param->next)
9042 strcat(className, "<");
9044 strcat(className, ", ");
9045 if(lastParam + 1 != p)
9047 strcat(className, param->name);
9048 strcat(className, " = ");
9050 strcat(className, param->name);
9058 int len = strlen(className);
9060 if(className[len - 1] == '>')
9061 className[len++] = ' ';
9062 className[len++] = '>';
9063 className[len++] = '\0';
9065 type = MkClassType(className);
9069 type = MkClassType(_class->fullName);
9074 static int DeclareMembers(struct External * neededBy, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
9076 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
9077 struct __ecereNameSpace__ecere__com__DataMember * member;
9078 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
9080 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
9081 DeclareMembers(neededBy, _class->base, 0);
9082 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
9084 if(!member->isProperty)
9086 switch(member->type)
9090 if(!member->dataType && member->dataTypeString)
9091 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9092 if(member->dataType)
9093 DeclareType(neededBy, member->dataType, 1, 0);
9099 DeclareMembers(neededBy, (struct __ecereNameSpace__ecere__com__Class *)member, 1);
9106 FinishTemplatesContext(context);
9107 return topMember ? topMember->memberID : _class->memberID;
9110 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
9112 if(!method->dataType)
9114 struct Context * context = SetupTemplatesContext(method->_class);
9116 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9117 FinishTemplatesContext(context);
9118 if(method->type != 1 && method->dataType)
9120 if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
9122 if(!method->_class->symbol)
9123 method->_class->symbol = FindClass(method->_class->fullName);
9124 method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
9130 void ProcessPropertyType(struct __ecereNameSpace__ecere__com__Property * prop)
9134 struct Context * context = SetupTemplatesContext(prop->_class);
9136 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
9137 FinishTemplatesContext(context);
9141 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
9143 if(specs != (((void *)0)) && _class)
9145 struct Specifier * spec;
9147 for(spec = specs->first; spec; spec = spec->next)
9149 if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
9152 spec->__anon1.__anon1.name = ReplaceThisClass(_class);
9153 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
9159 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
9161 struct Identifier * id = exp->__anon1.__anon1.identifier;
9162 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9163 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
9164 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9165 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9167 if(_class && _class->type == 4)
9169 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
9170 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9174 struct __ecereNameSpace__ecere__com__Class * baseClass;
9176 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
9178 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
9180 for(value = e->values.first; value; value = value->next)
9182 if(!strcmp(value->name, id->string))
9187 exp->isConstant = 1;
9188 if(inCompiler || inPreCompiler || inDebugger)
9192 FreeExpContents(exp);
9194 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
9195 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
9197 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
9198 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9200 exp->expType = MkClassType(baseClass->fullName);
9208 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
9210 ProcessMethodType(method);
9211 exp->expType = __extension__ ({
9212 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
9214 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
9218 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
9221 ProcessPropertyType(prop);
9222 exp->expType = prop->dataType;
9224 prop->dataType->refCount++;
9227 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
9229 if(!member->dataType)
9230 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9231 exp->expType = member->dataType;
9232 if(member->dataType)
9233 member->dataType->refCount++;
9236 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
9238 if(!classProp->dataType)
9239 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
9240 if(classProp->constant)
9242 FreeExpContents(exp);
9243 exp->isConstant = 1;
9244 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
9247 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
9254 sprintf(constant, "%d", (int)classProp->Get(_class));
9255 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9261 exp->expType = classProp->dataType;
9262 if(classProp->dataType)
9263 classProp->dataType->refCount++;
9269 void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
9271 struct Symbol * symbol = prop->symbol;
9272 unsigned int imported = 0;
9273 unsigned int dllImport = 0;
9274 struct External * structExternal = (((void *)0));
9275 struct External * instExternal = (((void *)0));
9277 strcpy(setName, "__ecereProp_");
9278 FullClassNameCat(setName, prop->_class->fullName, 0);
9279 strcat(setName, "_Set_");
9280 FullClassNameCat(setName, prop->name, 1);
9281 strcpy(getName, "__ecereProp_");
9282 FullClassNameCat(getName, prop->_class->fullName, 0);
9283 strcat(getName, "_Get_");
9284 FullClassNameCat(getName, prop->name, 1);
9285 if(!symbol || symbol->_import)
9289 struct Symbol * classSym;
9291 if(!prop->_class->symbol)
9292 prop->_class->symbol = FindClass(prop->_class->fullName);
9293 classSym = prop->_class->symbol;
9294 if(classSym && !classSym->_import)
9296 struct ModuleImport * module;
9298 if(prop->_class->module)
9299 module = FindModule(prop->_class->module);
9301 module = mainModule;
9302 classSym->_import = __extension__ ({
9303 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9305 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->_class->fullName), __ecereInstance1->isRemote = prop->_class->isRemote, __ecereInstance1;
9307 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9309 symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9310 symbol->_import = (struct ClassImport *)__extension__ ({
9311 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
9313 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
9316 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
9319 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)
9324 struct Context * context = SetupTemplatesContext(prop->_class);
9326 symbol->type = ProcessTypeString(prop->dataTypeString, 0);
9327 FinishTemplatesContext(context);
9329 if((prop->Get && !symbol->__anon2.__anon2.externalGet) || (prop->Set && !symbol->__anon2.__anon2.externalSet))
9331 if(prop->_class->type == 0 && prop->_class->structSize)
9332 instExternal = DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
9333 structExternal = DeclareStruct((((void *)0)), prop->_class->fullName, prop->_class->type != 1, 0);
9335 if(prop->Get && !symbol->__anon2.__anon2.externalGet)
9337 struct Declaration * decl;
9338 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9339 struct Declarator * d;
9340 struct __ecereNameSpace__ecere__sys__OldList * params;
9341 struct Specifier * spec = (((void *)0));
9342 struct External * external;
9343 struct Declarator * typeDecl;
9344 unsigned int simple = 0;
9345 unsigned int needReference;
9347 specifiers = MkList();
9348 declarators = MkList();
9350 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9351 d = MkDeclaratorIdentifier(MkIdentifier(getName));
9353 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9355 struct Context * context = SetupTemplatesContext(prop->_class);
9357 typeDecl = SpecDeclFromString(prop->dataTypeString, specifiers, (((void *)0)));
9358 FinishTemplatesContext(context);
9360 needReference = !typeDecl || typeDecl->type == 1;
9361 for(spec = (*specifiers).first; spec; spec = spec->next)
9365 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9369 symbol->_class = classSym->__anon1.registered;
9370 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
9377 d = PlugDeclarator(typeDecl, d);
9380 ListAdd(params, MkTypeName(specifiers, PlugDeclarator(typeDecl, MkDeclaratorIdentifier(MkIdentifier("value")))));
9381 specifiers = MkList();
9383 d = MkDeclaratorFunction(d, params);
9385 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9386 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9387 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9389 ListAdd(specifiers, MkSpecifier(VOID));
9390 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9391 decl = MkDeclaration(specifiers, declarators);
9392 external = MkExternalDeclaration(decl);
9394 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9396 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9398 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9399 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9400 external->symbol = symbol;
9401 symbol->__anon2.__anon2.externalGet = external;
9402 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9404 FreeDeclarator(typeDecl);
9406 if(prop->Set && !symbol->__anon2.__anon2.externalSet)
9408 struct Declaration * decl;
9409 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9410 struct Declarator * d;
9411 struct __ecereNameSpace__ecere__sys__OldList * params;
9412 struct Specifier * spec = (((void *)0));
9413 struct External * external;
9414 struct Declarator * typeDecl;
9415 unsigned int needReference;
9417 declarators = MkList();
9419 if(!prop->conversion || prop->_class->type == 1)
9421 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9423 specifiers = MkList();
9425 struct Context * context = SetupTemplatesContext(prop->_class);
9427 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
9428 FinishTemplatesContext(context);
9430 if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
9431 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
9432 ListAdd(params, MkTypeName(specifiers, d));
9433 d = MkDeclaratorIdentifier(MkIdentifier(setName));
9435 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9436 d = MkDeclaratorFunction(d, params);
9437 needReference = !typeDecl || typeDecl->type == 1;
9438 for(spec = (*specifiers).first; spec; spec = spec->next)
9442 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9445 symbol->_class = classSym->__anon1.registered;
9449 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9450 specifiers = MkList();
9452 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9453 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9454 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9455 if(!prop->conversion || prop->_class->type == 1)
9456 ListAdd(specifiers, MkSpecifier(VOID));
9458 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
9459 decl = MkDeclaration(specifiers, declarators);
9460 external = MkExternalDeclaration(decl);
9462 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9464 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9466 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9467 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9468 external->symbol = symbol;
9469 symbol->__anon2.__anon2.externalSet = external;
9470 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9472 if(!symbol->__anon2.__anon2.externalPtr)
9474 struct Declaration * decl;
9475 struct External * external;
9476 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
9477 char propName[1024];
9480 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9483 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9484 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*specifiers), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
9486 ListAdd(specifiers, MkSpecifierName("Property"));
9487 strcpy(propName, "__ecereProp_");
9488 FullClassNameCat(propName, prop->_class->fullName, 0);
9489 strcat(propName, "_");
9490 FullClassNameCat(propName, prop->name, 1);
9492 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
9494 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9497 strcpy(propName, "__ecerePropM_");
9498 FullClassNameCat(propName, prop->_class->fullName, 0);
9499 strcat(propName, "_");
9500 FullClassNameCat(propName, prop->name, 1);
9501 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9503 decl = MkDeclaration(specifiers, list);
9505 external = MkExternalDeclaration(decl);
9506 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
9507 external->symbol = symbol;
9508 symbol->__anon2.__anon2.externalPtr = external;
9510 if(inCompiler && neededBy)
9512 if(symbol->__anon2.__anon2.externalPtr)
9513 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalPtr, 0);
9514 if(symbol->__anon2.__anon2.externalGet)
9515 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalGet, symbol->__anon2.__anon2.externalGet->type == 0);
9516 if(symbol->__anon2.__anon2.externalSet)
9517 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalSet, symbol->__anon2.__anon2.externalSet->type == 0);
9521 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction);
9523 void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char * name)
9525 struct Symbol * symbol = method->symbol;
9527 if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && (!symbol->__anon2.__anon3.methodCodeExternal || method->type == 1)))
9529 unsigned int dllImport = 0;
9531 if(!method->dataType)
9532 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9534 if(!symbol || method->type == 1)
9536 struct Symbol * classSym;
9538 if(!method->_class->symbol)
9539 method->_class->symbol = FindClass(method->_class->fullName);
9540 classSym = method->_class->symbol;
9541 if(!classSym->_import)
9543 struct ModuleImport * module;
9545 if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->name)
9546 module = FindModule(method->_class->module);
9548 module = mainModule;
9549 classSym->_import = __extension__ ({
9550 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9552 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->_class->fullName), __ecereInstance1->isRemote = method->_class->isRemote, __ecereInstance1;
9554 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9558 symbol = method->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9560 if(!symbol->_import)
9562 symbol->_import = (struct ClassImport *)__extension__ ({
9563 struct MethodImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodImport);
9565 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
9567 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->methods, symbol->_import);
9571 symbol->type = method->dataType;
9573 symbol->type->refCount++;
9576 if(!method->dataType->dllExport)
9578 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)
9584 struct Declaration * decl;
9585 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9586 struct Declarator * d;
9587 struct Declarator * funcDecl;
9588 struct External * external;
9590 specifiers = MkList();
9591 declarators = MkList();
9593 ListAdd(specifiers, MkSpecifier(EXTERN));
9594 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
9595 ListAdd(specifiers, MkSpecifier(STATIC));
9596 if(method->type == 1)
9598 ListAdd(specifiers, MkSpecifier(INT));
9599 d = MkDeclaratorIdentifier(MkIdentifier(name));
9603 d = MkDeclaratorIdentifier(MkIdentifier(name));
9605 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9607 struct Context * context = SetupTemplatesContext(method->_class);
9609 d = SpecDeclFromString(method->dataTypeString, specifiers, d);
9610 FinishTemplatesContext(context);
9612 funcDecl = GetFuncDecl(d);
9615 struct Specifier * spec, * next;
9617 for(spec = (*specifiers).first; spec; spec = next)
9622 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9623 FreeSpecifier(spec);
9627 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
9629 if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
9631 struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
9632 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")));
9633 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
9634 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
9636 if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
9638 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
9640 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
9641 FreeTypeName(param);
9643 if(!funcDecl->__anon1.function.parameters)
9644 funcDecl->__anon1.function.parameters = MkList();
9645 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
9649 ProcessDeclarator(d, 1);
9650 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9651 decl = MkDeclaration(specifiers, declarators);
9652 ReplaceThisClassSpecifiers(specifiers, method->_class);
9653 external = MkExternalDeclaration(decl);
9654 external->symbol = symbol;
9655 symbol->__anon2.__anon1.pointerExternal = external;
9656 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9657 DeclareStruct(external, method->_class->fullName, 1, 1);
9658 if(method->dataType)
9659 DeclareType(external, method->dataType, 1, 1);
9662 if(inCompiler && neededFor)
9664 struct External * external = symbol->__anon2.__anon1.pointerExternal ? symbol->__anon2.__anon1.pointerExternal : symbol->__anon2.__anon3.methodCodeExternal;
9666 __ecereMethod_External_CreateUniqueEdge(neededFor, external, external->type == 0);
9670 struct __ecereNameSpace__ecere__com__GlobalFunction;
9672 struct __ecereNameSpace__ecere__com__GlobalFunction
9674 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
9675 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
9678 struct __ecereNameSpace__ecere__com__Instance * module;
9679 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
9680 const char * dataTypeString;
9681 struct Type * dataType;
9685 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
9687 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);
9689 unsigned int DeclareFunction(struct External * neededFor, struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
9691 struct Symbol * symbol = function->symbol;
9693 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
9695 unsigned int imported = 0;
9696 unsigned int dllImport = 0;
9698 if(!function->dataType)
9700 function->dataType = ProcessTypeString(function->dataTypeString, 0);
9701 if(!function->dataType->__anon1.__anon2.thisClass)
9702 function->dataType->__anon1.__anon2.staticMethod = 1;
9708 struct ModuleImport * module = FindModule(function->module);
9710 symbol = function->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9713 if(!function->dataType->dllExport)
9715 symbol->_import = (struct ClassImport *)__extension__ ({
9716 struct FunctionImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionImport);
9718 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->name), __ecereInstance1;
9720 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symbol->_import);
9724 symbol->type = ProcessTypeString(function->dataTypeString, 0);
9725 if(!symbol->type->__anon1.__anon2.thisClass)
9726 symbol->type->__anon1.__anon2.staticMethod = 1;
9729 imported = symbol->_import ? 1 : 0;
9730 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9736 struct Declaration * decl;
9737 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9738 struct Declarator * d;
9739 struct Declarator * funcDecl;
9740 struct External * external;
9742 specifiers = MkList();
9743 declarators = MkList();
9744 ListAdd(specifiers, MkSpecifier(EXTERN));
9745 d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
9747 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9748 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
9749 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType == 1)
9751 struct Specifier * spec;
9753 for(spec = (*specifiers).first; spec; spec = spec->next)
9754 if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
9756 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9757 FreeSpecifier(spec);
9761 funcDecl = GetFuncDecl(d);
9762 if(funcDecl && !funcDecl->__anon1.function.parameters)
9764 funcDecl->__anon1.function.parameters = MkList();
9765 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
9767 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9769 struct Context * oldCtx = curContext;
9771 curContext = globalContext;
9772 decl = MkDeclaration(specifiers, declarators);
9773 curContext = oldCtx;
9775 external = MkExternalDeclaration(decl);
9776 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9777 external->symbol = symbol;
9778 symbol->__anon2.__anon1.pointerExternal = external;
9779 DeclareType(external, function->dataType, 1, 1);
9783 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
9784 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
9785 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;
9788 void DeclareFunctionUtil(struct External * neededBy, const char * s)
9790 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
9797 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
9798 strcpy(name, "__ecereFunction_");
9799 FullClassNameCat(name, s, 0);
9800 DeclareFunction(neededBy, function, name);
9803 FindSymbol(s, globalContext, globalContext, 0, 0);
9806 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
9808 char propName[1024], propNameM[1024];
9809 char getName[1024], setName[1024];
9810 struct __ecereNameSpace__ecere__sys__OldList * args;
9812 DeclareProperty(curExternal, prop, setName, getName);
9813 strcpy(propName, "__ecereProp_");
9814 FullClassNameCat(propName, prop->_class->fullName, 0);
9815 strcat(propName, "_");
9816 FullClassNameCat(propName, prop->name, 1);
9817 strcpy(propNameM, "__ecerePropM_");
9818 FullClassNameCat(propNameM, prop->_class->fullName, 0);
9819 strcat(propNameM, "_");
9820 FullClassNameCat(propNameM, prop->name, 1);
9821 if(prop->isWatchable)
9824 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9825 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9826 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9828 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9829 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9830 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9831 DeclareFunctionUtil(curExternal, "eInstance_FireWatchers");
9835 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9836 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9837 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9839 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9840 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9841 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9842 DeclareFunctionUtil(curExternal, "eInstance_FireSelfWatchers");
9844 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
9845 curFunction->propSet->fireWatchersDone = 1;
9848 struct __ecereNameSpace__ecere__com__SubModule;
9850 struct __ecereNameSpace__ecere__com__SubModule
9852 struct __ecereNameSpace__ecere__com__SubModule * prev;
9853 struct __ecereNameSpace__ecere__com__SubModule * next;
9854 struct __ecereNameSpace__ecere__com__Instance * module;
9858 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
9860 struct __ecereNameSpace__ecere__com__SubModule * subModule;
9862 if(searchFor == searchIn)
9864 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
9866 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
9868 if(ModuleVisibility(subModule->module, searchFor))
9875 void ProcessExpressionType(struct Expression * exp);
9877 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
9879 if(exp->type == 0 && exp->__anon1.__anon1.identifier)
9881 struct Identifier * id = exp->__anon1.__anon1.identifier;
9882 struct Context * ctx;
9883 struct Symbol * symbol = (((void *)0));
9885 if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
9887 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
9891 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, id->string);
9896 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))))
9898 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
9899 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9900 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9901 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9905 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
9907 if(!prop && !method)
9908 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
9909 if(!prop && !method && !member)
9911 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string);
9913 if(prop || method || member || classProp)
9916 exp->__anon1.member.member = id;
9917 exp->__anon1.member.memberType = 0;
9918 exp->__anon1.member.exp = QMkExpId("this");
9921 else if(_class && _class->templateParams.first)
9923 struct __ecereNameSpace__ecere__com__Class * sClass;
9925 for(sClass = _class; sClass; sClass = sClass->base)
9927 if(sClass->templateParams.first)
9929 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9931 for(param = sClass->templateParams.first; param; param = param->next)
9933 if(param->type == 2 && !strcmp(param->name, id->string))
9935 struct Expression * argExp = GetTemplateArgExpByName(param->name, _class, 2);
9939 struct Declarator * decl;
9940 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
9942 FreeIdentifier(exp->__anon1.member.member);
9943 ProcessExpressionType(argExp);
9944 decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
9945 exp->expType = ProcessType(specs, decl);
9947 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
9958 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
9960 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
9962 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
9964 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
9965 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
9968 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
9969 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
9971 void * ptr = inst->data + dataMember->offset + offset;
9972 char * result = (((void *)0));
9974 exp->loc = member->loc = inst->loc;
9975 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
9976 if(!dataMember->dataType)
9977 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
9978 type = dataMember->dataType;
9981 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
9983 if(_class->type == 4)
9985 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9989 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
9990 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
9992 for(item = e->values.first; item; item = item->next)
9994 if(item->data == GetEnumValue(_class, ptr))
9996 result = item->name;
10002 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10004 exp->destType = MkClassType(_class->fullName);
10005 ProcessExpressionType(exp);
10009 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10011 if(!_class->dataType)
10012 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10013 type = _class->dataType;
10022 FreeExpContents(exp);
10023 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10029 FreeExpContents(exp);
10030 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10036 FreeExpContents(exp);
10037 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10043 FreeExpContents(exp);
10044 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10050 FreeExpContents(exp);
10051 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10057 FreeExpContents(exp);
10058 exp->__anon1.__anon1.constant = PrintInt64((long long)*(ssize_t *)ptr);
10063 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10066 ListAdd(memberList, member);
10068 if(parentDataMember->type == 1)
10073 void CheckTemplateTypes(struct Expression * exp)
10075 struct Expression * nbExp = GetNonBracketsExp(exp);
10077 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
10079 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10080 struct Context * context;
10081 int kind = exp->expType->kind;
10085 exp->destType->refCount++;
10087 exp->expType->refCount++;
10088 newExp->prev = (((void *)0));
10089 newExp->next = (((void *)0));
10090 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10092 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10094 if(c->type == 2 || c->type == 4 || c->type == 3)
10097 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10098 kind = c->dataType->kind;
10104 if(exp->destType->classObjectType)
10107 exp->destType->refCount--;
10109 exp->expType->refCount--;
10110 ((newExp ? __extension__ ({
10111 void * __ecerePtrToDelete = (newExp);
10113 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10114 }) : 0), newExp = 0);
10118 struct __ecereNameSpace__ecere__sys__OldList * specs;
10119 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10120 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10122 context = PushContext();
10123 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10124 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10125 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10127 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10128 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
10129 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
10130 exp->__anon1.compound->__anon1.compound.context = context;
10131 PopContext(context);
10136 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
10137 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))
10138 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
10140 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10145 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
10147 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10148 struct Context * context;
10149 int kind = exp->expType->kind;
10153 exp->destType->refCount++;
10155 exp->expType->refCount++;
10156 newExp->prev = (((void *)0));
10157 newExp->next = (((void *)0));
10158 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10160 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10162 if(c->type == 2 || c->type == 4 || c->type == 3)
10165 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10166 kind = c->dataType->kind;
10172 if(exp->destType->classObjectType)
10175 exp->destType->refCount--;
10177 exp->expType->refCount--;
10178 ((newExp ? __extension__ ({
10179 void * __ecerePtrToDelete = (newExp);
10181 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10182 }) : 0), newExp = 0);
10186 struct __ecereNameSpace__ecere__sys__OldList * specs;
10187 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10188 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10190 context = PushContext();
10191 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10192 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10193 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10195 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10196 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
10197 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
10198 exp->__anon1.compound->__anon1.compound.context = context;
10199 PopContext(context);
10204 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
10207 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10208 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)));
10209 ProcessExpressionType((*exp->__anon1.list).first);
10215 if(__ecereProp_Type_Get_isPointerType(exp->expType))
10217 exp->needTemplateCast = 2;
10218 newExp->needCast = 1;
10219 newExp->needTemplateCast = 2;
10220 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10222 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
10223 exp->needTemplateCast = 2;
10224 newExp->needCast = 1;
10225 newExp->needTemplateCast = 2;
10226 ProcessExpressionType((*exp->__anon1.list).first);
10232 if(exp->expType->kind == 20)
10234 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
10238 FreeType(exp->destType);
10239 FreeType(exp->expType);
10240 ((newExp ? __extension__ ({
10241 void * __ecerePtrToDelete = (newExp);
10243 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10244 }) : 0), newExp = 0);
10249 char typeString[1024];
10250 struct Declarator * decl;
10251 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
10253 typeString[0] = '\0';
10254 PrintType(exp->expType, typeString, 0, 0);
10255 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
10257 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
10258 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10259 exp->__anon1.cast.exp->needCast = 1;
10260 exp->needTemplateCast = 2;
10261 newExp->needTemplateCast = 2;
10269 static void ProcessInitializer(struct Initializer * init, struct Type * type)
10274 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
10276 if(init->__anon1.exp && !init->__anon1.exp->destType)
10278 FreeType(init->__anon1.exp->destType);
10279 init->__anon1.exp->destType = type;
10283 if(init->__anon1.exp)
10285 ProcessExpressionType(init->__anon1.exp);
10286 init->isConstant = init->__anon1.exp->isConstant;
10292 struct Expression * exp = init->__anon1.exp;
10293 struct Instantiation * inst = exp->__anon1.instance;
10294 struct MembersInit * members;
10297 init->__anon1.list = MkList();
10300 for(members = (*inst->members).first; members; members = members->next)
10302 if(members->type == 0)
10304 struct MemberInit * member;
10306 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
10308 ListAdd(init->__anon1.list, member->initializer);
10309 member->initializer = (((void *)0));
10314 FreeExpression(exp);
10318 struct Initializer * i;
10319 struct Type * initializerType = (((void *)0));
10320 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
10321 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
10322 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
10323 int subMemberStackPos = 0;
10325 if(type && type->kind == 12)
10326 initializerType = Dereference(type);
10327 else if(type && (type->kind == 9 || type->kind == 10))
10328 initializerType = type->__anon1.__anon1.members.first;
10329 for(i = (*init->__anon1.list).first; i; i = i->next)
10331 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
10333 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
10336 if(!curMember->dataType)
10337 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
10338 initializerType = curMember->dataType;
10341 ProcessInitializer(i, initializerType);
10342 if(initializerType && type && (type->kind == 9 || type->kind == 10))
10343 initializerType = initializerType->next;
10345 init->isConstant = 0;
10347 if(type && type->kind == 12)
10348 FreeType(initializerType);
10349 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))
10351 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
10358 void PopulateInstance(struct Instantiation * inst)
10360 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
10361 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
10362 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10363 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
10366 inst->members = MkListOne(MkMembersInitList(memberList));
10368 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
10369 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10371 if(!dataMember->isProperty)
10373 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10374 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
10377 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10378 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10379 struct Type * type;
10380 void * ptr = inst->data + dataMember->offset;
10381 char * result = (((void *)0));
10383 exp->loc = member->loc = inst->loc;
10384 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10385 if(!dataMember->dataType)
10386 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10387 type = dataMember->dataType;
10388 if(type->kind == 8)
10390 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10392 if(_class->type == 4)
10394 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10398 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10399 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10401 for(item = e->values.first; item; item = item->next)
10403 if(item->data == GetEnumValue(_class, ptr))
10405 result = item->name;
10412 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10414 exp->destType = MkClassType(_class->fullName);
10415 ProcessExpressionType(exp);
10418 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10420 if(!_class->dataType)
10421 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10422 type = _class->dataType;
10431 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10437 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10443 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10449 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10455 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10460 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10463 ListAdd(memberList, member);
10469 int ComputeTypeSize(struct Type * type);
10471 void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
10473 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10474 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10476 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))
10478 int unionMemberOffset = 0;
10483 member->memberOffset = 0;
10484 if(targetBits < sizeof(void *) * 8)
10485 member->structAlignment = 0;
10487 else if(targetBits < sizeof(void *) * 8)
10488 _class->structAlignment = 0;
10489 if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
10490 _class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
10491 if(!member && _class->destructionWatchOffset)
10492 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10494 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10496 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10498 if(!dataMember->isProperty)
10500 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
10502 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10508 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10510 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10512 if(!dataMember->isProperty && (dataMember->type != 0 || dataMember->dataTypeString))
10514 if(!isMember && _class->type == 2 && dataMember->dataType)
10516 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
10520 ComputeTypeSize(dataMember->dataType);
10521 if(bitMember->pos == -1)
10522 bitMember->pos = _class->memberOffset;
10523 if(!bitMember->size)
10524 bitMember->size = dataMember->dataType->size * 8;
10525 _class->memberOffset = bitMember->pos + bitMember->size;
10526 for(d = 0; d < bitMember->size; d++)
10532 bitMember->mask = mask << bitMember->pos;
10534 else if(dataMember->type == 0 && dataMember->dataType)
10539 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)))
10540 ComputeTypeSize(dataMember->dataType);
10541 if(dataMember->dataType->bitFieldCount)
10543 bitFields += dataMember->dataType->bitFieldCount;
10550 int size = (bitFields + 7) / 8;
10554 int __simpleStruct0;
10558 short __simpleStruct0;
10560 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10561 if(member->memberOffset % alignment)
10562 member->memberOffset += alignment - (member->memberOffset % alignment);
10564 dataMember->offset = member->memberOffset;
10565 if(member->type == 1)
10566 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10569 member->memberOffset += size;
10576 short __simpleStruct0;
10578 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10579 if(_class->memberOffset % alignment)
10580 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10582 dataMember->offset = _class->memberOffset;
10583 _class->memberOffset += size;
10587 size = dataMember->dataType->size;
10588 alignment = dataMember->dataType->alignment;
10592 int __simpleStruct0;
10596 short __simpleStruct0;
10598 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10599 if(member->memberOffset % alignment)
10600 member->memberOffset += alignment - (member->memberOffset % alignment);
10602 dataMember->offset = member->memberOffset;
10603 if(member->type == 1)
10604 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10607 member->memberOffset += size;
10614 short __simpleStruct0;
10616 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10617 if(_class->memberOffset % alignment)
10618 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10620 dataMember->offset = _class->memberOffset;
10621 _class->memberOffset += size;
10628 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
10629 alignment = dataMember->structAlignment;
10632 int __simpleStruct0;
10636 short __simpleStruct0;
10638 if(member->memberOffset % alignment)
10639 member->memberOffset += alignment - (member->memberOffset % alignment);
10640 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10642 dataMember->offset = member->memberOffset;
10643 if(member->type == 1)
10644 unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10646 member->memberOffset += dataMember->memberOffset;
10652 short __simpleStruct0;
10654 if(_class->memberOffset % alignment)
10655 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10656 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10658 dataMember->offset = _class->memberOffset;
10659 _class->memberOffset += dataMember->memberOffset;
10667 int size = (bitFields + 7) / 8;
10671 int __simpleStruct0;
10675 short __simpleStruct0;
10677 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10678 if(member->memberOffset % alignment)
10679 member->memberOffset += alignment - (member->memberOffset % alignment);
10681 if(member->type == 1)
10682 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10685 member->memberOffset += size;
10692 short __simpleStruct0;
10694 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10695 if(_class->memberOffset % alignment)
10696 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10698 _class->memberOffset += size;
10703 if(member && member->type == 1)
10705 member->memberOffset = unionMemberOffset;
10709 if(_class->type != 2)
10713 if(_class->structAlignment)
10715 if(_class->memberOffset % _class->structAlignment)
10716 extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
10718 _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;
10721 struct __ecereNameSpace__ecere__com__Property * prop;
10723 for(prop = _class->membersAndProperties.first; prop; prop = prop->next)
10725 if(prop->isProperty && prop->isWatchable)
10727 prop->watcherOffset = _class->structSize;
10728 _class->structSize += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10733 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
10735 for(derivative = _class->derivatives.first; derivative; derivative = derivative->next)
10737 struct __ecereNameSpace__ecere__com__Class * deriv = derivative->data;
10739 if(deriv->computeSize)
10741 deriv->offset = (_class->type == 5 ? _class->memberOffset : _class->structSize);
10742 deriv->memberOffset = 0;
10743 deriv->structSize = deriv->offset;
10744 ComputeClassMembers(deriv, 0);
10752 FinishTemplatesContext(context);
10755 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)
10757 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10758 unsigned int totalSize = 0;
10759 unsigned int maxSize = 0;
10762 struct __ecereNameSpace__ecere__com__DataMember * member;
10764 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10768 if(!isMember && _class->base)
10770 maxSize = _class->structSize;
10772 if(_class->type == 1 || _class->type == 5)
10773 AddMembers(neededBy, declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
10776 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
10778 if(maxSize > baseSize)
10779 maxSize -= baseSize;
10785 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
10787 if(!member->isProperty)
10789 switch(member->type)
10793 if(member->dataTypeString)
10795 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
10796 struct Declarator * decl;
10798 decl = SpecDeclFromString(member->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(member->name)));
10799 ListAdd(decls, MkStructDeclarator(decl, (((void *)0))));
10800 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, decls, (((void *)0)))));
10801 if(!member->dataType)
10802 member->dataType = ProcessType(specs, decl);
10803 ReplaceThisClassSpecifiers(specs, topClass);
10805 struct Type * type = ProcessType(specs, decl);
10807 DeclareType(neededBy, member->dataType, 1, 0);
10810 ComputeTypeSize(member->dataType);
10811 size = member->dataType->size;
10812 alignment = member->dataType->alignment;
10815 if(totalSize % alignment)
10816 totalSize += alignment - (totalSize % alignment);
10825 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
10828 sprintf(id, "__anon%d", anonID++);
10830 AddMembers(neededBy, list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
10831 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
10832 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
10833 alignment = member->structAlignment;
10836 if(totalSize % alignment)
10837 totalSize += alignment - (totalSize % alignment);
10847 unsigned int __simpleStruct0;
10849 if(topMember && topMember->type == 1)
10850 *retSize = (__simpleStruct0 = *retSize, (__simpleStruct0 > totalSize) ? __simpleStruct0 : totalSize);
10852 *retSize += totalSize;
10854 else if(totalSize < maxSize && _class->type != 1000)
10856 int autoPadding = 0;
10858 if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
10859 autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
10860 if(totalSize + autoPadding < maxSize)
10862 char sizeString[50];
10864 sprintf(sizeString, "%d", maxSize - totalSize);
10865 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
10871 FinishTemplatesContext(context);
10872 return topMember ? topMember->memberID : _class->memberID;
10875 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)
10880 CheckConstCompatibility(source, dest, 1);
10881 if(source->kind == 20 && dest->kind != 20)
10883 struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
10888 if(dest->kind == 20 && source->kind != 20)
10890 struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
10895 if(dest->classObjectType == 2 && dest->kind != 11)
10897 if(source->classObjectType != 3)
10901 if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
10909 if(source->kind != 11 && source->classObjectType == 3)
10911 if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
10914 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
10916 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))
10919 if(dest->kind == 14 && source->kind != 0)
10921 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))
10923 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))
10925 if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
10927 if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
10929 if(conversions != (((void *)0)))
10931 if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
10936 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
10938 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
10940 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
10942 if(sourceBase == destBase)
10946 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))
10950 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))))
10952 if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
10959 if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
10963 if(source->kind == 8)
10965 struct __ecereNameSpace__ecere__com__Class * _class;
10967 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
10969 struct __ecereNameSpace__ecere__com__Property * convert;
10971 for(convert = _class->conversions.first; convert; convert = convert->next)
10973 if(convert->memberAccess == 1 || _class->module == privateModule)
10975 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
10977 if(!convert->dataType)
10978 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
10979 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))
10981 if(!conversions && !convert->Get)
10983 else if(conversions != (((void *)0)))
10985 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))
10989 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
10991 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11000 if(dest->kind == 8)
11002 struct __ecereNameSpace__ecere__com__Class * _class;
11004 for(_class = dest->__anon1._class ? dest->__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 Type * constType = (((void *)0));
11013 unsigned int success = 0;
11015 if(!convert->dataType)
11016 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11017 if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
11019 struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11021 constType = __extension__ ({
11022 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11024 __ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
11026 CopyTypeInto(ptrType, convert->dataType->__anon1.type);
11027 ptrType->constant = 1;
11029 if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
11031 if(!conversions && !convert->Set)
11033 else if(conversions != (((void *)0)))
11035 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))
11039 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
11041 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
11047 FreeType(constType);
11053 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
11055 if(!dest->__anon1._class->__anon1.registered->dataType)
11056 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
11057 if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
11059 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))
11066 if(source->kind == 8)
11068 struct __ecereNameSpace__ecere__com__Class * _class;
11070 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11072 struct __ecereNameSpace__ecere__com__Property * convert;
11074 for(convert = _class->conversions.first; convert; convert = convert->next)
11076 if(convert->memberAccess == 1 || _class->module == privateModule)
11078 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11080 if(!convert->dataType)
11081 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11082 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))
11084 if(!conversions && !convert->Get)
11086 else if(conversions != (((void *)0)))
11088 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))
11092 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11094 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11102 if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
11104 if(!source->__anon1._class->__anon1.registered->dataType)
11105 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
11106 if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
11108 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))
11110 else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
11116 if(source->kind == 8 || source->kind == 19)
11118 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
11120 else if(dest->kind == 7 && source->kind == 6)
11122 else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
11124 else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
11126 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
11128 else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
11130 else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
11132 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))
11134 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))
11136 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)))
11138 struct Type * paramSource, * paramDest;
11140 if(dest->kind == 16)
11141 owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
11142 if(source->kind == 16)
11143 owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
11144 if(dest->kind == 13 && dest->__anon1.type->kind == 11)
11145 dest = dest->__anon1.type;
11146 if(source->kind == 13 && source->__anon1.type->kind == 11)
11147 source = source->__anon1.type;
11148 if(dest->kind == 16)
11149 dest = dest->__anon1.__anon3.method->dataType;
11150 if(source->kind == 16)
11151 source = source->__anon1.__anon3.method->dataType;
11152 paramSource = source->__anon1.__anon2.params.first;
11153 if(paramSource && paramSource->kind == 0)
11154 paramSource = (((void *)0));
11155 paramDest = dest->__anon1.__anon2.params.first;
11156 if(paramDest && paramDest->kind == 0)
11157 paramDest = (((void *)0));
11158 if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11160 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))))
11162 if(paramDest && paramDest->kind == 8)
11163 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
11165 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
11168 paramDest = paramDest->next;
11170 else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
11172 if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11174 if(dest->__anon1.__anon2.thisClass)
11176 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
11178 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11184 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
11186 if(owningClassDest)
11187 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
11189 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
11193 paramSource = paramSource->next;
11197 if(dest->__anon1.__anon2.thisClass)
11199 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
11201 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11207 if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
11209 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
11215 if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11217 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
11221 CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
11222 for(; paramDest; paramDest = paramDest->next)
11226 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
11230 struct Type * paramDestType = paramDest;
11231 struct Type * paramSourceType = paramSource;
11232 struct Type * type = paramDestType;
11234 if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
11237 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
11238 struct __ecereNameSpace__ecere__com__Class * sClass;
11240 for(sClass = owningClassSource; sClass; sClass = sClass->base)
11243 if(sClass->templateClass)
11244 sClass = sClass->templateClass;
11245 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
11247 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
11249 for(sClass = sClass->base; sClass; sClass = sClass->base)
11251 if(sClass->templateClass)
11252 sClass = sClass->templateClass;
11253 id += sClass->templateParams.count;
11264 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
11266 paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
11269 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)))
11274 PrintType(paramDest, type, 0, 1);
11275 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
11276 if(paramDestType != paramDest)
11277 FreeType(paramDestType);
11280 if(paramDestType != paramDest)
11281 FreeType(paramDestType);
11283 paramSource = paramSource->next;
11287 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
11292 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
11296 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
11298 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))
11300 ComputeTypeSize(source->__anon1.type);
11301 ComputeTypeSize(dest->__anon1.type);
11302 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))
11310 void ComputeInstantiation(struct Expression * exp)
11312 struct Instantiation * inst = exp->__anon1.instance;
11313 struct MembersInit * members;
11314 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11315 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11316 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11317 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11318 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11319 int subMemberStackPos = 0;
11322 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11326 if(_class->type == 0 || _class->type == 5)
11328 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11329 if(_class->type == 0)
11330 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11333 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11337 for(members = (*inst->members).first; members; members = members->next)
11339 switch(members->type)
11343 if(members->__anon1.dataMembers)
11345 struct MemberInit * member;
11347 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11349 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11350 unsigned int found = 0;
11351 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11352 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11353 unsigned int dataMemberOffset;
11357 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11360 if(curMember->isProperty)
11361 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11364 dataMember = curMember;
11365 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11366 if(_class->type == 0)
11367 dataMemberOffset += _class->base->structSize;
11374 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11378 if(prop->memberAccess == 1)
11380 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11381 curClass = prop->_class;
11386 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11387 int _subMemberStackPos = 0;
11389 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11393 if(dataMember->memberAccess == 1)
11395 curMember = dataMember;
11396 curClass = dataMember->_class;
11397 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11398 subMemberStackPos = _subMemberStackPos;
11403 if(found && member->initializer && member->initializer->type == 0)
11405 struct Expression * value = member->initializer->__anon1.exp;
11406 struct Type * type = (((void *)0));
11407 unsigned int deepMember = 0;
11411 type = prop->dataType;
11413 else if(dataMember)
11415 if(!dataMember->dataType)
11416 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11417 type = dataMember->dataType;
11419 if(ident && ident->next)
11422 for(ident = ident->next; ident && type; ident = ident->next)
11424 if(type->kind == 8)
11426 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11428 type = prop->dataType;
11431 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11433 type = dataMember->dataType;
11436 else if(type->kind == 9 || type->kind == 10)
11438 struct Type * memberType;
11440 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11442 if(!strcmp(memberType->name, ident->string))
11453 FreeType(value->destType);
11454 value->destType = type;
11457 ComputeExpression(value);
11459 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11461 if(type->kind == 8)
11463 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11465 if(_class && (_class->type == 2 || _class->type == 3 || _class->type == 4))
11467 if(!_class->dataType)
11468 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11469 type = _class->dataType;
11474 void * ptr = inst->data + dataMemberOffset;
11476 if(value->type == 2)
11482 GetInt(value, (int *)ptr);
11487 GetInt64(value, (long long *)ptr);
11492 GetIntPtr(value, (intptr_t *)ptr);
11497 GetIntSize(value, (ssize_t *)ptr);
11502 GetFloat(value, (float *)ptr);
11507 GetDouble(value, (double *)ptr);
11512 else if(value->type == 1)
11514 if(type->kind == 8)
11516 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11518 if(_class->type == 1)
11520 ComputeTypeSize(type);
11521 if(value->__anon1.instance->data)
11522 memcpy(ptr, value->__anon1.instance->data, type->size);
11527 else if(prop && prop->Set != (void *)(intptr_t)1)
11529 if(value->type == 1 && value->__anon1.instance->data)
11531 if(type->kind == 8)
11533 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11535 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)))
11537 void (* Set)(void *, void *) = (void *)prop->Set;
11539 Set(inst->data, value->__anon1.instance->data);
11540 PopulateInstance(inst);
11544 else if(value->type == 2)
11550 void (* Set)(void *, double) = (void *)prop->Set;
11552 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11557 void (* Set)(void *, float) = (void *)prop->Set;
11559 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11564 void (* Set)(void *, int) = (void *)prop->Set;
11566 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11571 void (* Set)(void *, long long) = (void *)prop->Set;
11573 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11578 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11580 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11585 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11587 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11592 else if(value->type == 3)
11596 ReadString(temp, value->__anon1.__anon2.string);
11597 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11601 else if(!deepMember && type && _class->type == 3)
11605 if(value->type == 2)
11607 if(type->kind == 8)
11609 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11611 if(_class->type == 3)
11613 if(!_class->dataType)
11614 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11615 type = _class->dataType;
11623 float (* Set)(float) = (void *)prop->Set;
11625 GetFloat(member->initializer->__anon1.exp, &fValue);
11626 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11633 double (* Set)(double) = (void *)prop->Set;
11635 GetDouble(member->initializer->__anon1.exp, &dValue);
11636 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11644 else if(!deepMember && type && _class->type == 2)
11648 if(value->type == 1 && value->__anon1.instance->data)
11650 unsigned int (* Set)(void *) = (void *)prop->Set;
11652 bits = Set(value->__anon1.instance->data);
11654 else if(value->type == 2)
11658 else if(dataMember)
11660 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11661 struct Type * type;
11664 bits = (bits & ~bitMember->mask);
11665 if(!bitMember->dataType)
11666 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11667 type = bitMember->dataType;
11668 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11670 if(!type->__anon1._class->__anon1.registered->dataType)
11671 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11672 type = type->__anon1._class->__anon1.registered->dataType;
11681 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11689 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11698 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11706 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11714 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11722 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11727 bits |= part << bitMember->pos;
11733 if(_class && _class->type == 3)
11735 ComputeExpression(member->initializer->__anon1.exp);
11736 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11738 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11748 if(_class && _class->type == 2)
11750 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11755 FreeInstance(inst);
11759 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11761 if(exp->__anon1.op.op == SIZEOF)
11763 FreeExpContents(exp);
11765 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11769 if(!exp->__anon1.op.exp1)
11771 switch(exp->__anon1.op.op)
11775 struct Expression * exp2 = exp->__anon1.op.exp2;
11777 exp->__anon1.op.exp2 = (((void *)0));
11778 FreeExpContents(exp);
11779 FreeType(exp->expType);
11780 FreeType(exp->destType);
11782 ((exp2 ? __extension__ ({
11783 void * __ecerePtrToDelete = (exp2);
11785 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
11786 }) : 0), exp2 = 0);
11792 FreeExpContents(exp);
11793 op1->ops.Neg(exp, op1);
11797 if(op1->ops.BitNot)
11799 FreeExpContents(exp);
11800 op1->ops.BitNot(exp, op1);
11806 FreeExpContents(exp);
11807 op1->ops.Not(exp, op1);
11814 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11816 if(Promote(op2, op1->kind, op1->type->isSigned))
11817 op2->kind = op1->kind, op2->ops = op1->ops;
11818 else if(Promote(op1, op2->kind, op2->type->isSigned))
11819 op1->kind = op2->kind, op1->ops = op2->ops;
11821 switch(exp->__anon1.op.op)
11826 FreeExpContents(exp);
11827 op1->ops.Add(exp, op1, op2);
11833 FreeExpContents(exp);
11834 op1->ops.Sub(exp, op1, op2);
11840 FreeExpContents(exp);
11841 op1->ops.Mul(exp, op1, op2);
11847 FreeExpContents(exp);
11848 op1->ops.Div(exp, op1, op2);
11854 FreeExpContents(exp);
11855 op1->ops.Mod(exp, op1, op2);
11859 if(exp->__anon1.op.exp2)
11861 if(op1->ops.BitAnd)
11863 FreeExpContents(exp);
11864 op1->ops.BitAnd(exp, op1, op2);
11871 FreeExpContents(exp);
11872 op1->ops.BitOr(exp, op1, op2);
11876 if(op1->ops.BitXor)
11878 FreeExpContents(exp);
11879 op1->ops.BitXor(exp, op1, op2);
11883 if(op1->ops.LShift)
11885 FreeExpContents(exp);
11886 op1->ops.LShift(exp, op1, op2);
11890 if(op1->ops.RShift)
11892 FreeExpContents(exp);
11893 op1->ops.RShift(exp, op1, op2);
11899 FreeExpContents(exp);
11900 op1->ops.Equ(exp, op1, op2);
11906 FreeExpContents(exp);
11907 op1->ops.Nqu(exp, op1, op2);
11913 FreeExpContents(exp);
11914 op1->ops.And(exp, op1, op2);
11920 FreeExpContents(exp);
11921 op1->ops.Or(exp, op1, op2);
11927 FreeExpContents(exp);
11928 op1->ops.Grt(exp, op1, op2);
11934 FreeExpContents(exp);
11935 op1->ops.Sma(exp, op1, op2);
11939 if(op1->ops.GrtEqu)
11941 FreeExpContents(exp);
11942 op1->ops.GrtEqu(exp, op1, op2);
11946 if(op1->ops.SmaEqu)
11948 FreeExpContents(exp);
11949 op1->ops.SmaEqu(exp, op1, op2);
11957 void ApplyAnyObjectLogic(struct Expression * e)
11959 struct Type * destType = e->destType;
11961 if(destType && (destType->classObjectType == 3))
11963 if(e && e->expType)
11965 struct Type * type = e->expType;
11966 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
11968 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11970 _class = type->__anon1._class->__anon1.registered;
11972 else if(type->kind == 19)
11974 _class = FindClass("ecere::com::Class")->__anon1.registered;
11978 char string[1024] = "";
11979 struct Symbol * classSym;
11981 PrintTypeNoConst(type, string, 0, 1);
11982 classSym = FindClass(string);
11984 _class = classSym->__anon1.registered;
11986 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)))
11988 if(!_class || strcmp(_class->fullName, "char *"))
11990 struct Expression * checkedExp = e, * newExp;
11992 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
11994 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
11996 if(checkedExp->type == 23)
11998 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12001 checkedExp = (*checkedExp->__anon1.list).last;
12003 else if(checkedExp->type == 11)
12004 checkedExp = checkedExp->__anon1.cast.exp;
12006 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
12008 newExp = checkedExp->__anon1.op.exp2;
12009 checkedExp->__anon1.op.exp2 = (((void *)0));
12010 FreeExpContents(checkedExp);
12011 if(e->expType && e->expType->passAsTemplate)
12015 ComputeTypeSize(e->expType);
12016 sprintf(size, "%d", e->expType->size);
12017 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))))));
12019 ReplaceExpContents(checkedExp, newExp);
12020 e->byReference = 1;
12022 else if(!e->byReference || (_class && _class->type == 5))
12024 struct Expression * checkedExp;
12027 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;
12029 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
12031 struct Context * context = PushContext();
12032 struct Declarator * decl;
12033 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12034 char typeString[1024];
12035 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12037 typeString[0] = '\0';
12039 newExp->prev = (((void *)0));
12040 newExp->next = (((void *)0));
12041 newExp->expType = (((void *)0));
12042 PrintTypeNoConst(e->expType, typeString, 0, 1);
12043 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12044 newExp->destType = ProcessType(specs, decl);
12045 curContext = context;
12049 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
12052 sprintf(name, "__internalValue%03X", internalValueCounter++);
12053 if(!curCompound->__anon1.compound.declarations)
12054 curCompound->__anon1.compound.declarations = MkList();
12055 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
12056 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
12057 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
12058 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
12061 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
12063 struct Type * type = e->destType;
12065 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12066 CopyTypeInto(e->destType, type);
12067 e->destType->refCount = 1;
12068 e->destType->classObjectType = 0;
12071 e->__anon1.compound->__anon1.compound.context = context;
12072 PopContext(context);
12073 curContext = context->parent;
12077 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12079 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12081 if(checkedExp->type == 23)
12083 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12086 checkedExp = (*checkedExp->__anon1.list).last;
12088 else if(checkedExp->type == 11)
12089 checkedExp = checkedExp->__anon1.cast.exp;
12092 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12094 *operand = *checkedExp;
12095 __ecereMethod_Expression_Clear(checkedExp);
12096 checkedExp->destType = ProcessTypeString("void *", 0);
12097 checkedExp->expType = checkedExp->destType;
12098 checkedExp->destType->refCount++;
12099 checkedExp->type = 4;
12100 checkedExp->__anon1.op.op = '&';
12101 checkedExp->__anon1.op.exp1 = (((void *)0));
12102 checkedExp->__anon1.op.exp2 = operand;
12111 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))))
12113 if(e->expType->classObjectType && destType && destType->classObjectType)
12119 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12122 thisExp->prev = (((void *)0));
12123 thisExp->next = (((void *)0));
12124 __ecereMethod_Expression_Clear(e);
12126 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
12127 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
12128 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
12130 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12131 CopyTypeInto(e->expType, thisExp->expType);
12132 e->expType->byReference = 0;
12133 e->expType->refCount = 1;
12134 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))
12136 e->expType->classObjectType = 0;
12141 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
12143 if(destType->kind == 14)
12145 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
12147 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))
12149 unsigned int byReference = e->expType->byReference;
12150 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12151 struct Declarator * decl;
12152 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12153 char typeString[1024];
12154 struct Type * type;
12155 int backupClassObjectType;
12156 unsigned int backupByReference;
12158 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
12162 backupClassObjectType = type->classObjectType;
12163 backupByReference = type->byReference;
12164 type->classObjectType = 0;
12165 type->byReference = 0;
12166 typeString[0] = '\0';
12167 PrintType(type, typeString, 0, 1);
12168 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12169 type->classObjectType = backupClassObjectType;
12170 type->byReference = backupByReference;
12172 thisExp->prev = (((void *)0));
12173 thisExp->next = (((void *)0));
12174 __ecereMethod_Expression_Clear(e);
12175 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)))
12177 unsigned int passAsTemplate = thisExp->destType->passAsTemplate;
12180 destType->refCount++;
12182 e->__anon1.op.op = '*';
12183 e->__anon1.op.exp1 = (((void *)0));
12184 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
12185 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12186 CopyTypeInto(t, thisExp->destType);
12187 t->passAsTemplate = 0;
12188 FreeType(thisExp->destType);
12189 thisExp->destType = t;
12190 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12191 CopyTypeInto(t, destType);
12192 t->passAsTemplate = passAsTemplate;
12193 FreeType(destType);
12195 destType->refCount = 0;
12196 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12197 CopyTypeInto(e->expType, type);
12198 if(type->passAsTemplate)
12200 e->expType->classObjectType = 0;
12201 e->expType->passAsTemplate = 0;
12203 e->expType->byReference = 0;
12204 e->expType->refCount = 1;
12209 e->__anon1.cast.typeName = MkTypeName(specs, decl);
12210 e->__anon1.cast.exp = thisExp;
12211 e->byReference = 1;
12216 FreeType(e->destType);
12217 e->destType = destType;
12218 destType->refCount++;
12223 void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module)
12225 struct __ecereNameSpace__ecere__com__Class * _class;
12226 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
12228 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
12229 ComputeModuleClasses(subModule->data);
12230 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->classes.first; _class; _class = _class->next)
12231 ComputeClassMembers(_class, 0);
12234 int ComputeTypeSize(struct Type * type)
12236 unsigned int size = type ? type->size : 0;
12238 if(!size && type && !type->computing)
12240 type->computing = 1;
12244 type->alignment = size = sizeof(char);
12247 type->alignment = size = sizeof(char);
12250 type->alignment = size = sizeof(int);
12253 type->alignment = size = sizeof(long long);
12256 type->alignment = size = targetBits / 8;
12257 type->pointerAlignment = 1;
12260 type->alignment = size = targetBits / 8;
12261 type->pointerAlignment = 1;
12264 type->alignment = size = sizeof(long);
12267 type->alignment = size = sizeof(short);
12270 type->alignment = size = sizeof(float);
12273 type->alignment = size = sizeof(double);
12277 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
12279 if(_class && _class->type == 1)
12281 ComputeClassMembers(_class, 0);
12282 type->alignment = _class->structAlignment;
12283 type->pointerAlignment = (unsigned int)_class->pointerAlignment;
12284 size = _class->structSize;
12285 if(type->alignment && size % type->alignment)
12286 size += type->alignment - (size % type->alignment);
12288 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
12290 if(!_class->dataType)
12291 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12292 size = type->alignment = ComputeTypeSize(_class->dataType);
12296 size = type->alignment = targetBits / 8;
12297 type->pointerAlignment = 1;
12303 size = type->alignment = targetBits / 8;
12304 type->pointerAlignment = 1;
12307 if(type->__anon1.__anon4.arraySizeExp)
12309 ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
12310 ComputeExpression(type->__anon1.__anon4.arraySizeExp);
12311 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)))
12313 struct Location oldLoc = yylloc;
12314 char expression[10240];
12316 expression[0] = '\0';
12317 type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
12318 yylloc = type->__anon1.__anon4.arraySizeExp->loc;
12320 PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
12321 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
12324 GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
12326 else if(type->__anon1.__anon4.enumClass)
12328 if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
12330 type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
12333 type->__anon1.__anon4.arraySize = 0;
12337 type->__anon1.__anon4.arraySize = 0;
12339 size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
12340 if(type->__anon1.type)
12342 type->alignment = type->__anon1.type->alignment;
12343 type->pointerAlignment = type->__anon1.type->pointerAlignment;
12348 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12350 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12352 if(symbol && symbol->type)
12354 ComputeTypeSize(symbol->type);
12355 size = symbol->type->size;
12360 struct Type * member;
12362 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12364 int __simpleStruct0, __simpleStruct1;
12365 unsigned int addSize = ComputeTypeSize(member);
12367 member->offset = size;
12368 if(member->alignment && size % member->alignment)
12369 member->offset += member->alignment - (size % member->alignment);
12370 size = member->offset;
12371 if(member->pointerAlignment && type->size <= 4)
12372 type->pointerAlignment = 1;
12373 else if(!member->pointerAlignment && member->alignment >= 8)
12374 type->pointerAlignment = 0;
12375 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12378 if(type->alignment && size % type->alignment)
12379 size += type->alignment - (size % type->alignment);
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;
12393 type->alignment = symbol->type->alignment;
12398 struct Type * member;
12400 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12402 int __simpleStruct0, __simpleStruct1;
12403 unsigned int addSize = ComputeTypeSize(member);
12405 member->offset = size;
12406 if(member->alignment && size % member->alignment)
12407 member->offset += member->alignment - (size % member->alignment);
12408 size = member->offset;
12409 if(member->pointerAlignment && type->size <= 4)
12410 type->pointerAlignment = 1;
12411 else if(!member->pointerAlignment && member->alignment >= 8)
12412 type->pointerAlignment = 0;
12413 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12414 size = ((size > addSize) ? size : addSize);
12416 if(type->alignment && size % type->alignment)
12417 size += type->alignment - (size % type->alignment);
12423 struct TemplateParameter * param = type->__anon1.templateParameter;
12424 struct Type * baseType = ProcessTemplateParameterType(param);
12428 size = ComputeTypeSize(baseType);
12429 type->alignment = baseType->alignment;
12430 type->pointerAlignment = baseType->pointerAlignment;
12433 type->alignment = size = sizeof(uint64);
12438 type->alignment = size = sizeof(enum
12446 type->alignment = size = targetBits / 8;
12447 type->pointerAlignment = 1;
12452 type->computing = 0;
12457 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl)
12459 struct External * external = (((void *)0));
12460 struct Symbol * classSym = FindClass(name);
12461 struct __ecereNameSpace__ecere__sys__OldList * curDeclarations = (((void *)0));
12463 if(!inCompiler || !classSym)
12464 return (((void *)0));
12465 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
12466 return (((void *)0));
12467 if(!classSym->__anon1.registered || (classSym->__anon1.registered->type == 0 && classSym->__anon1.registered->structSize && classSym->__anon1.registered->base && classSym->__anon1.registered->base->base))
12468 _DeclareStruct(neededBy, "ecere::com::Instance", 0, 1, fwdDecl);
12469 external = classSym->__anon2.__anon1.structExternal;
12470 if(external && external->__anon1.declaration)
12472 struct Specifier * spec;
12474 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12475 if(spec->type == 3 || spec->type == 4)
12477 curDeclarations = spec->__anon1.__anon2.definitions;
12481 if(classSym->__anon1.registered && !classSym->declaring && classSym->imported && (!classSym->declaredStructSym || (classSym->__anon1.registered->type == 5 && !skipNoHead && external && !curDeclarations)))
12483 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12484 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
12485 char structName[1024];
12486 unsigned int addedPadding = 0;
12487 struct Specifier * curSpec = (((void *)0));
12489 classSym->declaring++;
12490 if(strchr(classSym->string, '<'))
12492 if(classSym->__anon1.registered->templateClass)
12493 external = _DeclareStruct(neededBy, classSym->__anon1.registered->templateClass->fullName, skipNoHead, needDereference, fwdDecl);
12494 classSym->declaring--;
12498 FullClassNameCat(structName, name, 0);
12499 classSym->declaredStructSym = 1;
12500 if(!external || (classSym->__anon1.registered->type == 5 && !skipNoHead && !curDeclarations))
12502 unsigned int add = 0;
12506 external = MkExternalDeclaration((((void *)0)));
12507 classSym->__anon2.__anon1.structExternal = external;
12508 external->symbol = classSym;
12513 declarations = MkList();
12514 AddMembers(external, declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
12516 if(external->__anon1.declaration)
12518 struct Specifier * spec;
12520 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12521 if(spec->type == 3 || spec->type == 4)
12524 curDeclarations = spec->__anon1.__anon2.definitions;
12528 if(declarations && (!(*declarations).count || ((*declarations).count == 1 && addedPadding)))
12530 FreeList(declarations, (void *)(FreeClassDef));
12531 declarations = (((void *)0));
12533 if(classSym->__anon1.registered->type != 5 && !declarations)
12535 FreeExternal(external);
12536 external = (((void *)0));
12537 classSym->__anon2.__anon1.structExternal = (((void *)0));
12542 curSpec->__anon1.__anon2.definitions = declarations;
12545 specifiers = MkList();
12546 declarators = MkList();
12547 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
12548 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12551 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12554 classSym->declaring--;
12556 else if(!classSym->declaredStructSym && classSym->__anon2.__anon1.structExternal)
12558 classSym->declaredStructSym = 1;
12559 if(classSym->__anon1.registered)
12560 DeclareMembers(classSym->__anon2.__anon1.structExternal, classSym->__anon1.registered, 0);
12561 if(classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
12563 struct Specifier * spec;
12565 for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
12567 if(spec->__anon1.__anon2.definitions)
12568 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
12572 if(inCompiler && neededBy && (external || !classSym->imported))
12576 classSym->__anon2.__anon1.structExternal = external = MkExternalDeclaration((((void *)0)));
12577 external->symbol = classSym;
12578 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12580 if(reachedPass15 && !external->__anon1.declaration && classSym->__anon1.registered && classSym->__anon1.registered->type == 5)
12582 char structName[1024];
12583 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12586 FullClassNameCat(structName, name, 0);
12587 specifiers = MkList();
12588 declarators = MkList();
12589 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))));
12590 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12594 struct External * e = external->fwdDecl ? external->fwdDecl : external;
12596 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)e->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
12597 __ecereMethod_External_CreateUniqueEdge(neededBy, e, !needDereference && !external->fwdDecl);
12600 __ecereMethod_External_CreateUniqueEdge(neededBy, external, !needDereference);
12605 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)
12607 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
12608 unsigned int found = 0;
12609 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
12610 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
12611 unsigned int freeType = 0;
12613 yylloc = member->loc;
12618 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
12622 dataMember = *curMember;
12628 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
12629 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
12630 int _subMemberStackPos = 0;
12633 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, ident->string, privateModule, _subMemberStack, &_subMemberStackPos);
12636 dataMember = thisMember;
12637 if(curMember && thisMember->memberAccess == 1)
12639 *curMember = thisMember;
12640 *curClass = thisMember->_class;
12641 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
12642 *subMemberStackPos = _subMemberStackPos;
12648 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
12649 if(method && method->type == 1)
12652 method = (((void *)0));
12657 struct Type * type = (((void *)0));
12661 if(!dataMember->dataType && dataMember->dataTypeString)
12663 struct Context * context = SetupTemplatesContext(_class);
12665 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
12666 FinishTemplatesContext(context);
12668 type = dataMember->dataType;
12672 if(!method->dataType)
12673 ProcessMethodType(method);
12674 type = method->dataType;
12676 if(ident && ident->next)
12678 for(ident = ident->next; ident && type; ident = ident->next)
12680 if(type->kind == 8)
12682 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
12684 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
12686 type = dataMember->dataType;
12688 else if(type->kind == 9 || type->kind == 10)
12690 struct Type * memberType;
12692 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
12694 if(!strcmp(memberType->name, ident->string))
12703 if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
12706 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
12707 struct __ecereNameSpace__ecere__com__Class * sClass;
12709 for(sClass = _class; sClass; sClass = sClass->base)
12712 if(sClass->templateClass)
12713 sClass = sClass->templateClass;
12714 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
12716 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
12718 for(sClass = sClass->base; sClass; sClass = sClass->base)
12720 if(sClass->templateClass)
12721 sClass = sClass->templateClass;
12722 id += sClass->templateParams.count;
12733 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
12735 if(arg.__anon1.__anon1.dataTypeString)
12737 unsigned int constant = type->constant;
12739 type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
12740 if(type->kind == 8 && constant)
12741 type->constant = 1;
12742 else if(type->kind == 13)
12744 struct Type * t = type->__anon1.type;
12746 while(t->kind == 13)
12747 t = t->__anon1.type;
12749 t->constant = constant;
12752 if(type && _class->templateClass)
12753 type->passAsTemplate = 1;
12760 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
12762 struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
12763 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
12764 int paramCount = 0;
12765 int lastParam = -1;
12766 char templateString[1024];
12767 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
12769 sprintf(templateString, "%s<", expClass->templateClass->fullName);
12770 for(cClass = expClass; cClass; cClass = cClass->base)
12774 if(cClass->templateClass)
12775 cClass = cClass->templateClass;
12776 for(param = cClass->templateParams.first; param; param = param->next)
12779 struct __ecereNameSpace__ecere__com__Class * sClass;
12780 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
12782 for(sClass = cClass->base; sClass; sClass = sClass->base)
12784 if(sClass->templateClass)
12785 sClass = sClass->templateClass;
12786 id += sClass->templateParams.count;
12788 arg = expClass->templateArgs[id];
12789 for(sClass = _class; sClass; sClass = sClass->base)
12791 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
12793 struct __ecereNameSpace__ecere__com__Class * nextClass;
12795 if(sClass->templateClass)
12796 sClass = sClass->templateClass;
12797 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
12799 if(nextClass->templateClass)
12800 nextClass = nextClass->templateClass;
12801 p += nextClass->templateParams.count;
12803 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
12805 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
12807 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12809 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
12810 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
12817 char argument[256];
12819 argument[0] = '\0';
12820 switch(param->type)
12824 char expString[1024];
12825 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12826 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
12827 struct Expression * exp;
12828 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
12830 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
12831 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
12832 ProcessExpressionType(exp);
12833 ComputeExpression(exp);
12834 expString[0] = '\0';
12835 PrintExpression(exp, expString);
12836 strcat(argument, expString);
12837 FreeExpression(exp);
12842 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
12847 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12848 strcat(argument, arg.__anon1.__anon1.dataTypeString);
12855 strcat(templateString, ", ");
12856 if(lastParam != p - 1)
12858 strcat(templateString, param->name);
12859 strcat(templateString, " = ");
12861 strcat(templateString, argument);
12870 int len = strlen(templateString);
12872 if(templateString[len - 1] == '<')
12876 if(templateString[len - 1] == '>')
12877 templateString[len++] = ' ';
12878 templateString[len++] = '>';
12880 templateString[len++] = '\0';
12883 struct Context * context = SetupTemplatesContext(_class);
12887 type = ProcessTypeString(templateString, 0);
12889 FinishTemplatesContext(context);
12892 if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
12894 ProcessExpressionType(member->initializer->__anon1.exp);
12895 if(!member->initializer->__anon1.exp->expType)
12899 char expString[10240];
12901 expString[0] = '\0';
12902 PrintExpression(member->initializer->__anon1.exp, expString);
12903 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
12904 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
12907 else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
12909 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
12912 else if(member->initializer)
12914 ProcessInitializer(member->initializer, type);
12921 if(_class && _class->type == 3)
12923 if(member->initializer)
12925 struct Type * type = MkClassType(_class->fullName);
12927 ProcessInitializer(member->initializer, type);
12933 if(member->initializer)
12935 ProcessInitializer(member->initializer, (((void *)0)));
12941 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12945 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12947 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
12951 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
12956 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
12958 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
12960 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)))
12962 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
12964 if(_class->type == 4)
12966 struct __ecereNameSpace__ecere__sys__OldList converts =
12970 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12973 if(!_class->symbol)
12974 _class->symbol = FindClass(_class->fullName);
12975 type->__anon1._class = _class->symbol;
12976 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))
12978 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
12979 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
12983 struct __ecereNameSpace__ecere__com__Class * baseClass;
12985 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
12987 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
12989 for(value = e->values.first; value; value = value->next)
12991 if(!strcmp(value->name, string))
12996 FreeType(sourceExp->expType);
12997 sourceExp->isConstant = 1;
12998 sourceExp->expType = MkClassType(baseClass->fullName);
12999 if(inCompiler || inPreCompiler || inDebugger)
13001 char constant[256];
13003 FreeExpContents(sourceExp);
13004 sourceExp->type = 2;
13005 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
13006 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13008 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
13009 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13011 while(converts.first)
13013 struct Conversion * convert = converts.first;
13015 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
13016 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
13018 ((type ? __extension__ ({
13019 void * __ecerePtrToDelete = (type);
13021 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13022 }) : 0), type = 0);
13029 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
13030 ((type ? __extension__ ({
13031 void * __ecerePtrToDelete = (type);
13033 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13034 }) : 0), type = 0);
13037 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)))
13038 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
13043 void ComputeExpression(struct Expression * exp)
13049 struct Identifier * id = exp->__anon1.__anon1.identifier;
13051 if(id && exp->isConstant && !inCompiler && !inPreCompiler && !inDebugger)
13053 struct __ecereNameSpace__ecere__com__Class * c = (exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
13055 if(c && c->type == 4)
13057 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13061 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13062 struct __ecereNameSpace__ecere__com__EnumClassData * e = (c ? ((void *)(((char *)c->data) + enumClass->offsetClass)) : (((void *)0)));
13064 for(value = e->values.first; value; value = value->next)
13066 if(!strcmp(value->name, id->string))
13071 const char * dts = c->dataTypeString;
13073 FreeExpContents(exp);
13075 exp->__anon1.__anon1.constant = (dts && (!strcmp(dts, "int") || !strcmp(dts, "int64") || !strcmp(dts, "short") || !strcmp(dts, "char"))) ? PrintInt64(value->data) : PrintUInt64(value->data);
13084 ComputeInstantiation(exp);
13089 struct Expression * exp1, * exp2 = (((void *)0));
13090 struct Operand op1 =
13097 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
13100 struct Operand op2 =
13107 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
13111 if(exp->__anon1.op.exp2)
13113 struct Expression * e = exp->__anon1.op.exp2;
13115 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
13117 if(e->type == 5 || e->type == 32 || e->type == 23)
13120 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13122 e = (*e->__anon1.list).last;
13125 if(exp->__anon1.op.op == 261 && e && e->expType)
13127 if(e->type == 3 && e->__anon1.__anon2.string)
13129 char * string = e->__anon1.__anon2.string;
13130 int len = strlen(string);
13131 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
13133 len = UnescapeString(tmp, string + 1, len - 2);
13134 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
13135 FreeExpContents(exp);
13137 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
13141 struct Type * type = e->expType;
13144 FreeExpContents(exp);
13146 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13152 ComputeExpression(exp->__anon1.op.exp2);
13154 if(exp->__anon1.op.exp1)
13156 ComputeExpression(exp->__anon1.op.exp1);
13157 exp1 = exp->__anon1.op.exp1;
13158 exp2 = exp->__anon1.op.exp2;
13159 op1 = GetOperand(exp1);
13161 op1.type->refCount++;
13164 op2 = GetOperand(exp2);
13166 op2.type->refCount++;
13171 exp1 = exp->__anon1.op.exp2;
13172 op1 = GetOperand(exp1);
13174 op1.type->refCount++;
13176 CallOperator(exp, exp1, exp2, &op1, &op2);
13178 FreeType(op1.type);
13180 FreeType(op2.type);
13186 struct Expression * e, * n;
13188 for(e = (*exp->__anon1.list).first; e; e = n)
13193 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
13194 struct Expression * prev = exp->prev;
13195 struct Expression * next = exp->next;
13197 ComputeExpression(e);
13198 FreeType(exp->expType);
13199 FreeType(exp->destType);
13203 ((e ? __extension__ ({
13204 void * __ecerePtrToDelete = (e);
13206 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13208 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
13219 struct Expression * memberExp = exp->__anon1.member.exp;
13220 struct Identifier * memberID = exp->__anon1.member.member;
13221 struct Type * type;
13223 ComputeExpression(exp->__anon1.member.exp);
13224 type = exp->__anon1.member.exp->expType;
13227 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)));
13228 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13229 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13230 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
13232 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
13233 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
13237 struct Symbol * classSym;
13240 PrintTypeNoConst(type, string, 0, 1);
13241 classSym = FindClass(string);
13242 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13244 if(exp->__anon1.member.member)
13246 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
13248 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
13250 if(!prop && !member && _class && exp->__anon1.member.member)
13252 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
13254 convertTo = _class;
13255 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13256 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
13262 struct Type * type = prop->dataType;
13264 if(_class->type == 3)
13266 if(type->kind == 8)
13268 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13270 if(_class->type == 3)
13272 if(!_class->dataType)
13273 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13274 type = _class->dataType;
13282 float (* Get)(float) = (void *)prop->Get;
13284 GetFloat(exp->__anon1.member.exp, &value);
13285 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
13292 double (* Get)(double);
13294 GetDouble(exp->__anon1.member.exp, &value);
13296 Get = (void *)prop->Set;
13298 Get = (void *)prop->Get;
13299 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
13309 struct Expression * value = exp->__anon1.member.exp;
13310 struct Type * type;
13312 if(!prop->dataType)
13313 ProcessPropertyType(prop);
13314 type = prop->dataType;
13318 else if(_class->type == 1)
13324 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13326 if(propertyClass->type == 1 && value->type == 1)
13328 void (* Set)(void *, void *) = (void *)prop->Set;
13330 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13331 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13332 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13333 exp->__anon1.instance->loc = exp->loc;
13335 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
13336 PopulateInstance(exp->__anon1.instance);
13343 void (* Set)(void *, int) = (void *)prop->Set;
13345 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13346 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13347 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13348 exp->__anon1.instance->loc = exp->loc;
13350 GetInt(value, &intValue);
13351 Set(exp->__anon1.instance->data, intValue);
13352 PopulateInstance(exp->__anon1.instance);
13357 long long intValue;
13358 void (* Set)(void *, long long) = (void *)prop->Set;
13360 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13361 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13362 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13363 exp->__anon1.instance->loc = exp->loc;
13365 GetInt64(value, &intValue);
13366 Set(exp->__anon1.instance->data, intValue);
13367 PopulateInstance(exp->__anon1.instance);
13373 void (* Set)(void *, intptr_t) = (void *)prop->Set;
13375 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13376 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13377 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13378 exp->__anon1.instance->loc = exp->loc;
13380 GetIntPtr(value, &intValue);
13381 Set(exp->__anon1.instance->data, intValue);
13382 PopulateInstance(exp->__anon1.instance);
13388 void (* Set)(void *, ssize_t) = (void *)prop->Set;
13390 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13391 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13392 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13393 exp->__anon1.instance->loc = exp->loc;
13395 GetIntSize(value, &intValue);
13396 Set(exp->__anon1.instance->data, intValue);
13397 PopulateInstance(exp->__anon1.instance);
13403 void (* Set)(void *, float) = (void *)prop->Set;
13405 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13406 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13407 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13408 exp->__anon1.instance->loc = exp->loc;
13410 GetFloat(value, &floatValue);
13411 Set(exp->__anon1.instance->data, floatValue);
13412 PopulateInstance(exp->__anon1.instance);
13417 double doubleValue;
13418 void (* Set)(void *, double) = (void *)prop->Set;
13420 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13421 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13422 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13423 exp->__anon1.instance->loc = exp->loc;
13425 GetDouble(value, &doubleValue);
13426 Set(exp->__anon1.instance->data, doubleValue);
13427 PopulateInstance(exp->__anon1.instance);
13432 else if(_class->type == 2)
13438 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13440 if(propertyClass->type == 1 && value->__anon1.instance->data)
13442 unsigned int (* Set)(void *) = (void *)prop->Set;
13443 unsigned int bits = Set(value->__anon1.instance->data);
13445 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13449 else if(_class->type == 2)
13451 unsigned int value;
13452 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
13455 GetUInt(exp->__anon1.member.exp, &value);
13457 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13466 if(_class->type == 2)
13468 unsigned int value;
13470 GetUInt(exp->__anon1.member.exp, &value);
13475 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13477 if(_class->type == 1)
13479 void (* Get)(unsigned int, void *) = (void *)prop->Get;
13481 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13482 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13483 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13484 exp->__anon1.instance->loc = exp->loc;
13486 Get(value, exp->__anon1.instance->data);
13487 PopulateInstance(exp->__anon1.instance);
13489 else if(_class->type == 2)
13491 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
13492 uint64 bits = Get(value);
13494 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
13501 else if(_class->type == 1)
13503 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
13509 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13511 if(_class->type == 1 && value)
13513 void (* Get)(void *, void *) = (void *)prop->Get;
13515 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13516 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13517 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13518 exp->__anon1.instance->loc = exp->loc;
13520 Get(value, exp->__anon1.instance->data);
13521 PopulateInstance(exp->__anon1.instance);
13532 exp->isConstant = 0;
13541 FreeExpression(memberExp);
13542 FreeIdentifier(memberID);
13548 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
13550 FreeExpContents(exp);
13551 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13558 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
13560 if(classSym && classSym->__anon1.registered)
13562 if(classSym->__anon1.registered->fixed)
13564 FreeSpecifier(exp->__anon1._class);
13565 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
13570 char className[1024];
13572 strcpy(className, "__ecereClass_");
13573 FullClassNameCat(className, classSym->string, 1);
13574 DeclareClass(curExternal, classSym, className);
13575 FreeExpContents(exp);
13577 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
13578 exp->__anon1.member.member = MkIdentifier("structSize");
13585 struct Type * type;
13586 struct Expression * e = exp;
13588 if(exp->type == 11)
13590 if(exp->__anon1.cast.exp)
13591 ComputeExpression(exp->__anon1.cast.exp);
13592 e = exp->__anon1.cast.exp;
13594 if(e && exp->expType)
13596 type = exp->expType;
13597 if(type->kind == 8)
13599 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13601 if(_class && (_class->type == 3 || _class->type == 2))
13603 if(!_class->dataType)
13604 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13605 type = _class->dataType;
13616 if(GetChar(e, &value))
13618 FreeExpContents(exp);
13619 exp->__anon1.__anon1.constant = PrintChar(value);
13625 unsigned char value = 0;
13627 if(GetUChar(e, &value))
13629 FreeExpContents(exp);
13630 exp->__anon1.__anon1.constant = PrintUChar(value);
13640 if(GetShort(e, &value))
13642 FreeExpContents(exp);
13643 exp->__anon1.__anon1.constant = PrintShort(value);
13649 unsigned short value = 0;
13651 if(GetUShort(e, &value))
13653 FreeExpContents(exp);
13654 exp->__anon1.__anon1.constant = PrintUShort(value);
13664 if(GetInt(e, &value))
13666 FreeExpContents(exp);
13667 exp->__anon1.__anon1.constant = PrintInt(value);
13673 unsigned int value = 0;
13675 if(GetUInt(e, &value))
13677 FreeExpContents(exp);
13678 exp->__anon1.__anon1.constant = PrintUInt(value);
13686 long long value = 0;
13688 if(GetInt64(e, &value))
13690 FreeExpContents(exp);
13691 exp->__anon1.__anon1.constant = PrintInt64(value);
13699 if(GetUInt64(e, &value))
13701 FreeExpContents(exp);
13702 exp->__anon1.__anon1.constant = PrintUInt64(value);
13710 intptr_t value = 0;
13712 if(GetIntPtr(e, &value))
13714 FreeExpContents(exp);
13715 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13721 uintptr_t value = 0;
13723 if(GetUIntPtr(e, &value))
13725 FreeExpContents(exp);
13726 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13736 if(GetIntSize(e, &value))
13738 FreeExpContents(exp);
13739 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13747 if(GetUIntSize(e, &value))
13749 FreeExpContents(exp);
13750 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13759 if(GetFloat(e, &value))
13761 FreeExpContents(exp);
13762 exp->__anon1.__anon1.constant = PrintFloat(value);
13771 if(GetDouble(e, &value))
13773 FreeExpContents(exp);
13774 exp->__anon1.__anon1.constant = PrintDouble(value);
13785 struct Operand op1 =
13792 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
13795 struct Operand op2 =
13802 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
13805 struct Operand op3 =
13812 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
13816 if(exp->__anon1.cond.exp)
13817 ComputeExpression((*exp->__anon1.cond.exp).last);
13818 if(exp->__anon1.cond.elseExp)
13819 ComputeExpression(exp->__anon1.cond.elseExp);
13820 if(exp->__anon1.cond.cond)
13821 ComputeExpression(exp->__anon1.cond.cond);
13822 op1 = GetOperand(exp->__anon1.cond.cond);
13824 op1.type->refCount++;
13825 op2 = GetOperand((*exp->__anon1.cond.exp).last);
13827 op2.type->refCount++;
13828 op3 = GetOperand(exp->__anon1.cond.elseExp);
13830 op3.type->refCount++;
13833 FreeExpContents(exp);
13834 op1.ops.Cond(exp, &op1, &op2, &op3);
13837 FreeType(op1.type);
13839 FreeType(op2.type);
13841 FreeType(op3.type);
13847 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
13849 struct __ecereNameSpace__ecere__com__Instance * module;
13851 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))
13853 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))
13855 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))
13857 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)
13859 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13865 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
13867 struct Type * source;
13868 struct Type * realDest = dest;
13869 struct Type * backupSourceExpType = (((void *)0));
13870 struct Expression * nbExp = GetNonBracketsExp(sourceExp);
13871 struct Expression * computedExp = nbExp;
13874 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)
13876 computedExp = CopyExpression(nbExp);
13877 ComputeExpression(computedExp);
13879 source = sourceExp->expType;
13880 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
13882 if(computedExp != nbExp)
13884 FreeExpression(computedExp);
13885 computedExp = nbExp;
13890 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
13892 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
13894 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
13896 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
13898 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
13900 if(sourceBase == destBase)
13902 if(computedExp != nbExp)
13904 FreeExpression(computedExp);
13905 computedExp = nbExp;
13914 struct __ecereNameSpace__ecere__sys__OldList * specs;
13915 unsigned int flag = 0;
13916 long long value = (((int)0x7fffffff));
13918 source->refCount++;
13919 if(computedExp->type == 2)
13921 if(source->isSigned)
13922 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13924 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13926 else if(computedExp->type == 4 && sourceExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
13928 if(source->isSigned)
13929 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13931 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13933 if(computedExp != nbExp)
13935 FreeExpression(computedExp);
13936 computedExp = nbExp;
13938 if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "unichar"))
13941 source = __extension__ ({
13942 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13944 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
13947 if(dest->kind == 8)
13949 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
13951 if(_class && _class->type == 3)
13953 if(source->kind != 8)
13955 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13956 struct Type * tempDest, * tempSource;
13958 for(; _class->base->type != 1000; _class = _class->base)
13961 tempDest = tempType;
13962 tempType->kind = 8;
13963 if(!_class->symbol)
13964 _class->symbol = FindClass(_class->fullName);
13965 tempType->__anon1._class = _class->symbol;
13966 tempType->truth = dest->truth;
13967 if(tempType->__anon1._class)
13968 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
13969 backupSourceExpType = sourceExp->expType;
13970 if(dest->passAsTemplate)
13972 sourceExp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13973 CopyTypeInto(sourceExp->expType, dest);
13974 sourceExp->expType->passAsTemplate = 0;
13978 sourceExp->expType = dest;
13982 ((tempType ? __extension__ ({
13983 void * __ecerePtrToDelete = (tempType);
13985 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13986 }) : 0), tempType = 0);
13989 if(_class && _class->type == 2 && source->kind != 8)
13991 if(!dest->__anon1._class->__anon1.registered->dataType)
13992 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
13993 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
13996 FreeType(sourceExp->expType);
13997 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
13998 source->refCount++;
14001 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
14003 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14004 struct Declarator * decl;
14007 ReadString(string, sourceExp->__anon1.__anon2.string);
14008 decl = SpecDeclFromString(string, specs, (((void *)0)));
14009 FreeExpContents(sourceExp);
14010 FreeType(sourceExp->expType);
14011 sourceExp->type = 24;
14012 sourceExp->__anon1._classExp.specifiers = specs;
14013 sourceExp->__anon1._classExp.decl = decl;
14014 sourceExp->expType = dest;
14018 if(backupSourceExpType)
14019 FreeType(backupSourceExpType);
14023 else if(source->kind == 8)
14025 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
14027 if(_class && (_class->type == 3 || _class->type == 2))
14029 if(dest->kind != 8)
14031 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14032 struct Type * tempDest, * tempSource;
14034 if(!source->__anon1._class->__anon1.registered->dataType)
14035 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
14036 for(; _class->base->type != 1000; _class = _class->base)
14039 tempSource = tempType;
14040 tempType->kind = 8;
14041 tempType->__anon1._class = FindClass(_class->fullName);
14042 tempType->truth = source->truth;
14043 tempType->classObjectType = source->classObjectType;
14044 if(tempType->__anon1._class)
14045 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14046 if(conversions && conversions->last)
14048 ((struct Conversion *)conversions->last)->resultType = dest;
14051 FreeType(sourceExp->expType);
14052 sourceExp->expType = MkClassType(_class->fullName);
14053 sourceExp->expType->truth = source->truth;
14054 sourceExp->expType->classObjectType = source->classObjectType;
14055 if(!sourceExp->destType)
14057 FreeType(sourceExp->destType);
14058 sourceExp->destType = sourceExp->expType;
14059 if(sourceExp->expType)
14060 sourceExp->expType->refCount++;
14062 if(!_class->dataType)
14063 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14065 dest = MkClassType(source->__anon1._class->string);
14066 dest->truth = source->truth;
14067 dest->classObjectType = source->classObjectType;
14069 source = _class->dataType;
14070 source->refCount++;
14071 ((tempType ? __extension__ ({
14072 void * __ecerePtrToDelete = (tempType);
14074 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14075 }) : 0), tempType = 0);
14081 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14088 if(dest->kind == 8)
14090 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
14091 unsigned int fittingValue = 0;
14093 if(_class && _class->type == 4)
14095 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14096 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14098 if(c && value >= 0 && value <= c->largest)
14101 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
14103 if(_class->type == 0 || _class->type == 5)
14105 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14107 *newExp = *sourceExp;
14108 if(sourceExp->destType)
14109 sourceExp->destType->refCount++;
14110 if(sourceExp->expType)
14111 sourceExp->expType->refCount++;
14112 sourceExp->type = 11;
14113 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
14114 sourceExp->__anon1.cast.exp = newExp;
14115 FreeType(sourceExp->expType);
14116 sourceExp->expType = (((void *)0));
14117 ProcessExpressionType(sourceExp);
14120 FreeType(sourceExp->expType);
14121 sourceExp->expType = dest;
14126 if(backupSourceExpType)
14127 FreeType(backupSourceExpType);
14130 if(!_class->dataType)
14131 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14133 dest = _class->dataType;
14136 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))
14138 specs = MkListOne(MkSpecifier(DOUBLE));
14140 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))
14142 specs = MkListOne(MkSpecifier(FLOAT));
14144 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))
14147 if(!dest->isSigned)
14148 ListAdd(specs, MkSpecifier(UNSIGNED));
14149 ListAdd(specs, MkSpecifier(INT64));
14151 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
14154 if(!dest->isSigned)
14155 ListAdd(specs, MkSpecifier(UNSIGNED));
14156 ListAdd(specs, MkSpecifier(INT));
14158 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14161 if(!dest->isSigned)
14162 ListAdd(specs, MkSpecifier(UNSIGNED));
14163 ListAdd(specs, MkSpecifier(SHORT));
14165 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14168 if(!dest->isSigned)
14169 ListAdd(specs, MkSpecifier(UNSIGNED));
14170 ListAdd(specs, MkSpecifier(CHAR));
14176 if(backupSourceExpType)
14178 if(sourceExp->expType)
14179 FreeType(sourceExp->expType);
14180 sourceExp->expType = backupSourceExpType;
14185 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))
14187 specs = MkListOne(MkSpecifier(DOUBLE));
14189 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))
14191 specs = MkListOne(MkSpecifier(FLOAT));
14193 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
14196 ListAdd(specs, MkSpecifier(BOOL));
14198 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)))
14200 if(source->kind == 3)
14204 if(backupSourceExpType)
14205 FreeType(backupSourceExpType);
14211 if(!dest->isSigned)
14212 ListAdd(specs, MkSpecifier(UNSIGNED));
14213 ListAdd(specs, MkSpecifier(CHAR));
14216 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)))))
14218 if(source->kind == 3)
14222 if(backupSourceExpType)
14223 FreeType(backupSourceExpType);
14229 if(!dest->isSigned)
14230 ListAdd(specs, MkSpecifier(UNSIGNED));
14231 ListAdd(specs, MkSpecifier(SHORT));
14234 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
14237 if(!dest->isSigned)
14238 ListAdd(specs, MkSpecifier(UNSIGNED));
14239 ListAdd(specs, MkSpecifier(INT));
14241 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
14244 if(!dest->isSigned)
14245 ListAdd(specs, MkSpecifier(UNSIGNED));
14246 ListAdd(specs, MkSpecifier(INT64));
14248 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14250 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
14256 if(backupSourceExpType)
14258 if(sourceExp->expType)
14259 FreeType(sourceExp->expType);
14260 sourceExp->expType = backupSourceExpType;
14264 if(!flag && !sourceExp->opDestType)
14266 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14268 *newExp = *sourceExp;
14269 newExp->prev = (((void *)0));
14270 newExp->next = (((void *)0));
14271 if(sourceExp->destType)
14272 sourceExp->destType->refCount++;
14273 if(sourceExp->expType)
14274 sourceExp->expType->refCount++;
14275 sourceExp->type = 11;
14276 if(realDest->kind == 8)
14278 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
14279 FreeList(specs, (void *)(FreeSpecifier));
14282 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
14283 if(newExp->type == 4)
14285 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
14288 sourceExp->__anon1.cast.exp = newExp;
14289 FreeType(sourceExp->expType);
14290 sourceExp->expType = (((void *)0));
14291 ProcessExpressionType(sourceExp);
14294 FreeList(specs, (void *)(FreeSpecifier));
14297 if(backupSourceExpType)
14298 FreeType(backupSourceExpType);
14303 if(computedExp != nbExp)
14305 FreeExpression(computedExp);
14306 computedExp = nbExp;
14308 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
14309 sourceExp = (*sourceExp->__anon1.list).last;
14310 if(sourceExp->type == 0)
14312 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
14314 if(dest->kind == 8)
14316 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
14318 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
14319 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14323 for(; _class && _class->type == 4; _class = _class->base)
14325 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
14326 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14328 for(value = e->values.first; value; value = value->next)
14330 if(!strcmp(value->name, id->string))
14335 FreeType(sourceExp->expType);
14336 sourceExp->isConstant = 1;
14337 sourceExp->expType = MkClassType(_class->fullName);
14338 if(inCompiler || inPreCompiler || inDebugger)
14340 FreeExpContents(sourceExp);
14341 sourceExp->type = 2;
14342 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
14343 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
14345 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
14354 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
14365 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
14367 unsigned int result = 1;
14371 struct __ecereNameSpace__ecere__sys__OldList converts =
14375 struct Conversion * convert;
14377 if(destType->kind == 0)
14379 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
14383 for(convert = converts.first; convert; convert = convert->next)
14385 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
14389 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14390 int objectType = exp->expType ? exp->expType->classObjectType : 0;
14393 newExp->prev = (((void *)0));
14394 newExp->next = (((void *)0));
14395 newExp->destType = (((void *)0));
14399 exp->addedThis = 1;
14400 exp->__anon1.member.exp = newExp;
14401 FreeType(exp->__anon1.member.exp->expType);
14402 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
14403 exp->__anon1.member.exp->expType->classObjectType = objectType;
14404 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
14405 exp->__anon1.member.memberType = 1;
14406 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14409 exp->expType->refCount++;
14410 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14416 exp->addedThis = 1;
14417 exp->__anon1.member.exp = newExp;
14418 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)
14420 newExp->byReference = 1;
14422 FreeType(exp->__anon1.member.exp->expType);
14423 exp->__anon1.member.exp->expType = (((void *)0));
14424 if(convert->convert->dataType)
14426 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14427 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
14428 exp->__anon1.member.exp->expType->refCount = 1;
14429 exp->__anon1.member.exp->expType->classObjectType = objectType;
14430 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14432 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
14433 exp->__anon1.member.memberType = 4;
14434 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14436 if(convert->resultType)
14437 convert->resultType->refCount++;
14443 FreeType(exp->expType);
14446 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14447 if(exp->destType->casted)
14450 exp->expType->refCount++;
14454 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14455 if(exp->destType->casted)
14457 if(convert->resultType)
14458 convert->resultType->refCount++;
14462 if(exp->isConstant && inCompiler)
14463 ComputeExpression(exp);
14464 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
14466 if(!result && exp->expType && converts.count)
14468 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14470 if(!result && exp->expType && exp->destType)
14472 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))
14479 static void ProcessFunction(struct FunctionDefinition * function);
14481 void ProcessInstantiationType(struct Instantiation * inst)
14483 yylloc = inst->loc;
14486 struct MembersInit * members;
14487 struct Symbol * classSym;
14488 struct __ecereNameSpace__ecere__com__Class * _class;
14490 classSym = inst->_class->__anon1.__anon1.symbol;
14491 _class = classSym ? classSym->__anon1.registered : (((void *)0));
14492 if(!_class || _class->type != 5)
14493 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
14494 afterExternal = afterExternal ? afterExternal : curExternal;
14496 ProcessExpressionType(inst->exp);
14497 inst->isConstant = 1;
14500 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
14501 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
14502 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
14503 int subMemberStackPos = 0;
14505 for(members = (*inst->members).first; members; members = members->next)
14507 switch(members->type)
14512 static unsigned int instMethodID = 0;
14513 struct External * external = curExternal;
14514 struct Context * context = curContext;
14515 struct Declarator * declarator = members->__anon1.function->declarator;
14516 struct Identifier * nameID = GetDeclId(declarator);
14517 char * unmangled = nameID ? nameID->string : (((void *)0));
14518 struct Expression * exp;
14519 struct External * createdExternal = (((void *)0));
14525 strcpy(name, "__ecereInstMeth_");
14526 FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
14528 strcat(name, nameID->string);
14530 sprintf(number, "_%08d", instMethodID++);
14531 strcat(name, number);
14532 nameID->string = __ecereNameSpace__ecere__sys__CopyString(name);
14536 struct Symbol * symbol = declarator->symbol;
14537 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, unmangled, privateModule);
14539 if(method && method->type == 1)
14541 symbol->__anon1.method = method;
14542 ProcessMethodType(method);
14543 if(!symbol->type->__anon1.__anon2.thisClass)
14545 if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
14547 if(!currentClass->symbol)
14548 currentClass->symbol = FindClass(currentClass->fullName);
14549 symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
14553 if(!_class->symbol)
14554 _class->symbol = FindClass(_class->fullName);
14555 symbol->type->__anon1.__anon2.thisClass = _class->symbol;
14558 DeclareType(curExternal, symbol->type, 1, 1);
14562 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
14565 createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
14568 FreeSpecifier(nameID->_class);
14569 nameID->_class = (((void *)0));
14571 curExternal = createdExternal;
14574 if(createdExternal->__anon1.function)
14575 ProcessFunction(createdExternal->__anon1.function);
14577 else if(declarator)
14579 curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
14580 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
14582 curExternal = external;
14583 curContext = context;
14586 FreeClassFunction(members->__anon1.function);
14587 exp = QMkExpId(name);
14589 members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
14590 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
14596 if(members->__anon1.dataMembers && classSym)
14598 struct MemberInit * member;
14599 struct Location oldyyloc = yylloc;
14601 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
14603 ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
14604 if(member->initializer && !member->initializer->isConstant)
14605 inst->isConstant = 0;
14617 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
14619 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct, unsigned int warnClasses)
14625 if(spec->__anon1.specifier == THISCLASS)
14630 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14631 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14632 ProcessSpecifier(spec, declareStruct, 0);
14639 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
14642 DeclareType(curExternal, symbol->type, 1, 1);
14643 else if(spec->__anon1.__anon1.symbol)
14645 struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
14647 if(warnClasses && !c)
14648 Compiler_Warning("Undeclared class %s\n", spec->__anon1.__anon1.name);
14649 DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
14655 struct Enumerator * e;
14657 if(spec->__anon1.__anon2.list)
14659 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
14662 ProcessExpressionType(e->exp);
14671 if(spec->__anon1.__anon2.definitions)
14673 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
14675 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
14682 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
14687 if(decl->__anon1.identifier->classSym)
14689 FreeSpecifier(decl->__anon1.identifier->_class);
14690 decl->__anon1.identifier->_class = (((void *)0));
14694 if(decl->__anon1.array.exp)
14695 ProcessExpressionType(decl->__anon1.array.exp);
14703 struct Identifier * id = (((void *)0));
14704 struct Specifier * classSpec = (((void *)0));
14706 if(decl->type == 4)
14708 id = GetDeclId(decl);
14709 if(id && id->_class)
14711 classSpec = id->_class;
14712 id->_class = (((void *)0));
14715 if(decl->declarator)
14716 ProcessDeclarator(decl->declarator, isFunction);
14717 if(decl->type == 4)
14721 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
14723 if(!decl->__anon1.function.parameters)
14724 decl->__anon1.function.parameters = MkList();
14725 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
14727 if(decl->__anon1.function.parameters)
14729 struct TypeName * param;
14731 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
14733 if(param->qualifiers)
14735 struct Specifier * spec;
14737 for(spec = (*param->qualifiers).first; spec; spec = spec->next)
14739 if(spec->type == 0)
14741 if(spec->__anon1.specifier == TYPED_OBJECT)
14743 struct Declarator * d = param->declarator;
14744 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);
14746 if(!d || d->type != 5)
14747 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
14748 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14749 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
14750 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
14751 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
14752 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
14756 else if(spec->__anon1.specifier == ANY_OBJECT)
14758 struct Declarator * d = param->declarator;
14760 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14761 param->qualifiers = MkListOne(MkSpecifier(VOID));
14762 if(!d || d->type != 5)
14763 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
14764 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
14767 else if(spec->__anon1.specifier == THISCLASS)
14772 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14773 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14774 ProcessSpecifier(spec, 0, 0);
14779 else if(spec->type == 1)
14781 ProcessSpecifier(spec, isFunction, 1);
14783 else if((spec->type == 3 || spec->type == 4) && !spec->__anon1.__anon2.definitions && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
14785 struct Declarator * d = param->declarator;
14787 if(!d || d->type != 5)
14788 DeclareStruct(curExternal, spec->__anon1.__anon2.id->string, 0, 1);
14792 if(param->declarator)
14793 ProcessDeclarator(param->declarator, 0);
14802 static void ProcessDeclaration(struct Declaration * decl, unsigned int warnClasses)
14804 yylloc = decl->loc;
14809 unsigned int declareStruct = 0;
14811 if(decl->__anon1.__anon1.declarators)
14813 struct InitDeclarator * d;
14815 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14817 struct Type * type, * subType;
14819 ProcessDeclarator(d->declarator, 0);
14820 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14823 ProcessInitializer(d->initializer, type);
14824 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
14826 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
14828 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
14830 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
14831 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
14832 if(decl->__anon1.__anon1.specifiers)
14833 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
14834 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
14837 decl->__anon1.inst = inst;
14841 for(subType = type; subType; )
14843 if(subType->kind == 8)
14848 else if(subType->kind == 13)
14850 else if(subType->kind == 12)
14851 subType = subType->__anon1.__anon4.arrayType;
14860 if(decl->__anon1.__anon1.specifiers)
14862 struct Specifier * s;
14864 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
14866 ProcessSpecifier(s, declareStruct, 1);
14873 ProcessInstantiationType(decl->__anon1.inst);
14878 struct Specifier * spec;
14879 struct Declarator * d;
14880 unsigned int declareStruct = 0;
14882 if(decl->__anon1.__anon1.declarators)
14884 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14886 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14887 struct Type * subType;
14889 ProcessDeclarator(d, 0);
14890 for(subType = type; subType; )
14892 if(subType->kind == 8)
14897 else if(subType->kind == 13)
14899 else if(subType->kind == 12)
14900 subType = subType->__anon1.__anon4.arrayType;
14907 if(decl->__anon1.__anon1.specifiers)
14909 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
14910 ProcessSpecifier(spec, declareStruct, warnClasses);
14917 static void ProcessStatement(struct Statement * stmt)
14919 yylloc = stmt->loc;
14923 ProcessStatement(stmt->__anon1.labeled.stmt);
14926 if(stmt->__anon1.caseStmt.exp)
14928 FreeType(stmt->__anon1.caseStmt.exp->destType);
14929 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
14931 curSwitchType->refCount++;
14932 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
14933 ComputeExpression(stmt->__anon1.caseStmt.exp);
14935 if(stmt->__anon1.caseStmt.stmt)
14936 ProcessStatement(stmt->__anon1.caseStmt.stmt);
14940 if(stmt->__anon1.compound.context)
14942 struct Declaration * decl;
14943 struct Statement * s;
14944 struct Statement * prevCompound = curCompound;
14945 struct Context * prevContext = curContext;
14947 if(!stmt->__anon1.compound.isSwitch)
14948 curCompound = stmt;
14949 curContext = stmt->__anon1.compound.context;
14950 if(stmt->__anon1.compound.declarations)
14952 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
14953 ProcessDeclaration(decl, 1);
14955 if(stmt->__anon1.compound.statements)
14957 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
14958 ProcessStatement(s);
14960 curContext = prevContext;
14961 curCompound = prevCompound;
14967 struct Expression * exp;
14969 if(stmt->__anon1.expressions)
14971 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
14972 ProcessExpressionType(exp);
14978 struct Expression * exp;
14980 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
14981 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
14982 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
14983 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
14985 ProcessExpressionType(exp);
14987 if(stmt->__anon1.ifStmt.stmt)
14988 ProcessStatement(stmt->__anon1.ifStmt.stmt);
14989 if(stmt->__anon1.ifStmt.elseStmt)
14990 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
14995 struct Type * oldSwitchType = curSwitchType;
14997 if(stmt->__anon1.switchStmt.exp)
14999 struct Expression * exp;
15001 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
15005 ProcessExpressionType(exp);
15008 curSwitchType = exp->expType;
15011 ProcessStatement(stmt->__anon1.switchStmt.stmt);
15012 curSwitchType = oldSwitchType;
15017 if(stmt->__anon1.whileStmt.exp)
15019 struct Expression * exp;
15021 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
15022 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
15023 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
15024 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
15026 ProcessExpressionType(exp);
15029 if(stmt->__anon1.whileStmt.stmt)
15030 ProcessStatement(stmt->__anon1.whileStmt.stmt);
15035 if(stmt->__anon1.doWhile.exp)
15037 struct Expression * exp;
15039 if((*stmt->__anon1.doWhile.exp).last)
15041 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
15042 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
15043 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
15045 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
15047 ProcessExpressionType(exp);
15050 if(stmt->__anon1.doWhile.stmt)
15051 ProcessStatement(stmt->__anon1.doWhile.stmt);
15056 struct Expression * exp;
15058 if(stmt->__anon1.forStmt.init)
15059 ProcessStatement(stmt->__anon1.forStmt.init);
15060 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
15062 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
15063 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
15064 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
15066 if(stmt->__anon1.forStmt.check)
15067 ProcessStatement(stmt->__anon1.forStmt.check);
15068 if(stmt->__anon1.forStmt.increment)
15070 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
15071 ProcessExpressionType(exp);
15073 if(stmt->__anon1.forStmt.stmt)
15074 ProcessStatement(stmt->__anon1.forStmt.stmt);
15079 struct Identifier * id = stmt->__anon1.forEachStmt.id;
15080 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
15081 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
15082 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
15083 char iteratorType[1024];
15084 struct Type * source;
15085 struct Expression * e;
15086 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));
15087 struct Expression * arrayExp;
15088 const char * typeString = (((void *)0));
15089 int builtinCount = 0;
15091 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
15095 FreeType(e->destType);
15096 e->destType = ProcessTypeString("Container", 0);
15098 if(!isBuiltin || e->next)
15099 ProcessExpressionType(e);
15101 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
15102 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)))
15104 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
15105 struct Symbol * symbol;
15106 struct Expression * expIt = (((void *)0));
15107 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
15108 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
15109 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
15110 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
15115 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
15116 stmt->__anon1.compound.context->parent = curContext;
15117 curContext = stmt->__anon1.compound.context;
15119 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
15121 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
15123 isCustomAVLTree = 1;
15124 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
15127 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
15129 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
15131 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
15134 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
15136 if(inCompiler && isArray)
15138 struct Declarator * decl;
15139 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15141 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
15142 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15143 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
15147 struct Type * type = (((void *)0));
15148 char typeStringBuf[1024];
15150 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
15151 if(((struct Expression *)(*exp).last)->type == 11)
15153 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
15156 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
15158 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)
15160 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
15162 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
15164 else if(arrayExp->__anon1.list)
15166 struct Expression * e;
15168 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15170 ProcessExpressionType(e);
15180 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15184 e->expType = (((void *)0));
15185 e = (*arrayExp->__anon1.list).first;
15186 ProcessExpressionType(e);
15189 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15191 FreeType(e->expType);
15192 e->expType = (((void *)0));
15194 type = (((void *)0));
15202 FreeType(e->expType);
15203 e->expType = (((void *)0));
15209 typeStringBuf[0] = '\0';
15210 PrintType(type, typeStringBuf, 0, 1);
15211 typeString = typeStringBuf;
15219 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
15220 struct Declarator * decl;
15221 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15223 if(arrayExp->__anon1.list)
15225 struct Expression * e;
15227 builtinCount = (*arrayExp->__anon1.list).count;
15228 type = ProcessTypeString(typeString, 0);
15229 while((e = (*arrayExp->__anon1.list).first))
15231 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
15232 e->destType = type;
15234 ProcessExpressionType(e);
15236 ListAdd(initializers, MkInitializerAssignment(e));
15239 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
15241 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
15242 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
15243 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
15244 FreeList(exp, (void *)(FreeExpression));
15246 else if(arrayExp->__anon1.list)
15248 struct Expression * e;
15250 type = ProcessTypeString(typeString, 0);
15251 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15253 e->destType = type;
15255 ProcessExpressionType(e);
15262 arrayExp->expType = ProcessTypeString("Container", 0);
15263 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
15266 else if(inCompiler && isLinkList && !isList)
15268 struct Declarator * decl;
15269 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15271 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
15272 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15273 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
15275 else if(inCompiler && _class->templateArgs)
15278 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
15280 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
15281 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)))))))));
15285 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
15288 switch(block->type)
15291 if(block->__anon1.compound.context)
15292 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15295 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
15296 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15297 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
15298 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15301 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
15302 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15305 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
15306 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15309 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
15310 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15313 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
15314 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15317 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
15318 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15324 block = MkIfStmt(filter, block, (((void *)0)));
15328 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));
15329 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15330 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15331 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15337 sprintf(count, "%d", builtinCount);
15338 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));
15339 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15340 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15341 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15343 else if(isLinkList && !isList)
15345 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
15346 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
15348 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
15350 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));
15354 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15355 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
15357 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));
15359 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15360 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15361 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15365 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
15367 ProcessExpressionType(expIt);
15368 if((*stmt->__anon1.compound.declarations).first)
15369 ProcessDeclaration((*stmt->__anon1.compound.declarations).first, 1);
15371 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
15372 ProcessStatement(stmt);
15375 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
15377 curContext = stmt->__anon1.compound.context->parent;
15382 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
15394 struct Expression * exp;
15396 if(stmt->__anon1.expressions)
15398 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15402 if(curFunction && !curFunction->type)
15403 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
15404 FreeType(exp->destType);
15405 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
15407 exp->destType->refCount++;
15409 ProcessExpressionType(exp);
15416 ProcessDeclaration(stmt->__anon1.decl, 1);
15421 struct AsmField * field;
15423 if(stmt->__anon1.asmStmt.inputFields)
15425 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
15426 if(field->expression)
15427 ProcessExpressionType(field->expression);
15429 if(stmt->__anon1.asmStmt.outputFields)
15431 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
15432 if(field->expression)
15433 ProcessExpressionType(field->expression);
15435 if(stmt->__anon1.asmStmt.clobberedFields)
15437 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
15439 if(field->expression)
15440 ProcessExpressionType(field->expression);
15447 struct PropertyWatch * propWatch;
15448 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15449 struct Expression * object = stmt->__anon1._watch.object;
15450 struct Expression * watcher = stmt->__anon1._watch.watcher;
15453 ProcessExpressionType(watcher);
15455 ProcessExpressionType(object);
15458 if(watcher || thisClass)
15460 struct External * external = curExternal;
15461 struct Context * context = curContext;
15464 stmt->__anon1.expressions = MkList();
15465 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15467 struct ClassFunction * func;
15468 char watcherName[1024];
15469 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;
15470 struct External * createdExternal;
15472 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
15473 if(propWatch->deleteWatch)
15474 strcat(watcherName, "_delete");
15477 struct Identifier * propID;
15479 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15481 strcat(watcherName, "_");
15482 strcat(watcherName, propID->string);
15485 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
15487 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)));
15488 ProcessClassFunctionBody(func, propWatch->compound);
15489 propWatch->compound = (((void *)0));
15490 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
15491 FreeClassFunction(func);
15492 curExternal = createdExternal;
15493 ProcessFunction(createdExternal->__anon1.function);
15494 if(propWatch->deleteWatch)
15496 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15498 ListAdd(args, CopyExpression(object));
15499 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15500 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
15501 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
15505 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
15506 struct Identifier * propID;
15508 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15510 char propName[1024];
15511 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15515 char getName[1024], setName[1024];
15516 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15518 DeclareProperty(createdExternal, prop, setName, getName);
15519 strcpy(propName, "__ecereProp_");
15520 FullClassNameCat(propName, prop->_class->fullName, 0);
15521 strcat(propName, "_");
15522 FullClassNameCat(propName, prop->name, 1);
15523 ListAdd(args, CopyExpression(object));
15524 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15525 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15526 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
15527 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
15528 __ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
15531 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15536 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
15538 curExternal = external;
15539 curContext = context;
15541 FreeExpression(watcher);
15543 FreeExpression(object);
15544 FreeList(watches, (void *)(FreePropertyWatch));
15547 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15551 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15553 ProcessStatement(propWatch->compound);
15560 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15561 struct Expression * object = stmt->__anon1._watch.object;
15562 struct __ecereNameSpace__ecere__com__Class * _class;
15565 ProcessExpressionType(object);
15568 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
15571 struct Identifier * propID;
15574 stmt->__anon1.expressions = MkList();
15575 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
15577 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
15584 for(propID = (*watches).first; propID; propID = propID->next)
15586 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15590 CreateFireWatcher(prop, object, stmt);
15593 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15598 struct __ecereNameSpace__ecere__com__Property * prop;
15599 struct __ecereNameSpace__ecere__com__Class * base;
15601 for(base = _class; base; base = base->base)
15603 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
15605 if(prop->isProperty && prop->isWatchable)
15607 CreateFireWatcher(prop, object, stmt);
15613 FreeExpression(object);
15614 FreeList(watches, (void *)(FreeIdentifier));
15617 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15623 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15624 struct Expression * object = stmt->__anon1._watch.object;
15625 struct Expression * watcher = stmt->__anon1._watch.watcher;
15626 struct __ecereNameSpace__ecere__com__Class * _class;
15629 ProcessExpressionType(object);
15631 ProcessExpressionType(watcher);
15634 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
15635 if(watcher || thisClass)
15639 struct Identifier * propID;
15642 stmt->__anon1.expressions = MkList();
15645 struct __ecereNameSpace__ecere__sys__OldList * args;
15648 ListAdd(args, CopyExpression(object));
15649 ListAdd(args, MkExpConstant("0"));
15650 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15651 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15655 for(propID = (*watches).first; propID; propID = propID->next)
15657 char propName[1024];
15658 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15662 char getName[1024], setName[1024];
15663 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15665 DeclareProperty(curExternal, prop, setName, getName);
15666 strcpy(propName, "__ecereProp_");
15667 FullClassNameCat(propName, prop->_class->fullName, 0);
15668 strcat(propName, "_");
15669 FullClassNameCat(propName, prop->name, 1);
15670 ListAdd(args, CopyExpression(object));
15671 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15672 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15673 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15676 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15680 FreeExpression(object);
15682 FreeExpression(watcher);
15683 FreeList(watches, (void *)(FreeIdentifier));
15686 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15689 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15696 void ComputeDataTypes()
15698 struct External * external;
15700 currentClass = (((void *)0));
15701 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
15702 DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
15703 DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
15704 DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
15705 DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
15706 DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
15707 DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
15708 DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
15709 DeclareFunctionUtil((((void *)0)), "eSystem_New");
15710 DeclareFunctionUtil((((void *)0)), "eSystem_New0");
15711 DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
15712 DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
15713 DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
15714 DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
15715 DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
15716 DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
15717 DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
15718 DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
15719 DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
15720 DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
15721 DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
15723 for(external = (*ast).first; external; external = external->next)
15725 afterExternal = curExternal = external;
15726 if(external->type == 0)
15730 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15731 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15733 currentClass = external->__anon1.function->_class;
15734 ProcessFunction(external->__anon1.function);
15736 else if(external->type == 1)
15738 if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
15740 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15741 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15743 currentClass = (((void *)0));
15744 if(external->__anon1.declaration)
15745 ProcessDeclaration(external->__anon1.declaration, 1);
15747 else if(external->type == 2)
15749 struct ClassDefinition * _class = external->__anon1._class;
15751 currentClass = external->symbol->__anon1.registered;
15754 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15755 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15757 if(_class->definitions)
15759 ProcessClass(_class->definitions, _class->symbol);
15763 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
15764 ((external ? __extension__ ({
15765 void * __ecerePtrToDelete = (external);
15767 __ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
15768 }) : 0), external = 0);
15771 else if(external->type == 4)
15773 thisNameSpace = external->__anon1.id->string;
15776 currentClass = (((void *)0));
15777 thisNameSpace = (((void *)0));
15778 curExternal = (((void *)0));
15781 void ProcessExpressionType(struct Expression * exp)
15783 unsigned int unresolved = 0;
15784 struct Location oldyylloc = yylloc;
15785 unsigned int notByReference = 0;
15787 if(!exp || exp->expType)
15794 struct Identifier * id = exp->__anon1.__anon1.identifier;
15796 if(!id || !topContext)
15798 if(id->_class && id->_class->__anon1.__anon1.name)
15800 id->classSym = id->_class->__anon1.__anon1.symbol;
15802 if(!strcmp(id->string, "__runtimePlatform"))
15804 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
15807 else if(strstr(id->string, "__ecereClass") == id->string)
15809 exp->expType = ProcessTypeString("ecere::com::Class", 1);
15812 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
15814 ReplaceClassMembers(exp, thisClass);
15817 ProcessExpressionType(exp);
15820 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
15825 struct Symbol * symbol = (((void *)0));
15826 unsigned int findInGlobal = 0;
15828 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)
15831 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15834 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
15840 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
15843 ProcessExpressionType(exp);
15847 else if(currentClass && !id->_class)
15849 if(ResolveIdWithClass(exp, currentClass, 1))
15852 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15856 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15859 struct Type * type = symbol->type;
15860 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
15862 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
15864 struct Context * context = SetupTemplatesContext(_class);
15866 type = ReplaceThisClassType(_class);
15867 FinishTemplatesContext(context);
15869 type->refCount = 0;
15871 FreeSpecifier(id->_class);
15872 id->_class = (((void *)0));
15873 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15874 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
15875 id->classSym = (((void *)0));
15876 exp->expType = type;
15879 if(type && (type->kind == 15))
15880 exp->isConstant = 1;
15881 if(symbol->isParam || !strcmp(id->string, "this"))
15883 if(_class && _class->type == 1 && !type->declaredWithStruct)
15884 exp->byReference = 1;
15886 if(symbol->isIterator)
15888 if(symbol->isIterator == 3)
15891 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
15892 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
15893 exp->expType = (((void *)0));
15894 ProcessExpressionType(exp);
15896 else if(symbol->isIterator != 4)
15899 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
15900 exp->__anon1.member.exp->expType = exp->expType;
15901 exp->__anon1.member.member = MkIdentifier("data");
15902 exp->expType = (((void *)0));
15903 ProcessExpressionType(exp);
15910 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
15912 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15916 strcpy(name, thisNameSpace);
15917 strcat(name, "::");
15918 strcat(name, id->string);
15919 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
15922 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
15927 for(c = 0; c < definedExpStackPos; c++)
15928 if(definedExpStack[c] == definedExp)
15930 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
15932 struct Location backupYylloc = yylloc;
15933 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
15935 definedExpStack[definedExpStackPos++] = definedExp;
15936 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
15937 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
15938 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15940 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15941 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
15942 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
15943 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15945 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15946 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
15948 parsedExpression = (((void *)0));
15950 expression_yyparse();
15951 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
15953 fileInput = backInput;
15954 yylloc = backupYylloc;
15955 if(parsedExpression)
15957 FreeIdentifier(id);
15959 exp->__anon1.list = MkListOne(parsedExpression);
15960 ApplyLocation(parsedExpression, &yylloc);
15961 ProcessExpressionType(exp);
15962 definedExpStackPos--;
15965 definedExpStackPos--;
15971 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
15977 struct GlobalData * data = (((void *)0));
15979 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15983 strcpy(name, thisNameSpace);
15984 strcat(name, "::");
15985 strcat(name, id->string);
15986 data = FindGlobalData(name);
15989 data = FindGlobalData(id->string);
15992 DeclareGlobalData(curExternal, data);
15993 exp->expType = data->dataType;
15995 data->dataType->refCount++;
15996 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15997 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
15998 FreeSpecifier(id->_class);
15999 id->_class = (((void *)0));
16004 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
16006 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16010 strcpy(name, thisNameSpace);
16011 strcat(name, "::");
16012 strcat(name, id->string);
16013 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
16016 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
16021 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16022 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
16024 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
16025 strcpy(name, "__ecereFunction_");
16026 FullClassNameCat(name, id->string, 0);
16027 if(DeclareFunction(curExternal, function, name))
16029 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16030 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
16032 exp->expType = function->dataType;
16033 if(function->dataType)
16034 function->dataType->refCount++;
16035 FreeSpecifier(id->_class);
16036 id->_class = (((void *)0));
16048 if(!exp->__anon1.instance->_class)
16050 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
16052 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
16055 ProcessInstantiationType(exp->__anon1.instance);
16056 exp->isConstant = exp->__anon1.instance->isConstant;
16057 if(exp->__anon1.instance->_class)
16059 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
16067 char * constant = exp->__anon1.__anon1.constant;
16068 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
16070 exp->expType = type;
16071 if(constant[0] == '\'')
16073 if((int)((unsigned char *)constant)[1] > 127)
16076 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
16080 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
16081 exp->__anon1.__anon1.constant = PrintUInt(ch);
16083 type->__anon1._class = FindClass("unichar");
16084 type->isSigned = 0;
16089 type->isSigned = 1;
16094 char * dot = strchr(constant, '.');
16095 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
16100 exponent = strchr(constant, 'p');
16102 exponent = strchr(constant, 'P');
16106 exponent = strchr(constant, 'e');
16108 exponent = strchr(constant, 'E');
16110 if(dot || exponent)
16112 if(strchr(constant, 'f') || strchr(constant, 'F'))
16116 type->isSigned = 1;
16120 unsigned int isSigned = constant[0] == '-';
16121 char * endP = (((void *)0));
16122 long long i64 = strtoll(constant, &endP, 0);
16123 uint64 ui64 = strtoull(constant, &endP, 0);
16124 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16125 unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16129 if(i64 < (((int)0x80000000)))
16134 if(ui64 > (((int)0x7fffffff)))
16136 if(ui64 > (0xffffffff))
16139 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
16143 else if(constant[0] != '0' || !constant[1])
16148 type->kind = is64Bit ? 4 : 3;
16149 type->isSigned = isSigned;
16152 exp->isConstant = 1;
16153 if(exp->destType && exp->destType->kind == 7)
16155 else if(exp->destType && exp->destType->kind == 6)
16157 else if(exp->destType && exp->destType->kind == 4)
16164 exp->isConstant = 1;
16165 exp->expType = __extension__ ({
16166 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16168 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
16169 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16171 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
16172 }), __ecereInstance2;
16178 ProcessExpressionType(exp->__anon1._new.size);
16179 exp->expType = __extension__ ({
16180 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16182 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
16184 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16188 ProcessExpressionType(exp->__anon1._renew.size);
16189 ProcessExpressionType(exp->__anon1._renew.exp);
16190 exp->expType = __extension__ ({
16191 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16193 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
16195 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16199 unsigned int assign = 0, boolResult = 0, boolOps = 0;
16200 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
16201 unsigned int useDestType = 0, useSideType = 0;
16202 struct Location oldyylloc = yylloc;
16203 unsigned int useSideUnit = 0;
16204 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
16205 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
16207 switch(exp->__anon1.op.op)
16259 if(exp->__anon1.op.exp1)
16266 if(exp->__anon1.op.op == '&')
16268 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
16270 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
16271 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
16273 if(symbol && symbol->isIterator == 2)
16276 exp->__anon1.member.exp = exp->__anon1.op.exp2;
16277 exp->__anon1.member.member = MkIdentifier("key");
16278 exp->expType = (((void *)0));
16279 exp->__anon1.op.exp2->expType = symbol->type;
16280 symbol->type->refCount++;
16281 ProcessExpressionType(exp);
16287 if(exp->__anon1.op.exp1)
16289 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
16291 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
16293 if(exp->__anon1.op.exp1->destType)
16294 FreeType(exp->__anon1.op.exp1->destType);
16295 exp->__anon1.op.exp1->destType = exp->destType;
16296 exp->__anon1.op.exp1->opDestType = 1;
16298 exp->destType->refCount++;
16302 if(exp->__anon1.op.exp1->destType)
16303 FreeType(exp->__anon1.op.exp1->destType);
16304 exp->__anon1.op.exp1->destType = dummy;
16307 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16308 exp->__anon1.op.exp1->destType->count++;
16309 ProcessExpressionType(exp->__anon1.op.exp1);
16310 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16311 exp->__anon1.op.exp1->destType->count--;
16312 exp->__anon1.op.exp1->opDestType = 0;
16313 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)
16315 exp->__anon1.op.exp2 = MkExpConstant("1");
16316 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
16319 if(exp->__anon1.op.exp1->destType == dummy)
16322 exp->__anon1.op.exp1->destType = (((void *)0));
16324 if(exp->__anon1.op.exp2)
16326 if(!assign && exp->__anon1.op.exp1->expType && (exp->__anon1.op.exp1->expType->kind == 1 || exp->__anon1.op.exp1->expType->kind == 2))
16328 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);
16330 FreeType(exp->__anon1.op.exp1->expType);
16331 exp->__anon1.op.exp1->expType = type;
16334 type1 = exp->__anon1.op.exp1->expType;
16336 if(exp->__anon1.op.exp2)
16338 char expString[10240];
16340 expString[0] = '\0';
16341 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
16343 if(exp->__anon1.op.exp1)
16345 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
16346 if(exp->__anon1.op.exp1->expType)
16347 exp->__anon1.op.exp1->expType->refCount++;
16351 exp->__anon1.op.exp2->destType = exp->destType;
16352 if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
16353 exp->__anon1.op.exp2->opDestType = 1;
16355 exp->destType->refCount++;
16359 exp->expType = type1;
16364 PrintExpression(exp->__anon1.op.exp2, expString);
16365 if(type1 && type1->kind == 13)
16367 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)
16368 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
16369 else if(exp->__anon1.op.op == '=')
16371 if(exp->__anon1.op.exp2->destType)
16372 FreeType(exp->__anon1.op.exp2->destType);
16373 exp->__anon1.op.exp2->destType = type1;
16380 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)
16384 if(exp->__anon1.op.exp2->destType)
16385 FreeType(exp->__anon1.op.exp2->destType);
16386 exp->__anon1.op.exp2->destType = type1;
16393 exp->expType = type1;
16395 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
16397 if(exp->__anon1.op.exp2->destType)
16398 FreeType(exp->__anon1.op.exp2->destType);
16399 exp->__anon1.op.exp2->destType = exp->destType;
16400 if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
16401 exp->__anon1.op.exp2->opDestType = 1;
16403 exp->destType->refCount++;
16407 if(exp->__anon1.op.exp2->destType)
16408 FreeType(exp->__anon1.op.exp2->destType);
16409 exp->__anon1.op.exp2->destType = dummy;
16412 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))
16414 FreeType(exp->__anon1.op.exp2->destType);
16415 exp->__anon1.op.exp2->destType = type1;
16418 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16419 exp->__anon1.op.exp2->destType->count++;
16420 if(exp->__anon1.op.op == SIZEOF)
16422 struct Expression * e = exp->__anon1.op.exp2;
16424 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
16426 if(e->type == 5 || e->type == 32 || e->type == 23)
16429 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
16431 e = (*e->__anon1.list).last;
16434 if(e->type == 11 && e->__anon1.cast.exp)
16435 e->__anon1.cast.exp->needCast = 1;
16437 ProcessExpressionType(exp->__anon1.op.exp2);
16438 exp->__anon1.op.exp2->opDestType = 0;
16439 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16440 exp->__anon1.op.exp2->destType->count--;
16441 if(!assign && (exp->__anon1.op.exp1 || exp->__anon1.op.op == '~'))
16443 if(exp->__anon1.op.exp2->expType && (exp->__anon1.op.exp2->expType->kind == 1 || exp->__anon1.op.exp2->expType->kind == 2))
16445 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);
16447 FreeType(exp->__anon1.op.exp2->expType);
16448 exp->__anon1.op.exp2->expType = type;
16451 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
16453 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)
16455 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
16456 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16458 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)))
16460 if(exp->__anon1.op.op == ADD_ASSIGN)
16461 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16463 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))
16465 if(exp->__anon1.op.op == ADD_ASSIGN)
16466 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16468 else if(inCompiler)
16470 char type1String[1024];
16471 char type2String[1024];
16473 type1String[0] = '\0';
16474 type2String[0] = '\0';
16475 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
16476 PrintType(type1, type2String, 0, 1);
16477 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16478 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
16481 if(exp->__anon1.op.exp2->destType == dummy)
16484 exp->__anon1.op.exp2->destType = (((void *)0));
16486 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
16488 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16489 type2->refCount = 1;
16490 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
16491 type2->isSigned = 1;
16493 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))
16495 type2 = __extension__ ({
16496 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16498 __ecereInstance1->kind = 3, __ecereInstance1;
16500 type2->refCount = 1;
16501 type2->isSigned = 1;
16505 type2 = exp->__anon1.op.exp2->expType;
16511 if(exp->__anon1.op.op == SIZEOF)
16513 exp->expType = __extension__ ({
16514 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16516 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16518 exp->isConstant = 1;
16520 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
16522 exp->expType = Dereference(type2);
16523 if(type2 && type2->kind == 8)
16524 notByReference = 1;
16526 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
16527 exp->expType = Reference(type2);
16528 else if(exp->__anon1.op.op == LEFT_OP || exp->__anon1.op.op == RIGHT_OP)
16530 if(exp->__anon1.op.exp1->expType)
16532 exp->expType = exp->__anon1.op.exp1->expType;
16533 exp->expType->refCount++;
16540 if(exp->__anon1.op.exp1)
16542 if(exp->__anon1.op.exp1->destType)
16543 FreeType(exp->__anon1.op.exp1->destType);
16544 exp->__anon1.op.exp1->destType = MkClassType("bool");
16545 exp->__anon1.op.exp1->destType->truth = 1;
16546 if(!exp->__anon1.op.exp1->expType)
16547 ProcessExpressionType(exp->__anon1.op.exp1);
16549 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16550 FreeType(exp->__anon1.op.exp1->expType);
16551 exp->__anon1.op.exp1->expType = MkClassType("bool");
16552 exp->__anon1.op.exp1->expType->truth = 1;
16554 if(exp->__anon1.op.exp2)
16556 if(exp->__anon1.op.exp2->destType)
16557 FreeType(exp->__anon1.op.exp2->destType);
16558 exp->__anon1.op.exp2->destType = MkClassType("bool");
16559 exp->__anon1.op.exp2->destType->truth = 1;
16560 if(!exp->__anon1.op.exp2->expType)
16561 ProcessExpressionType(exp->__anon1.op.exp2);
16563 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16564 FreeType(exp->__anon1.op.exp2->expType);
16565 exp->__anon1.op.exp2->expType = MkClassType("bool");
16566 exp->__anon1.op.exp2->expType->truth = 1;
16569 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")))))
16571 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"))))
16573 if(exp->__anon1.op.op == '-' && ((type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4) || (type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)))
16575 struct Type * intType;
16577 if(!type1->__anon1._class->__anon1.registered->dataType)
16578 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
16579 if(!type2->__anon1._class->__anon1.registered->dataType)
16580 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
16581 intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
16582 if(exp->__anon1.op.exp1->destType)
16583 FreeType(exp->__anon1.op.exp1->destType);
16584 if(exp->__anon1.op.exp2->destType)
16585 FreeType(exp->__anon1.op.exp2->destType);
16586 exp->__anon1.op.exp1->destType = intType;
16587 exp->__anon1.op.exp2->destType = intType;
16588 intType->refCount++;
16592 if(exp->__anon1.op.exp2->destType)
16593 FreeType(exp->__anon1.op.exp2->destType);
16594 exp->__anon1.op.exp2->destType = type1;
16596 if(exp->__anon1.op.exp1->destType)
16597 FreeType(exp->__anon1.op.exp1->destType);
16598 exp->__anon1.op.exp1->destType = type2;
16601 if(!boolResult && type1->kind == 8 && (!exp->destType || exp->destType->kind != 8) && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1->__anon1._class->__anon1.registered != type2->__anon1._class->__anon1.registered)
16602 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);
16603 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
16605 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16609 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16611 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
16612 ProcessExpressionType(exp->__anon1.op.exp1);
16613 if(type2->kind != 13)
16615 ProcessExpressionType(classExp);
16616 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
16617 if(!exp->__anon1.op.exp2->expType)
16621 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
16624 ProcessExpressionType(exp->__anon1.op.exp2);
16628 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)))
16630 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
16631 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16632 exp->expType = type1;
16636 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)))
16638 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
16639 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16640 exp->expType = type2;
16644 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))
16646 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
16650 unsigned int success = 0;
16652 if(type1->kind == 13 && type2->kind == 13)
16654 if(exp->__anon1.op.op == '+')
16655 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16656 else if(exp->__anon1.op.op == '-')
16658 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
16660 exp->expType = __extension__ ({
16661 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16663 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
16666 if(type1->__anon1.type->kind == 20)
16668 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16672 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16674 ProcessExpressionType(classExp);
16676 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"))));
16677 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
16685 if(!success && exp->__anon1.op.exp1->type == 2)
16687 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16690 FreeType(exp->expType);
16691 exp->expType = exp->__anon1.op.exp1->destType;
16692 if(exp->__anon1.op.exp1->destType)
16693 exp->__anon1.op.exp1->destType->refCount++;
16696 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16699 FreeType(exp->expType);
16700 exp->expType = exp->__anon1.op.exp2->destType;
16701 if(exp->__anon1.op.exp2->destType)
16702 exp->__anon1.op.exp2->destType->refCount++;
16708 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16711 FreeType(exp->expType);
16712 exp->expType = exp->__anon1.op.exp2->destType;
16713 if(exp->__anon1.op.exp2->destType)
16714 exp->__anon1.op.exp2->destType->refCount++;
16717 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16720 FreeType(exp->expType);
16721 exp->expType = exp->__anon1.op.exp1->destType;
16722 if(exp->__anon1.op.exp1->destType)
16723 exp->__anon1.op.exp1->destType->refCount++;
16729 char expString1[10240];
16730 char expString2[10240];
16734 expString1[0] = '\0';
16735 expString2[0] = '\0';
16740 PrintExpression(exp->__anon1.op.exp1, expString1);
16741 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16742 PrintExpression(exp->__anon1.op.exp2, expString2);
16743 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16744 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
16745 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
16747 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
16751 else if(!boolResult && (!useSideUnit) && type2 && type1 && type2->kind == 8 && type1->kind != 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
16753 if(exp->__anon1.op.exp1->destType)
16754 FreeType(exp->__anon1.op.exp1->destType);
16755 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16756 if(type2->__anon1._class->__anon1.registered->dataType)
16757 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16758 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16759 exp->expType = type2;
16763 else if(!boolResult && (!useSideUnit) && type1 && type2 && type1->kind == 8 && type2->kind != 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
16765 if(exp->__anon1.op.exp2->destType)
16766 FreeType(exp->__anon1.op.exp2->destType);
16767 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16768 if(type1->__anon1._class->__anon1.registered->dataType)
16769 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16770 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16771 exp->expType = type1;
16777 unsigned int valid = 0;
16779 if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
16781 if(exp->__anon1.op.exp2->destType)
16782 FreeType(exp->__anon1.op.exp2->destType);
16783 if(!type1->__anon1._class->__anon1.registered->dataType)
16784 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
16785 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16786 exp->__anon1.op.exp2->destType->refCount++;
16787 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16790 type2 = exp->__anon1.op.exp2->destType;
16793 exp->expType = type2;
16796 if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
16798 if(exp->__anon1.op.exp1->destType)
16799 FreeType(exp->__anon1.op.exp1->destType);
16800 if(!type2->__anon1._class->__anon1.registered->dataType)
16801 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
16802 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16803 exp->__anon1.op.exp1->destType->refCount++;
16804 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16805 type1 = exp->__anon1.op.exp1->destType;
16806 exp->expType = type1;
16809 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
16811 unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
16812 unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
16814 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
16816 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16818 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16821 FreeType(exp->expType);
16822 exp->expType = exp->__anon1.op.exp2->expType;
16823 if(exp->__anon1.op.exp2->expType)
16824 exp->__anon1.op.exp2->expType->refCount++;
16828 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16830 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16833 FreeType(exp->expType);
16834 exp->expType = exp->__anon1.op.exp1->expType;
16835 if(exp->__anon1.op.exp1->expType)
16836 exp->__anon1.op.exp1->expType->refCount++;
16843 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16845 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16848 FreeType(exp->expType);
16849 exp->expType = exp->__anon1.op.exp1->expType;
16850 if(exp->__anon1.op.exp1->expType)
16851 exp->__anon1.op.exp1->expType->refCount++;
16855 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16857 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16860 FreeType(exp->expType);
16861 exp->expType = exp->__anon1.op.exp2->expType;
16862 if(exp->__anon1.op.exp2->expType)
16863 exp->__anon1.op.exp2->expType->refCount++;
16871 if(type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && (type1->kind != 8 || !type1->__anon1._class || !type1->__anon1._class->__anon1.registered || type1->__anon1._class->__anon1.registered->type != 3))
16873 if(exp->__anon1.op.exp1->destType)
16874 FreeType(exp->__anon1.op.exp1->destType);
16875 exp->__anon1.op.exp1->destType = type2;
16877 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16880 FreeType(exp->expType);
16881 exp->expType = exp->__anon1.op.exp1->destType;
16882 if(exp->__anon1.op.exp1->destType)
16883 exp->__anon1.op.exp1->destType->refCount++;
16888 if(exp->__anon1.op.exp2->destType)
16889 FreeType(exp->__anon1.op.exp2->destType);
16890 exp->__anon1.op.exp2->destType = type1;
16892 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16895 FreeType(exp->expType);
16896 exp->expType = exp->__anon1.op.exp2->destType;
16897 if(exp->__anon1.op.exp2->destType)
16898 exp->__anon1.op.exp2->destType->refCount++;
16900 else if(type1 && type2)
16902 char expString1[10240];
16903 char expString2[10240];
16904 char type1String[1024];
16905 char type2String[1024];
16907 expString1[0] = '\0';
16908 expString2[0] = '\0';
16909 type1String[0] = '\0';
16910 type2String[0] = '\0';
16913 PrintExpression(exp->__anon1.op.exp1, expString1);
16914 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16915 PrintExpression(exp->__anon1.op.exp2, expString2);
16916 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16917 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
16918 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
16920 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
16921 if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
16923 exp->expType = exp->__anon1.op.exp1->expType;
16924 if(exp->__anon1.op.exp1->expType)
16925 exp->__anon1.op.exp1->expType->refCount++;
16927 else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
16929 exp->expType = exp->__anon1.op.exp2->expType;
16930 if(exp->__anon1.op.exp2->expType)
16931 exp->__anon1.op.exp2->expType->refCount++;
16939 if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
16941 struct Type * oldType = exp->__anon1.op.exp1->expType;
16943 exp->__anon1.op.exp1->expType = (((void *)0));
16944 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16947 exp->__anon1.op.exp1->expType = oldType;
16949 if(exp->__anon1.op.exp1->destType)
16950 FreeType(exp->__anon1.op.exp1->destType);
16951 exp->__anon1.op.exp1->destType = type2;
16953 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16956 FreeType(exp->expType);
16957 exp->expType = exp->__anon1.op.exp1->destType;
16958 if(exp->__anon1.op.exp1->destType)
16959 exp->__anon1.op.exp1->destType->refCount++;
16963 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
16965 if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
16967 if(exp->__anon1.op.exp1->destType)
16968 FreeType(exp->__anon1.op.exp1->destType);
16969 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16970 if(type2->__anon1._class->__anon1.registered->dataType)
16971 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16972 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16974 if(exp->__anon1.op.op == '!')
16976 exp->expType = MkClassType("bool");
16977 exp->expType->truth = 1;
16981 exp->expType = type2;
16986 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
16988 if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
16990 if(exp->__anon1.op.exp2->destType)
16991 FreeType(exp->__anon1.op.exp2->destType);
16992 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16993 if(type1->__anon1._class->__anon1.registered->dataType)
16994 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16995 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16997 exp->expType = type1;
17003 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
17005 char expString[10000];
17007 expString[0] = '\0';
17010 PrintExpression(exp->__anon1.op.exp1, expString);
17011 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17014 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17016 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
17018 char expString[10240];
17020 expString[0] = '\0';
17023 PrintExpression(exp->__anon1.op.exp2, expString);
17024 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17027 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17031 FreeType(exp->expType);
17032 exp->expType = MkClassType("bool");
17033 exp->expType->truth = 1;
17035 if(exp->__anon1.op.op != SIZEOF)
17036 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
17037 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
17039 DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
17041 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
17042 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
17043 yylloc = oldyylloc;
17052 struct Expression * e;
17054 exp->isConstant = 1;
17055 for(e = (*exp->__anon1.list).first; e; e = e->next)
17059 FreeType(e->destType);
17060 e->opDestType = exp->opDestType;
17061 e->destType = exp->destType;
17064 exp->destType->refCount++;
17067 ProcessExpressionType(e);
17068 if(!exp->expType && !e->next)
17070 exp->expType = e->expType;
17072 e->expType->refCount++;
17075 exp->isConstant = 0;
17077 e = (*exp->__anon1.list).first;
17078 if(!e->next && e->type == 8)
17080 struct Expression * next = exp->next, * prev = exp->prev;
17082 FreeType(exp->expType);
17083 FreeType(exp->destType);
17084 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17088 ((e ? __extension__ ({
17089 void * __ecerePtrToDelete = (e);
17091 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
17093 ProcessExpressionType(exp);
17099 struct Expression * e;
17101 exp->isConstant = 1;
17102 ProcessExpressionType(exp->__anon1.index.exp);
17103 if(!exp->__anon1.index.exp->isConstant)
17104 exp->isConstant = 0;
17105 if(exp->__anon1.index.exp->expType)
17107 struct Type * source = exp->__anon1.index.exp->expType;
17109 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
17111 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
17112 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
17114 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
17116 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
17117 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
17119 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
17121 if(type->kind == 8)
17122 type->constant = 1;
17123 else if(type->kind == 13)
17125 struct Type * t = type;
17127 while(t->kind == 13)
17128 t = t->__anon1.type;
17131 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
17136 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
17138 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
17141 FreeType(e->destType);
17142 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
17144 ProcessExpressionType(e);
17149 exp->isConstant = 0;
17152 exp->expType = Dereference(exp->__anon1.index.exp->expType);
17154 DeclareType(curExternal, exp->expType, 1, 0);
17159 struct Expression * e;
17160 struct Type * functionType;
17161 struct Type * methodType = (((void *)0));
17167 PrintExpression(exp->__anon1.call.exp, name);
17168 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
17170 PrintExpression(exp->__anon1.call.exp, name);
17173 if(exp->__anon1.call.exp->type == 0)
17175 struct Expression * idExp = exp->__anon1.call.exp;
17176 struct Identifier * id = idExp->__anon1.__anon1.identifier;
17178 if(!strcmp(id->string, "__builtin_frame_address"))
17180 exp->expType = ProcessTypeString("void *", 1);
17181 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17182 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17185 else if(!strcmp(id->string, "__ENDIAN_PAD"))
17187 exp->expType = ProcessTypeString("int", 1);
17188 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17189 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17192 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
17194 struct Expression * a = (((void *)0));
17195 struct Expression * b = (((void *)0));
17196 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
17198 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
17200 a = (*exp->__anon1.call.arguments).first;
17201 b = (*exp->__anon1.call.arguments).last;
17205 else if((*exp->__anon1.call.arguments).count == 1)
17207 a = (*exp->__anon1.call.arguments).first;
17212 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
17213 idExp->__anon1.__anon1.identifier = (((void *)0));
17214 FreeExpContents(exp);
17215 ProcessExpressionType(a);
17217 ProcessExpressionType(b);
17219 exp->__anon1.list = MkList();
17220 if(a->expType && (!b || b->expType))
17222 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
17226 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17227 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
17228 struct Declaration * decl;
17229 char temp1[1024], temp2[1024];
17231 GetTypeSpecs(a->expType, specs);
17232 if(a && !a->isConstant && a->type != 0)
17234 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
17235 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
17236 tempExp1 = QMkExpId(temp1);
17237 tempExp1->expType = a->expType;
17239 a->expType->refCount++;
17240 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
17242 if(b && !b->isConstant && b->type != 0)
17244 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
17245 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
17246 tempExp2 = QMkExpId(temp2);
17247 tempExp2->expType = b->expType;
17249 b->expType->refCount++;
17250 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
17252 decl = MkDeclaration(specs, decls);
17253 if(!curCompound->__anon1.compound.declarations)
17254 curCompound->__anon1.compound.declarations = MkList();
17255 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
17259 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
17261 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
17263 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
17264 exp->expType = a->expType;
17266 a->expType->refCount++;
17268 else if(!strcmp(id->string, "Abs"))
17270 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
17271 exp->expType = a->expType;
17273 a->expType->refCount++;
17275 else if(!strcmp(id->string, "Sgn"))
17277 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"))))));
17278 exp->expType = ProcessTypeString("int", 0);
17280 FreeExpression(tempExp1);
17282 FreeExpression(tempExp2);
17283 FreeIdentifier(id);
17289 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
17291 if(!exp->__anon1.call.exp->destType)
17293 exp->__anon1.call.exp->destType = dummy;
17296 ProcessExpressionType(exp->__anon1.call.exp);
17297 if(exp->__anon1.call.exp->destType == dummy)
17300 exp->__anon1.call.exp->destType = (((void *)0));
17304 functionType = exp->__anon1.call.exp->expType;
17305 if(functionType && functionType->kind == 16)
17307 methodType = functionType;
17308 functionType = methodType->__anon1.__anon3.method->dataType;
17309 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
17311 char typeString[1024];
17313 typeString[0] = '\0';
17315 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
17317 functionType->__anon1.__anon2.thisClass = (((void *)0));
17318 PrintType(functionType, typeString, 1, 1);
17319 functionType->__anon1.__anon2.thisClass = back;
17321 if(strstr(typeString, "thisclass"))
17323 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17324 struct Declarator * decl;
17327 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17329 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17330 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))
17331 thisClassParams = 0;
17332 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17334 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
17336 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
17337 ProcessDeclarator(decl, 1);
17338 thisClass = backupThisClass;
17340 thisClassParams = 1;
17341 functionType = ProcessType(specs, decl);
17342 functionType->refCount = 0;
17343 FinishTemplatesContext(context);
17345 struct Type * p, * op;
17347 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)
17350 p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17353 if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
17355 functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17358 FreeList(specs, (void *)(FreeSpecifier));
17359 FreeDeclarator(decl);
17363 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
17365 struct Type * type = functionType->__anon1.type;
17367 if(!functionType->refCount)
17369 functionType->__anon1.type = (((void *)0));
17370 FreeType(functionType);
17372 functionType = type;
17374 if(functionType && functionType->kind != 11)
17376 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
17378 else if(functionType)
17380 unsigned int emptyParams = 0, noParams = 0;
17381 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
17382 struct Type * type = functionType->__anon1.__anon2.params.first;
17383 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
17385 struct Location oldyylloc = yylloc;
17389 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
17391 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
17394 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
17396 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)
17398 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
17401 e->destType = type;
17403 type = functionType->__anon1.__anon2.params.first;
17406 type->refCount = 0;
17408 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
17410 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
17411 type->byReference = functionType->byReference;
17412 type->typedByReference = functionType->typedByReference;
17415 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
17417 e->destType = type;
17419 type = functionType->__anon1.__anon2.params.first;
17422 type->refCount = 0;
17425 if(type && type->kind == 0)
17428 if(!type->refCount)
17430 type = (((void *)0));
17432 for(; e; e = e->next)
17434 if(!type && !emptyParams)
17437 if(methodType && methodType->__anon1.__anon3.methodClass)
17438 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);
17440 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);
17443 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
17445 struct Type * templatedType = (((void *)0));
17446 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
17447 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
17450 if(_class && _class->templateArgs)
17452 struct __ecereNameSpace__ecere__com__Class * sClass;
17454 for(sClass = _class; sClass; sClass = sClass->base)
17456 if(sClass->templateClass)
17457 sClass = sClass->templateClass;
17459 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
17461 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
17463 struct __ecereNameSpace__ecere__com__Class * nextClass;
17465 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17467 if(nextClass->templateClass)
17468 nextClass = nextClass->templateClass;
17469 id += nextClass->templateParams.count;
17479 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
17481 unsigned int constant = type->constant;
17482 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
17485 struct Context * context = SetupTemplatesContext(_class);
17487 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
17488 FinishTemplatesContext(context);
17490 if(templatedType->kind == 8 && constant)
17491 templatedType->constant = 1;
17492 else if(templatedType->kind == 13)
17494 struct Type * t = templatedType->__anon1.type;
17496 while(t->kind == 13)
17497 t = t->__anon1.type;
17499 t->constant = constant;
17501 e->destType = templatedType;
17504 templatedType->passAsTemplate = 1;
17509 e->destType = type;
17516 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
17518 e->destType = type->prev;
17519 e->destType->refCount++;
17523 e->destType = type;
17528 if(type && type->kind != 14)
17530 struct Type * next = type->next;
17532 if(!type->refCount)
17537 if(type && type->kind != 14)
17539 if(methodType && methodType->__anon1.__anon3.methodClass)
17540 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);
17542 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);
17544 yylloc = oldyylloc;
17545 if(type && !type->refCount)
17550 functionType = __extension__ ({
17551 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17553 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
17555 if(exp->__anon1.call.exp->type == 0)
17557 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
17561 struct Symbol * symbol;
17562 struct Location oldyylloc = yylloc;
17564 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
17565 if(strstr(string, "__builtin_") == string)
17569 functionType->__anon1.__anon2.returnType = exp->destType;
17570 exp->destType->refCount++;
17574 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
17575 symbol = __extension__ ({
17576 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
17578 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
17580 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
17581 if(strstr(symbol->string, "::"))
17582 globalContext->hasNameSpace = 1;
17583 yylloc = oldyylloc;
17586 else if(exp->__anon1.call.exp->type == 8)
17590 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
17591 if(!functionType->__anon1.__anon2.returnType)
17593 functionType->__anon1.__anon2.returnType = __extension__ ({
17594 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17596 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
17600 if(functionType && functionType->kind == 11)
17602 exp->expType = functionType->__anon1.__anon2.returnType;
17603 if(functionType->__anon1.__anon2.returnType)
17604 functionType->__anon1.__anon2.returnType->refCount++;
17605 if(!functionType->refCount)
17606 FreeType(functionType);
17608 if(exp->__anon1.call.arguments)
17610 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
17611 ProcessExpressionType(e);
17617 struct Type * type;
17618 struct Location oldyylloc = yylloc;
17619 unsigned int thisPtr;
17620 struct Expression * checkExp = exp->__anon1.member.exp;
17624 if(checkExp->type == 11)
17625 checkExp = checkExp->__anon1.cast.exp;
17626 else if(checkExp->type == 5)
17627 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
17631 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
17632 exp->thisPtr = thisPtr;
17633 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
17635 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
17637 ProcessExpressionType(exp->__anon1.member.exp);
17638 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)
17640 exp->isConstant = 0;
17643 exp->isConstant = exp->__anon1.member.exp->isConstant;
17644 type = exp->__anon1.member.exp->expType;
17646 if(type && (type->kind == 20))
17648 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
17649 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
17653 for(param = _class->templateParams.first; param; param = param->next)
17655 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
17659 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
17661 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
17665 struct Expression * expMember = exp->__anon1.member.exp;
17666 struct Declarator * decl;
17667 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17668 char thisClassTypeString[1024];
17670 FreeIdentifier(exp->__anon1.member.member);
17671 ProcessExpressionType(argExp);
17673 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
17677 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
17678 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
17681 strcpy(thisClassTypeString, _class->fullName);
17683 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
17684 exp->expType = ProcessType(specs, decl);
17685 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
17687 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
17688 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
17689 int paramCount = 0;
17690 int lastParam = -1;
17691 char templateString[1024];
17692 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
17694 sprintf(templateString, "%s<", expClass->templateClass->fullName);
17695 for(cClass = expClass; cClass; cClass = cClass->base)
17699 for(param = cClass->templateParams.first; param; param = param->next)
17702 struct __ecereNameSpace__ecere__com__Class * sClass;
17703 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
17705 for(sClass = cClass->base; sClass; sClass = sClass->base)
17706 id += sClass->templateParams.count;
17707 arg = expClass->templateArgs[id];
17708 for(sClass = _class; sClass; sClass = sClass->base)
17710 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
17712 struct __ecereNameSpace__ecere__com__Class * nextClass;
17714 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17715 p += nextClass->templateParams.count;
17716 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
17718 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
17720 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17722 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
17723 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
17730 char argument[256];
17732 argument[0] = '\0';
17733 switch(param->type)
17737 char expString[1024];
17738 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17739 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
17740 struct Expression * exp;
17741 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
17743 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
17744 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
17745 ProcessExpressionType(exp);
17746 ComputeExpression(exp);
17747 expString[0] = '\0';
17748 PrintExpression(exp, expString);
17749 strcat(argument, expString);
17750 FreeExpression(exp);
17755 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
17760 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17762 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
17763 strcat(argument, thisClassTypeString);
17765 strcat(argument, arg.__anon1.__anon1.dataTypeString);
17773 strcat(templateString, ", ");
17774 if(lastParam != p - 1)
17776 strcat(templateString, param->name);
17777 strcat(templateString, " = ");
17779 strcat(templateString, argument);
17788 int len = strlen(templateString);
17790 if(templateString[len - 1] == '>')
17791 templateString[len++] = ' ';
17792 templateString[len++] = '>';
17793 templateString[len++] = '\0';
17796 struct Context * context = SetupTemplatesContext(_class);
17798 FreeType(exp->expType);
17799 exp->expType = ProcessTypeString(templateString, 0);
17800 FinishTemplatesContext(context);
17803 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
17804 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
17806 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")))))))));
17809 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
17811 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
17814 if(type && (type->kind == 20))
17816 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)))
17818 struct Identifier * id = exp->__anon1.member.member;
17819 int typeKind = type->kind;
17820 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));
17822 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
17824 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
17829 if(typeKind == 3 || typeKind == 15)
17830 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
17833 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17835 _class = type->__anon1._class->__anon1.registered;
17837 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
17839 _class = FindClass("char *")->__anon1.registered;
17841 else if(type->kind == 13)
17843 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
17844 FreeType(exp->expType);
17845 exp->expType = ProcessTypeString("uintptr", 0);
17846 exp->byReference = 1;
17850 char string[1024] = "";
17851 struct Symbol * classSym;
17853 PrintTypeNoConst(type, string, 0, 1);
17854 classSym = FindClass(string);
17856 _class = classSym->__anon1.registered;
17862 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
17863 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
17864 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
17865 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
17866 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
17868 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
17869 exp->__anon1.member.memberType = 1;
17870 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
17871 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
17874 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
17876 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
17877 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
17879 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17881 member = (((void *)0));
17883 if(!member && !prop)
17884 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17885 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
17886 exp->__anon1.member.thisPtr = 1;
17890 unsigned int useMemberForNonConst = 0;
17894 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
17895 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);
17896 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
17897 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
17899 if((!prop || useMemberForNonConst) && !member)
17901 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
17904 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17905 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);
17906 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
17907 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
17912 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
17913 prop = (((void *)0));
17915 member = (((void *)0));
17919 if(!prop && !member && !method)
17920 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
17921 if(!prop && !member && !method)
17925 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
17928 exp->__anon1.member.memberType = 5;
17929 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
17933 char structName[1024];
17934 struct Identifier * id = exp->__anon1.member.member;
17935 struct Expression * classExp = exp->__anon1.member.exp;
17938 FreeType(classExp->expType);
17939 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
17940 strcpy(structName, "__ecereClassData_");
17941 FullClassNameCat(structName, type->__anon1._class->string, 0);
17943 exp->__anon1.member.member = id;
17944 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"))))))));
17946 ProcessExpressionType(exp);
17952 struct Symbol * classSym = FindClass(id->string);
17956 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
17959 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
17963 if(exp->__anon1.member.exp->destType)
17964 FreeType(exp->__anon1.member.exp->destType);
17966 if(method && !method->_class->symbol)
17967 method->_class->symbol = FindClass(method->_class->fullName);
17968 if(prop && !prop->_class->symbol)
17969 prop->_class->symbol = FindClass(prop->_class->fullName);
17970 exp->__anon1.member.exp->destType = __extension__ ({
17971 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17973 __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;
17978 exp->__anon1.member.memberType = 1;
17979 if(!prop->dataType)
17980 ProcessPropertyType(prop);
17981 exp->expType = prop->dataType;
17982 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
17984 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17986 CopyTypeInto(type, exp->expType);
17987 type->refCount = 1;
17988 type->constant = 1;
17989 exp->expType = type;
17991 else if(prop->dataType)
17992 prop->dataType->refCount++;
17996 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
17998 FreeExpContents(exp);
18000 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18001 ProcessExpressionType(exp);
18004 exp->__anon1.member.memberType = 3;
18005 DeclareStruct(curExternal, _class->fullName, 0, 1);
18006 if(member->_class != _class)
18007 DeclareStruct(curExternal, member->_class->fullName, 0, 1);
18008 if(!member->dataType)
18010 struct Context * context = SetupTemplatesContext(_class);
18012 member->dataType = ProcessTypeString(member->dataTypeString, 0);
18013 FinishTemplatesContext(context);
18015 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)
18016 member->dataType->bitMemberSize = ((struct __ecereNameSpace__ecere__com__BitMember *)member)->size;
18017 exp->expType = member->dataType;
18018 if(member->dataType)
18019 member->dataType->refCount++;
18021 else if(revConvert)
18023 exp->__anon1.member.memberType = 4;
18024 exp->expType = MkClassType(revConvert->_class->fullName);
18029 exp->__anon1.member.memberType = 2;
18031 if(!method->dataType)
18032 ProcessMethodType(method);
18033 exp->expType = __extension__ ({
18034 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18036 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
18038 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
18039 exp->expType->__anon1.__anon3.usedClass = _class;
18041 else if(!classProp)
18043 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18045 FreeExpContents(exp);
18047 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18048 FreeType(exp->expType);
18049 exp->expType = MkClassType("ecere::com::Class");
18052 yylloc = exp->__anon1.member.member->loc;
18053 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
18055 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
18057 if(_class && exp->expType)
18059 struct __ecereNameSpace__ecere__com__Class * tClass;
18061 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
18062 while(tClass && !tClass->templateClass)
18063 tClass = tClass->base;
18064 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
18067 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18068 struct __ecereNameSpace__ecere__com__Class * sClass;
18070 for(sClass = tClass; sClass; sClass = sClass->base)
18073 if(sClass->templateClass)
18074 sClass = sClass->templateClass;
18075 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18077 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
18079 for(sClass = sClass->base; sClass; sClass = sClass->base)
18080 id += sClass->templateParams.count;
18088 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
18090 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18091 struct Context * context = SetupTemplatesContext(tClass);
18092 unsigned int constant = exp->expType->constant;
18093 unsigned int passAsTemplate = 0;
18094 struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
18095 struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
18097 if(t && t->kind == 8 && t->__anon1._class)
18098 thisClassFrom = t->__anon1._class->__anon1.registered;
18100 thisClassFrom = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "class");
18102 passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
18103 FreeType(exp->expType);
18104 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18105 exp->expType->thisClassFrom = thisClassFrom;
18106 if(exp->expType->kind == 8 && constant)
18107 exp->expType->constant = 1;
18108 else if(exp->expType->kind == 13)
18110 struct Type * t = exp->expType->__anon1.type;
18112 while(t->kind == 13)
18113 t = t->__anon1.type;
18115 t->constant = constant;
18119 if(exp->expType->kind == 21)
18121 FreeType(exp->expType);
18122 exp->expType = ReplaceThisClassType(_class);
18125 exp->expType->passAsTemplate = 1;
18128 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18129 if(exp->destType->kind == 8 && constant)
18130 exp->destType->constant = 1;
18131 else if(exp->destType->kind == 13)
18133 struct Type * t = exp->destType->__anon1.type;
18135 while(t->kind == 13)
18136 t = t->__anon1.type;
18138 t->constant = constant;
18140 if(exp->destType->kind == 21)
18142 FreeType(exp->destType);
18143 exp->destType = ReplaceThisClassType(_class);
18147 FinishTemplatesContext(context);
18150 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)
18153 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18154 struct __ecereNameSpace__ecere__com__Class * sClass;
18156 for(sClass = tClass; sClass; sClass = sClass->base)
18159 if(sClass->templateClass)
18160 sClass = sClass->templateClass;
18161 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18163 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
18165 for(sClass = sClass->base; sClass; sClass = sClass->base)
18166 id += sClass->templateParams.count;
18176 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18177 struct Context * context = SetupTemplatesContext(tClass);
18178 struct Type * basicType;
18180 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18183 if(basicType->kind == 21)
18185 FreeType(basicType);
18186 basicType = ReplaceThisClassType(_class);
18188 FreeType(exp->expType);
18189 exp->expType = __extension__ ({
18190 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18192 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
18196 exp->destType = exp->expType;
18197 exp->destType->refCount++;
18200 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18201 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18202 struct Declarator * decl;
18204 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18207 exp->destType->refCount++;
18209 exp->expType->refCount++;
18211 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
18212 exp->__anon1.cast.exp = newExp;
18215 FinishTemplatesContext(context);
18218 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
18220 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
18224 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
18226 int paramCount = 0;
18227 int lastParam = -1;
18228 char templateString[1024];
18229 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
18231 sprintf(templateString, "%s<", expClass->templateClass->fullName);
18232 while(cClass != expClass)
18234 struct __ecereNameSpace__ecere__com__Class * sClass;
18236 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
18239 for(param = cClass->templateParams.first; param; param = param->next)
18241 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
18243 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
18244 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
18246 while(cClassCur != tClass && !paramCur)
18248 struct __ecereNameSpace__ecere__com__Class * sClassCur;
18250 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
18252 cClassCur = sClassCur;
18253 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
18255 if(!strcmp(paramCur->name, param->name))
18262 if(paramCur && paramCur->type == 0)
18263 arg = tClass->templateArgs[cp];
18265 arg = expClass->templateArgs[p];
18267 char argument[256];
18269 argument[0] = '\0';
18270 switch(param->type)
18274 char expString[1024];
18275 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18276 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
18277 struct Expression * exp;
18278 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
18280 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
18281 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
18282 ProcessExpressionType(exp);
18283 ComputeExpression(exp);
18284 expString[0] = '\0';
18285 PrintExpression(exp, expString);
18286 strcat(argument, expString);
18287 FreeExpression(exp);
18292 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
18297 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
18298 strcat(argument, arg.__anon1.__anon1.dataTypeString);
18305 strcat(templateString, ", ");
18306 if(lastParam != p - 1)
18308 strcat(templateString, param->name);
18309 strcat(templateString, " = ");
18311 strcat(templateString, argument);
18320 int len = strlen(templateString);
18322 if(templateString[len - 1] == '>')
18323 templateString[len++] = ' ';
18324 templateString[len++] = '>';
18325 templateString[len++] = '\0';
18327 FreeType(exp->expType);
18329 struct Context * context = SetupTemplatesContext(tClass);
18331 exp->expType = ProcessTypeString(templateString, 0);
18332 FinishTemplatesContext(context);
18339 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)");
18341 else if(type && (type->kind == 9 || type->kind == 10))
18343 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
18347 exp->expType = memberType;
18349 memberType->refCount++;
18354 char expString[10240];
18356 expString[0] = '\0';
18359 PrintExpression(exp, expString);
18360 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18362 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
18364 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
18366 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
18368 struct Identifier * id = exp->__anon1.member.member;
18369 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));
18373 FreeType(exp->expType);
18374 exp->expType = ReplaceThisClassType(_class);
18378 yylloc = oldyylloc;
18383 struct Type * destType = exp->destType;
18385 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
18387 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
18389 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
18393 ProcessExpressionType(exp);
18400 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
18402 if(classSym && classSym->__anon1.registered)
18404 if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
18407 struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
18410 DeclareStruct(curExternal, classSym->string, 0, 1);
18411 FreeSpecifier(exp->__anon1._class);
18412 FullClassNameCat(name, classSym->string, 0);
18416 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
18420 struct Expression * e;
18423 if(b->structSize == b->offset)
18424 exp->__anon1.op.exp1 = MkExpConstant("0");
18426 exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18427 exp->__anon1.op.op = '+';
18429 while(b->offset != 0)
18431 struct Symbol * sym;
18432 struct Expression * typeSize;
18435 sym = FindClass(b->fullName);
18437 DeclareStruct(curExternal, sym->string, 0, 1);
18438 FullClassNameCat(name, sym->string, 0);
18439 if(b->structSize == b->offset)
18440 typeSize = MkExpConstant("0");
18442 typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18443 e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
18444 e = e->__anon1.op.exp2;
18450 if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
18452 FreeSpecifier(exp->__anon1._class);
18453 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
18458 char className[1024];
18460 strcpy(className, "__ecereClass_");
18461 FullClassNameCat(className, classSym->string, 1);
18462 DeclareClass(curExternal, classSym, className);
18463 FreeExpContents(exp);
18465 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
18466 exp->__anon1.member.member = MkIdentifier("structSize");
18470 exp->expType = __extension__ ({
18471 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18473 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18479 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
18481 exp->expType = __extension__ ({
18482 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18484 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18486 exp->isConstant = 1;
18487 DeclareType(curExternal, type, 1, 0);
18493 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
18496 FreeType(exp->__anon1.cast.exp->destType);
18497 exp->__anon1.cast.exp->destType = type;
18500 ProcessExpressionType(exp->__anon1.cast.exp);
18503 exp->expType = type;
18504 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
18506 void * prev = exp->prev, * next = exp->next;
18507 struct Type * expType = exp->__anon1.cast.exp->destType;
18508 struct Expression * castExp = exp->__anon1.cast.exp;
18509 struct Type * destType = exp->destType;
18512 expType->refCount++;
18513 FreeType(exp->expType);
18514 FreeTypeName(exp->__anon1.cast.typeName);
18516 FreeType(exp->expType);
18517 FreeType(exp->destType);
18518 exp->expType = expType;
18519 exp->destType = destType;
18520 ((castExp ? __extension__ ({
18521 void * __ecerePtrToDelete = (castExp);
18523 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
18524 }) : 0), castExp = 0);
18530 exp->isConstant = exp->__anon1.cast.exp->isConstant;
18536 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
18538 exp->expType = type;
18543 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
18545 ProcessExpressionType(exp->__anon1.vaArg.exp);
18546 exp->expType = type;
18551 struct Expression * e;
18552 struct Type * t = exp->destType;
18554 if(t && !exp->destType->casted)
18556 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18557 CopyTypeInto(t, exp->destType);
18562 exp->isConstant = 1;
18563 FreeType(exp->__anon1.cond.cond->destType);
18564 exp->__anon1.cond.cond->destType = MkClassType("bool");
18565 exp->__anon1.cond.cond->destType->truth = 1;
18566 ProcessExpressionType(exp->__anon1.cond.cond);
18567 if(!exp->__anon1.cond.cond->isConstant)
18568 exp->isConstant = 0;
18569 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
18573 FreeType(e->destType);
18576 e->destType->refCount++;
18578 ProcessExpressionType(e);
18581 exp->expType = e->expType;
18583 e->expType->refCount++;
18586 exp->isConstant = 0;
18588 FreeType(exp->__anon1.cond.elseExp->destType);
18589 exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
18590 if(exp->__anon1.cond.elseExp->destType)
18591 exp->__anon1.cond.elseExp->destType->refCount++;
18592 ProcessExpressionType(exp->__anon1.cond.elseExp);
18593 if(!exp->__anon1.cond.elseExp->isConstant)
18594 exp->isConstant = 0;
18600 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
18602 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
18604 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
18606 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
18608 exp->destType->refCount++;
18610 ProcessStatement(exp->__anon1.compound);
18611 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
18613 exp->expType->refCount++;
18619 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
18621 if(spec && spec->type == 1)
18623 exp->expType = MkClassType(spec->__anon1.__anon1.name);
18624 exp->expType->kind = 19;
18625 exp->byReference = 1;
18629 exp->expType = MkClassType("ecere::com::Class");
18630 exp->byReference = 1;
18636 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
18640 struct Identifier * id = exp->__anon1.classData.id;
18641 char structName[1024];
18642 struct Expression * classExp;
18644 strcpy(structName, "__ecereClassData_");
18645 FullClassNameCat(structName, _class->fullName, 0);
18647 exp->__anon1.member.member = id;
18648 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
18649 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
18651 classExp = MkExpIdentifier(MkIdentifier("class"));
18652 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"))))))));
18653 ProcessExpressionType(exp);
18660 struct Type * type = (((void *)0));
18661 const char * typeString = (((void *)0));
18662 char typeStringBuf[1024];
18664 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))
18666 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
18668 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
18670 else if(exp->__anon1.list)
18672 struct Expression * e;
18674 for(e = (*exp->__anon1.list).first; e; e = e->next)
18676 ProcessExpressionType(e);
18686 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18690 e->expType = (((void *)0));
18691 e = (*exp->__anon1.list).first;
18692 ProcessExpressionType(e);
18695 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18697 FreeType(e->expType);
18698 e->expType = (((void *)0));
18700 type = (((void *)0));
18708 FreeType(e->expType);
18709 e->expType = (((void *)0));
18715 typeStringBuf[0] = '\0';
18716 PrintTypeNoConst(type, typeStringBuf, 0, 1);
18717 typeString = typeStringBuf;
18719 type = (((void *)0));
18724 char templateString[1024];
18725 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18726 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
18727 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18728 struct Expression * expExt;
18729 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
18731 sprintf(templateString, "Container<%s>", typeString);
18732 if(exp->__anon1.list)
18734 struct Expression * e;
18736 type = ProcessTypeString(typeString, 0);
18737 while((e = (*exp->__anon1.list).first))
18739 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
18740 e->destType = type;
18742 ProcessExpressionType(e);
18743 ListAdd(initializers, MkInitializerAssignment(e));
18746 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
18748 DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
18749 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
18750 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18751 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
18752 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18753 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
18754 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18755 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
18756 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18757 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
18758 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18760 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
18762 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18763 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
18764 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18765 exp->expType = ProcessTypeString(templateString, 0);
18767 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
18768 ProcessExpressionType(expExt);
18772 exp->expType = ProcessTypeString("Container", 0);
18773 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18778 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
18780 FreeType(exp->expType);
18781 exp->expType = ReplaceThisClassType(thisClass);
18783 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)
18785 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
18789 if(exp->expType->kind != 15)
18791 struct Type * member;
18792 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
18794 FreeType(exp->expType);
18795 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18796 exp->expType->kind = symbol->type->kind;
18797 exp->expType->refCount++;
18798 exp->expType->__anon1.__anon1.enumName = enumName;
18799 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
18800 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18801 member->refCount++;
18805 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
18807 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18809 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);
18811 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
18816 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)))
18818 exp->byReference = 1;
18821 if(exp->destType && (exp->destType->kind == 18))
18823 else if(exp->destType && !exp->destType->keepCast)
18825 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
18826 exp->needTemplateCast = 1;
18827 if(exp->destType->kind == 0)
18829 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
18831 unsigned int invalidCast = 0;
18833 if(inCompiler && exp->destType->count && exp->expType)
18835 struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
18836 struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
18838 if(c1 && c1->type != 1)
18839 c1 = (((void *)0));
18840 if(c2 && c2->type != 1)
18841 c2 = (((void *)0));
18842 if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
18845 if(!exp->destType->count || unresolved || invalidCast)
18850 if(exp->destType->kind != 14)
18857 char expString[10240];
18859 expString[0] = '\0';
18860 PrintType(exp->destType, type2, 0, 1);
18863 PrintExpression(exp, expString);
18864 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18867 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
18868 else if(exp->type != 16)
18869 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
18874 char expString[10240];
18876 expString[0] = '\0';
18879 PrintExpression(exp, expString);
18880 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18883 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
18884 else if(exp->type != 16)
18885 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
18897 PrintType(exp->expType, type1, 0, 1);
18898 PrintType(exp->destType, type2, 0, 1);
18900 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)))
18904 struct Expression * nbExp = GetNonBracketsExp(exp);
18905 unsigned int skipWarning = 0;
18906 int kind = exp->destType->kind;
18908 if(nbExp->type == 12 && nbExp->destType && !nbExp->destType->casted && nbExp->destType->kind == exp->destType->kind)
18910 if((kind == 1 || kind == 2) && exp->destType->isSigned == exp->expType->signedBeforePromotion && nbExp->type == 4 && nbExp->__anon1.op.exp1 && nbExp->__anon1.op.exp2)
18912 int op = nbExp->__anon1.op.op;
18913 struct Expression * nbExp1, * nbExp2;
18920 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18921 from = nbExp1->expType->promotedFrom;
18922 if(from == 1 || (kind == 2 && from == 2))
18927 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18928 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18929 from = nbExp1->expType->promotedFrom;
18930 if(op == RIGHT_OP && (from == 1 || (kind == 2 && from == 2)))
18932 else if(nbExp2->isConstant && nbExp2->type == 2 && (nbExp->__anon1.op.op == RIGHT_OP || nbExp1->expType->bitMemberSize))
18934 int n = strtol(nbExp2->__anon1.__anon1.constant, (((void *)0)), 0);
18935 int s = from == 1 ? 8 : 16;
18937 if(nbExp1->expType->bitMemberSize && nbExp1->expType->bitMemberSize < s)
18938 s = nbExp1->expType->bitMemberSize;
18939 if(nbExp->__anon1.op.op == RIGHT_OP)
18943 if(s <= (kind == 1 ? 8 : 16))
18948 if(!exp->destType->isSigned)
18950 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18951 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18952 from = nbExp2->expType->promotedFrom;
18953 if((from == 1 || from == 2) && nbExp1->isConstant && nbExp1->type == 2)
18955 int n = strtol(nbExp1->__anon1.__anon1.constant, (((void *)0)), 0);
18957 if(n == (from == 1 ? 255 : 65535))
18966 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18967 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18968 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
18969 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
18970 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)))
18978 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18979 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18980 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
18981 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
18982 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)))
18990 char expString[10240];
18992 expString[0] = '\0';
18995 PrintExpression(exp, expString);
18996 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18998 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")))
19001 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19003 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19008 FreeType(exp->expType);
19009 exp->destType->refCount++;
19010 exp->expType = exp->destType;
19016 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))
19018 struct Expression * nbExp = GetNonBracketsExp(exp);
19020 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
19022 struct Expression * e = MoveExpContents(exp);
19024 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
19026 exp->__anon1.cast.exp->destType = exp->destType;
19028 exp->destType->refCount++;
19029 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
19033 else if(unresolved)
19035 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
19036 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);
19037 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
19038 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
19040 else if(!exp->expType && exp->type != 16)
19042 char expString[10240];
19044 expString[0] = '\0';
19047 PrintExpression(exp, expString);
19048 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19050 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
19053 ApplyAnyObjectLogic(exp);
19054 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)))
19056 exp->byReference = 1;
19058 yylloc = oldyylloc;
19061 static void ProcessFunction(struct FunctionDefinition * function)
19063 struct Identifier * id = GetDeclId(function->declarator);
19064 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
19065 struct Type * type = symbol ? symbol->type : (((void *)0));
19066 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
19067 struct Context * oldTopContext = topContext;
19069 yylloc = function->loc;
19070 if(type && type->__anon1.__anon2.thisClass)
19072 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
19073 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
19074 char className[1024];
19075 char structName[1024];
19076 struct Declarator * funcDecl;
19077 struct Symbol * thisSymbol;
19078 unsigned int typedObject = 0;
19080 if(_class && !_class->base)
19082 _class = currentClass;
19083 if(_class && !_class->symbol)
19084 _class->symbol = FindClass(_class->fullName);
19085 classSym = _class ? _class->symbol : (((void *)0));
19088 thisClass = _class;
19089 if(inCompiler && _class)
19091 if(type->kind == 11)
19093 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
19095 struct Type * param = symbol->type->__anon1.__anon2.params.first;
19097 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
19100 if(type->classObjectType != 1)
19102 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
19103 symbol->type->__anon1.__anon2.staticMethod = 1;
19104 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
19105 symbol->type->extraParam = 0;
19108 strcpy(className, "__ecereClass_");
19109 FullClassNameCat(className, _class->fullName, 1);
19111 FullClassNameCat(structName, _class->fullName, 0);
19112 funcDecl = GetFuncDecl(function->declarator);
19115 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19117 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19119 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19121 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19122 FreeTypeName(param);
19125 if(!function->propertyNoThis)
19127 struct TypeName * thisParam = (((void *)0));
19129 if(type->classObjectType != 1)
19131 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19132 if(!funcDecl->__anon1.function.parameters)
19133 funcDecl->__anon1.function.parameters = MkList();
19134 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19138 if(type->classObjectType != 1)
19140 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
19141 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
19143 thisParam = __extension__ ({
19144 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
19146 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
19148 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
19149 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19153 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19155 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19157 funcDecl = GetFuncDecl(initDecl->declarator);
19160 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19162 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19164 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19166 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19167 FreeTypeName(param);
19170 if(type->classObjectType != 1)
19172 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
19174 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19176 if(!funcDecl->__anon1.function.parameters)
19177 funcDecl->__anon1.function.parameters = MkList();
19178 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19186 if(type->classObjectType != 1)
19188 thisSymbol = __extension__ ({
19189 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
19191 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
19193 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19194 if(typedObject && thisSymbol->type)
19196 thisSymbol->type->classObjectType = 2;
19197 thisSymbol->type->byReference = type->byReference;
19198 thisSymbol->type->typedByReference = type->byReference;
19202 if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
19204 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
19207 struct __ecereNameSpace__ecere__com__Class * base;
19209 for(base = _class; base && base->type != 1000; base = base->next)
19211 for(member = base->membersAndProperties.first; member; member = member->next)
19212 if(!member->isProperty)
19218 for(member = _class->membersAndProperties.first; member; member = member->next)
19219 if(!member->isProperty)
19223 char pointerName[1024];
19224 struct Declaration * decl;
19225 struct Initializer * initializer;
19226 struct Expression * exp, * bytePtr;
19228 strcpy(pointerName, "__ecerePointer_");
19229 FullClassNameCat(pointerName, _class->fullName, 0);
19231 char className[1024];
19233 strcpy(className, "__ecereClass_");
19234 FullClassNameCat(className, classSym->string, 1);
19235 DeclareClass(curExternal, classSym, className);
19237 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
19240 struct Expression * e;
19242 if(_class->offset && _class->offset == (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize))
19244 e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
19245 ProcessExpressionType(e);
19251 sprintf(string, "%d", _class->offset);
19252 e = MkExpConstant(string);
19254 exp = QBrackets(MkExpOp(bytePtr, '+', e));
19258 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
19260 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
19261 exp->expType = __extension__ ({
19262 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19264 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
19265 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19267 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
19268 }), __ecereInstance2;
19272 yylloc = function->body->loc;
19273 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
19275 struct Context * prevContext = curContext;
19276 struct __ecereNameSpace__ecere__sys__OldList * list;
19278 curContext = function->body->__anon1.compound.context;
19279 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
19280 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
19281 curContext = prevContext;
19283 decl->symbol = (((void *)0));
19284 if(!function->body->__anon1.compound.declarations)
19285 function->body->__anon1.compound.declarations = MkList();
19286 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
19292 thisClass = (((void *)0));
19295 FreeSpecifier(id->_class);
19296 id->_class = (((void *)0));
19297 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19299 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19301 id = GetDeclId(initDecl->declarator);
19302 FreeSpecifier(id->_class);
19303 id->_class = (((void *)0));
19307 topContext = function->body->__anon1.compound.context;
19309 struct FunctionDefinition * oldFunction = curFunction;
19311 curFunction = function;
19313 ProcessStatement(function->body);
19314 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
19316 struct Statement * prevCompound = curCompound;
19317 struct Context * prevContext = curContext;
19318 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
19320 if(!function->body->__anon1.compound.statements)
19321 function->body->__anon1.compound.statements = MkList();
19322 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
19323 curCompound = function->body;
19324 curContext = function->body->__anon1.compound.context;
19325 ProcessStatement(fireWatchers);
19326 curContext = prevContext;
19327 curCompound = prevCompound;
19329 curFunction = oldFunction;
19331 if(function->declarator)
19333 ProcessDeclarator(function->declarator, 1);
19335 topContext = oldTopContext;
19336 thisClass = oldThisClass;
19339 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
19341 struct ClassDef * def;
19342 struct External * external = curExternal;
19343 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
19345 for(def = definitions->first; def; def = def->next)
19349 if(def->__anon1.function->declarator)
19350 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
19352 curExternal = external;
19353 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
19355 else if(def->type == 2)
19357 if(def->__anon1.decl->type == 2)
19359 thisClass = regClass;
19360 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
19361 thisClass = (((void *)0));
19365 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
19368 thisClass = regClass;
19369 ProcessDeclaration(def->__anon1.decl, symbol ? 1 : 0);
19370 thisClass = backThisClass;
19373 else if(def->type == 1 && def->__anon1.defProperties)
19375 struct MemberInit * defProperty;
19376 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);
19378 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19379 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
19381 thisClass = regClass;
19382 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
19383 thisClass = (((void *)0));
19385 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19386 FreeSymbol(thisSymbol);
19388 else if(def->type == 3 && def->__anon1.propertyDef)
19390 struct PropertyDef * prop = def->__anon1.propertyDef;
19392 thisClass = regClass;
19397 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19399 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19401 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
19402 ProcessStatement(prop->setStmt);
19408 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19410 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19412 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
19413 ProcessStatement(prop->getStmt);
19415 if(prop->issetStmt)
19419 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19421 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19423 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
19424 ProcessStatement(prop->issetStmt);
19426 thisClass = (((void *)0));
19428 else if(def->type == 4 && def->__anon1.propertyWatch)
19430 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
19432 thisClass = regClass;
19433 if(propertyWatch->compound)
19435 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);
19437 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19438 curExternal = (((void *)0));
19439 ProcessStatement(propertyWatch->compound);
19441 thisClass = (((void *)0));
19446 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19448 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19450 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19451 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19452 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19453 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19454 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19455 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19456 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19457 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19458 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19459 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19460 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19461 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19462 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19463 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19464 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19465 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19466 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19467 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19468 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19469 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19470 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19471 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19472 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19473 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19474 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19475 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19476 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19477 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19478 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19479 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19480 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19481 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19482 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19483 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19484 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19485 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19486 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19487 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19488 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19489 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19490 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19491 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19492 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19493 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19494 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19495 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19496 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19497 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19498 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19499 __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);
19500 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "External DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference)", DeclareStruct, module, 2);
19501 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclareStruct", "External _DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference, bool fwdDecl)", _DeclareStruct, module, 2);
19502 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(External neededBy, ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19503 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19504 __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);
19505 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19506 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareType", "void DeclareType(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareType, module, 2);
19507 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareTypeForwardDeclare", "void DeclareTypeForwardDeclare(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareTypeForwardDeclare, module, 2);
19508 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19509 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19510 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19511 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19512 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19513 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(External neededFor, ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19514 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19515 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19516 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19517 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(External neededFor, ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19518 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(External neededFor, GlobalData data)", DeclareGlobalData, module, 2);
19519 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19520 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)
19521 __ecereClass_Conversion = class;
19522 __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);
19523 __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);
19524 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19525 __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);
19526 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19527 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19528 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19529 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19530 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19531 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19532 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19533 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19534 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19535 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19536 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19537 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19538 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19539 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19540 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19541 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19542 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19543 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19544 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19545 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19546 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(External neededBy, const String s)", DeclareFunctionUtil, module, 1);
19547 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);