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->__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 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
8308 checkedExp->prev = prev;
8309 checkedExp->next = next;
8312 void FinishTemplatesContext(struct Context * context)
8314 PopContext(context);
8315 FreeContext(context);
8316 ((context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(context)) : 0), context = 0);
8319 static __attribute__((unused)) void UnusedFunction()
8323 ((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);
8326 struct Expression * ParseExpressionString(char * expression)
8329 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8330 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
8331 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8333 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8334 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
8335 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8336 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8338 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8339 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
8341 parsedExpression = (((void *)0));
8343 expression_yyparse();
8344 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
8345 return parsedExpression;
8348 struct __ecereNameSpace__ecere__com__Module
8350 struct __ecereNameSpace__ecere__com__Instance * application;
8351 struct __ecereNameSpace__ecere__sys__OldList classes;
8352 struct __ecereNameSpace__ecere__sys__OldList defines;
8353 struct __ecereNameSpace__ecere__sys__OldList functions;
8354 struct __ecereNameSpace__ecere__sys__OldList modules;
8355 struct __ecereNameSpace__ecere__com__Instance * prev;
8356 struct __ecereNameSpace__ecere__com__Instance * next;
8362 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
8363 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
8366 static struct GlobalData * FindGlobalData(char * name)
8369 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
8371 nameSpace = globalData;
8372 for(c = 0; name[c]; c++)
8374 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
8376 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
8377 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
8379 strncpy(spaceName, name + start, c - start);
8380 spaceName[c - start] = '\0';
8381 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
8382 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
8384 return (((void *)0));
8385 nameSpace = newSpace;
8393 return ScanGlobalData(nameSpace, name + start);
8395 return (((void *)0));
8398 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
8401 char nameSpace[1024];
8402 const char * namePart;
8403 unsigned int gotColon = 0;
8405 nameSpace[0] = '\0';
8406 for(c = strlen(name) - 1; c >= 0; c--)
8412 namePart = name + c + 1;
8413 while(c >= 0 && name[c] == ':')
8417 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
8421 memcpy(nameSpace, name, c + 1);
8422 nameSpace[c + 1] = 0;
8423 return ScanWithNameSpace(tree, nameSpace, namePart);
8427 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8433 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8437 return ScanWithNameSpace(tree, "", namePart);
8439 return (((void *)0));
8442 static void PrintArraySize(struct Type * arrayType, char * string)
8448 if(arrayType->__anon1.__anon4.enumClass)
8449 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
8450 else if(arrayType->__anon1.__anon4.arraySizeExp)
8451 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
8453 strcat(string, size);
8456 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
8461 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
8463 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8464 strcat(string, ")");
8465 if(type->kind == 12)
8466 PrintArraySize(type, string);
8467 else if(type->kind == 11)
8469 struct Type * param;
8471 strcat(string, "(");
8472 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
8474 PrintType(param, string, 1, fullName);
8476 strcat(string, ", ");
8478 strcat(string, ")");
8480 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8481 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
8484 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
8486 PrePrintType(type, string, fullName, (((void *)0)), printConst);
8487 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
8488 strcat(string, " ");
8489 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
8491 struct Symbol * _class = type->__anon1.__anon2.thisClass;
8493 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
8495 if(type->classObjectType == 1)
8496 strcat(string, "class");
8498 strcat(string, type->byReference ? "typed_object&" : "typed_object");
8500 else if(_class && _class->string)
8502 char * s = _class->string;
8508 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
8514 strcat(string, name);
8517 strcat(string, "::");
8519 if(printName && type->name)
8520 PrintName(type, string, fullName);
8521 PostPrintType(type, string, fullName);
8522 if(type->bitFieldCount)
8526 sprintf(count, ":%d", type->bitFieldCount);
8527 strcat(string, count);
8535 struct Conversion * prev, * next;
8536 struct __ecereNameSpace__ecere__com__Property * convert;
8538 struct Type * resultType;
8541 static void FreeConvert(struct Conversion * convert)
8543 if(convert->resultType)
8544 FreeType(convert->resultType);
8551 struct Enumerator * prev;
8552 struct Enumerator * next;
8553 struct Location loc;
8554 struct Identifier * id;
8555 struct Expression * exp;
8562 struct AsmField * prev;
8563 struct AsmField * next;
8564 struct Location loc;
8566 struct Expression * expression;
8567 struct Identifier * symbolic;
8570 struct ClassDefinition;
8574 struct Context * parent;
8575 struct __ecereNameSpace__ecere__sys__BinaryTree types;
8576 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
8577 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
8578 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
8581 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
8582 struct ClassDefinition * classDef;
8583 unsigned int templateTypesOnly;
8584 unsigned int hasNameSpace;
8589 struct External * prev;
8590 struct External * next;
8591 struct Location loc;
8593 struct Symbol * symbol;
8596 struct FunctionDefinition * function;
8597 struct ClassDefinition * _class;
8598 struct Declaration * declaration;
8599 char * importString;
8600 struct Identifier * id;
8601 struct DBTableDef * table;
8602 } ecere_gcc_struct __anon1;
8604 struct External * fwdDecl;
8605 struct __ecereNameSpace__ecere__com__Instance * outgoing;
8606 struct __ecereNameSpace__ecere__com__Instance * incoming;
8607 int nonBreakableIncoming;
8610 struct ClassDefinition
8612 struct ClassDefinition * prev;
8613 struct ClassDefinition * next;
8614 struct Location loc;
8615 struct Specifier * _class;
8616 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
8617 struct __ecereNameSpace__ecere__sys__OldList * definitions;
8618 struct Symbol * symbol;
8619 struct Location blockStart;
8620 struct Location nameLoc;
8622 unsigned int deleteWatchable;
8625 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
8627 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
8629 void DeclareGlobalData(struct External * neededFor, struct GlobalData * data)
8631 struct Symbol * symbol = data->symbol;
8633 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
8638 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
8641 data->dataType = ProcessTypeString(data->dataTypeString, 0);
8644 struct Declaration * decl;
8645 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
8646 struct Declarator * d;
8647 struct External * external;
8649 specifiers = MkList();
8650 declarators = MkList();
8651 ListAdd(specifiers, MkSpecifier(EXTERN));
8652 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
8653 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
8654 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
8655 decl = MkDeclaration(specifiers, declarators);
8656 external = MkExternalDeclaration(decl);
8658 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
8659 external->symbol = symbol;
8660 symbol->__anon2.__anon1.pointerExternal = external;
8661 DeclareType(external, data->dataType, 1, 1);
8664 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
8665 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, 0);
8668 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
8670 struct Context * ctx;
8671 struct Symbol * symbol = (((void *)0));
8673 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
8675 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
8677 symbol = (((void *)0));
8682 strcpy(curName, thisNameSpace);
8683 strcat(curName, "::");
8684 strcat(curName, name);
8685 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
8688 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
8691 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
8692 if(symbol || ctx == endContext)
8695 if(inCompiler && symbol && ctx == globalContext && symbol->__anon2.__anon1.pointerExternal && curExternal && symbol->__anon2.__anon1.pointerExternal != curExternal)
8696 __ecereMethod_External_CreateUniqueEdge(curExternal, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
8704 struct ClassDef * prev;
8705 struct ClassDef * next;
8706 struct Location loc;
8710 struct Declaration * decl;
8711 struct ClassFunction * function;
8712 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
8713 struct PropertyDef * propertyDef;
8714 struct PropertyWatch * propertyWatch;
8716 struct Identifier * defaultProperty;
8719 struct Identifier * id;
8720 struct Initializer * initializer;
8721 } ecere_gcc_struct __anon1;
8722 } ecere_gcc_struct __anon1;
8729 struct PropertyDef * prev;
8730 struct PropertyDef * next;
8731 struct Location loc;
8732 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
8733 struct Declarator * declarator;
8734 struct Identifier * id;
8735 struct Statement * getStmt;
8736 struct Statement * setStmt;
8737 struct Statement * issetStmt;
8738 struct Symbol * symbol;
8739 struct Expression * category;
8742 unsigned int conversion : 1;
8743 unsigned int isWatchable : 1;
8744 unsigned int isDBProp : 1;
8745 } ecere_gcc_struct __anon1;
8748 static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
8750 struct ClassDef * def;
8753 for(def = (*definitions).first; def; def = def->next)
8757 struct Declaration * decl = def->__anon1.decl;
8759 if(decl && decl->__anon1.__anon1.specifiers)
8761 struct Specifier * spec;
8762 unsigned int isStruct = 0;
8764 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
8766 if(spec->type == 3 || spec->type == 4)
8768 if(spec->__anon1.__anon2.definitions)
8769 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
8775 struct Declarator * d = (((void *)0));
8777 if(decl->__anon1.__anon1.declarators)
8779 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
8781 struct Identifier * idDecl = GetDeclId(d);
8791 sprintf(id, "__anon%d", anonID++);
8792 if(!decl->__anon1.__anon1.declarators)
8793 decl->__anon1.__anon1.declarators = MkList();
8794 ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
8804 typedef union YYSTYPE
8809 struct Identifier * id;
8810 struct Expression * exp;
8811 struct Specifier * specifier;
8812 struct __ecereNameSpace__ecere__sys__OldList * list;
8813 struct Enumerator * enumerator;
8814 struct Declarator * declarator;
8815 struct Pointer * pointer;
8816 struct Initializer * initializer;
8817 struct InitDeclarator * initDeclarator;
8818 struct TypeName * typeName;
8819 struct Declaration * declaration;
8820 struct Statement * stmt;
8821 struct FunctionDefinition * function;
8822 struct External * external;
8823 struct Context * context;
8824 struct AsmField * asmField;
8825 struct Attrib * attrib;
8826 struct ExtDecl * extDecl;
8827 struct Attribute * attribute;
8828 struct Instantiation * instance;
8829 struct MembersInit * membersInit;
8830 struct MemberInit * memberInit;
8831 struct ClassFunction * classFunction;
8832 struct ClassDefinition * _class;
8833 struct ClassDef * classDef;
8834 struct PropertyDef * prop;
8836 struct Symbol * symbol;
8837 struct PropertyWatch * propertyWatch;
8838 struct TemplateParameter * templateParameter;
8839 struct TemplateArgument * templateArgument;
8840 struct TemplateDatatype * templateDatatype;
8841 struct DBTableEntry * dbtableEntry;
8842 struct DBIndexItem * dbindexItem;
8843 struct DBTableDef * dbtableDef;
8844 } ecere_gcc_struct YYSTYPE;
8846 extern YYSTYPE yylval;
8850 struct MemberInit * prev;
8851 struct MemberInit * next;
8852 struct Location loc;
8853 struct Location realLoc;
8854 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
8855 struct Initializer * initializer;
8857 unsigned int variable;
8858 unsigned int takeOutExp;
8861 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
8863 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
8865 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
8867 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
8868 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
8873 const char * dataTypeString;
8875 } ecere_gcc_struct __anon1;
8876 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
8880 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
8882 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
8884 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
8885 struct __ecereNameSpace__ecere__com__Class * sClass;
8887 for(sClass = _class; sClass; sClass = sClass->base)
8890 if(sClass->templateClass)
8891 sClass = sClass->templateClass;
8892 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
8894 if(curParam->type == 0 && !strcmp(param->identifier->string, curParam->name))
8896 for(sClass = sClass->base; sClass; sClass = sClass->base)
8898 if(sClass->templateClass)
8899 sClass = sClass->templateClass;
8900 id += sClass->templateParams.count;
8911 arg = &_class->templateArgs[id];
8912 if(arg && param->type == 0)
8913 (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
8918 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class)
8920 struct Context * context = PushContext();
8922 context->templateTypesOnly = 1;
8923 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
8925 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
8927 for(; param; param = param->next)
8929 if(param->type == 0 && param->identifier)
8931 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
8933 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8939 struct __ecereNameSpace__ecere__com__Class * sClass;
8941 for(sClass = _class; sClass; sClass = sClass->base)
8943 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * p;
8945 for(p = sClass->templateParams.first; p; p = p->next)
8949 struct TemplateParameter * param = p->param;
8950 struct TemplatedType * type;
8954 p->param = param = __extension__ ({
8955 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
8957 __ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
8960 type = __extension__ ({
8961 struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType);
8963 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
8965 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8973 char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
8975 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
8977 unsigned int first = 1;
8979 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
8981 char className[1024];
8983 strcpy(className, _class->fullName);
8984 for(param = _class->templateParams.first; param; param = param->next)
8988 strcat(className, "<");
8990 strcat(className, ", ");
8991 if(lastParam + 1 != p)
8993 strcat(className, param->name);
8994 strcat(className, " = ");
8996 strcat(className, param->name);
9004 int len = strlen(className);
9006 if(className[len - 1] == '>')
9007 className[len++] = ' ';
9008 className[len++] = '>';
9009 className[len++] = '\0';
9011 return __ecereNameSpace__ecere__sys__CopyString(className);
9014 return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
9017 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
9021 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9023 unsigned int first = 1;
9025 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9027 char className[1024];
9029 strcpy(className, _class->fullName);
9030 for(param = _class->templateParams.first; param; param = param->next)
9034 strcat(className, "<");
9036 strcat(className, ", ");
9037 if(lastParam + 1 != p)
9039 strcat(className, param->name);
9040 strcat(className, " = ");
9042 strcat(className, param->name);
9050 int len = strlen(className);
9052 if(className[len - 1] == '>')
9053 className[len++] = ' ';
9054 className[len++] = '>';
9055 className[len++] = '\0';
9057 type = MkClassType(className);
9061 type = MkClassType(_class->fullName);
9066 static int DeclareMembers(struct External * neededBy, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
9068 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
9069 struct __ecereNameSpace__ecere__com__DataMember * member;
9070 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
9072 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
9073 DeclareMembers(neededBy, _class->base, 0);
9074 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
9076 if(!member->isProperty)
9078 switch(member->type)
9082 if(!member->dataType && member->dataTypeString)
9083 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9084 if(member->dataType)
9085 DeclareType(neededBy, member->dataType, 1, 0);
9091 DeclareMembers(neededBy, (struct __ecereNameSpace__ecere__com__Class *)member, 1);
9098 FinishTemplatesContext(context);
9099 return topMember ? topMember->memberID : _class->memberID;
9102 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
9104 if(!method->dataType)
9106 struct Context * context = SetupTemplatesContext(method->_class);
9108 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9109 FinishTemplatesContext(context);
9110 if(method->type != 1 && method->dataType)
9112 if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
9114 if(!method->_class->symbol)
9115 method->_class->symbol = FindClass(method->_class->fullName);
9116 method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
9122 void ProcessPropertyType(struct __ecereNameSpace__ecere__com__Property * prop)
9126 struct Context * context = SetupTemplatesContext(prop->_class);
9128 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
9129 FinishTemplatesContext(context);
9133 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
9135 if(specs != (((void *)0)) && _class)
9137 struct Specifier * spec;
9139 for(spec = specs->first; spec; spec = spec->next)
9141 if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
9144 spec->__anon1.__anon1.name = ReplaceThisClass(_class);
9145 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
9151 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
9153 struct Identifier * id = exp->__anon1.__anon1.identifier;
9154 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9155 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
9156 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9157 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9159 if(_class && _class->type == 4)
9161 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
9162 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9166 struct __ecereNameSpace__ecere__com__Class * baseClass;
9168 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
9170 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
9172 for(value = e->values.first; value; value = value->next)
9174 if(!strcmp(value->name, id->string))
9179 exp->isConstant = 1;
9180 if(inCompiler || inPreCompiler || inDebugger)
9184 FreeExpContents(exp);
9186 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
9187 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
9189 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
9190 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9192 exp->expType = MkClassType(baseClass->fullName);
9200 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
9202 ProcessMethodType(method);
9203 exp->expType = __extension__ ({
9204 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
9206 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
9210 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
9213 ProcessPropertyType(prop);
9214 exp->expType = prop->dataType;
9216 prop->dataType->refCount++;
9219 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
9221 if(!member->dataType)
9222 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9223 exp->expType = member->dataType;
9224 if(member->dataType)
9225 member->dataType->refCount++;
9228 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
9230 if(!classProp->dataType)
9231 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
9232 if(classProp->constant)
9234 FreeExpContents(exp);
9235 exp->isConstant = 1;
9236 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
9239 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
9246 sprintf(constant, "%d", (int)classProp->Get(_class));
9247 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9253 exp->expType = classProp->dataType;
9254 if(classProp->dataType)
9255 classProp->dataType->refCount++;
9261 void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
9263 struct Symbol * symbol = prop->symbol;
9264 unsigned int imported = 0;
9265 unsigned int dllImport = 0;
9266 struct External * structExternal = (((void *)0));
9267 struct External * instExternal = (((void *)0));
9269 strcpy(setName, "__ecereProp_");
9270 FullClassNameCat(setName, prop->_class->fullName, 0);
9271 strcat(setName, "_Set_");
9272 FullClassNameCat(setName, prop->name, 1);
9273 strcpy(getName, "__ecereProp_");
9274 FullClassNameCat(getName, prop->_class->fullName, 0);
9275 strcat(getName, "_Get_");
9276 FullClassNameCat(getName, prop->name, 1);
9277 if(!symbol || symbol->_import)
9281 struct Symbol * classSym;
9283 if(!prop->_class->symbol)
9284 prop->_class->symbol = FindClass(prop->_class->fullName);
9285 classSym = prop->_class->symbol;
9286 if(classSym && !classSym->_import)
9288 struct ModuleImport * module;
9290 if(prop->_class->module)
9291 module = FindModule(prop->_class->module);
9293 module = mainModule;
9294 classSym->_import = __extension__ ({
9295 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9297 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->_class->fullName), __ecereInstance1->isRemote = prop->_class->isRemote, __ecereInstance1;
9299 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9301 symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9302 symbol->_import = (struct ClassImport *)__extension__ ({
9303 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
9305 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
9308 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
9311 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)
9316 struct Context * context = SetupTemplatesContext(prop->_class);
9318 symbol->type = ProcessTypeString(prop->dataTypeString, 0);
9319 FinishTemplatesContext(context);
9321 if((prop->Get && !symbol->__anon2.__anon2.externalGet) || (prop->Set && !symbol->__anon2.__anon2.externalSet))
9323 if(prop->_class->type == 0 && prop->_class->structSize)
9324 instExternal = DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
9325 structExternal = DeclareStruct((((void *)0)), prop->_class->fullName, prop->_class->type != 1, 0);
9327 if(prop->Get && !symbol->__anon2.__anon2.externalGet)
9329 struct Declaration * decl;
9330 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9331 struct Declarator * d;
9332 struct __ecereNameSpace__ecere__sys__OldList * params;
9333 struct Specifier * spec = (((void *)0));
9334 struct External * external;
9335 struct Declarator * typeDecl;
9336 unsigned int simple = 0;
9337 unsigned int needReference;
9339 specifiers = MkList();
9340 declarators = MkList();
9342 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9343 d = MkDeclaratorIdentifier(MkIdentifier(getName));
9345 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9347 struct Context * context = SetupTemplatesContext(prop->_class);
9349 typeDecl = SpecDeclFromString(prop->dataTypeString, specifiers, (((void *)0)));
9350 FinishTemplatesContext(context);
9352 needReference = !typeDecl || typeDecl->type == 1;
9353 for(spec = (*specifiers).first; spec; spec = spec->next)
9357 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9361 symbol->_class = classSym->__anon1.registered;
9362 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
9369 d = PlugDeclarator(typeDecl, d);
9372 ListAdd(params, MkTypeName(specifiers, PlugDeclarator(typeDecl, MkDeclaratorIdentifier(MkIdentifier("value")))));
9373 specifiers = MkList();
9375 d = MkDeclaratorFunction(d, params);
9377 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9378 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9379 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9381 ListAdd(specifiers, MkSpecifier(VOID));
9382 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9383 decl = MkDeclaration(specifiers, declarators);
9384 external = MkExternalDeclaration(decl);
9386 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9388 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9390 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9391 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9392 external->symbol = symbol;
9393 symbol->__anon2.__anon2.externalGet = external;
9394 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9396 FreeDeclarator(typeDecl);
9398 if(prop->Set && !symbol->__anon2.__anon2.externalSet)
9400 struct Declaration * decl;
9401 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9402 struct Declarator * d;
9403 struct __ecereNameSpace__ecere__sys__OldList * params;
9404 struct Specifier * spec = (((void *)0));
9405 struct External * external;
9406 struct Declarator * typeDecl;
9407 unsigned int needReference;
9409 declarators = MkList();
9411 if(!prop->conversion || prop->_class->type == 1)
9413 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9415 specifiers = MkList();
9417 struct Context * context = SetupTemplatesContext(prop->_class);
9419 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
9420 FinishTemplatesContext(context);
9422 if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
9423 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
9424 ListAdd(params, MkTypeName(specifiers, d));
9425 d = MkDeclaratorIdentifier(MkIdentifier(setName));
9427 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9428 d = MkDeclaratorFunction(d, params);
9429 needReference = !typeDecl || typeDecl->type == 1;
9430 for(spec = (*specifiers).first; spec; spec = spec->next)
9434 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9437 symbol->_class = classSym->__anon1.registered;
9441 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9442 specifiers = MkList();
9444 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9445 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9446 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9447 if(!prop->conversion || prop->_class->type == 1)
9448 ListAdd(specifiers, MkSpecifier(VOID));
9450 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
9451 decl = MkDeclaration(specifiers, declarators);
9452 external = MkExternalDeclaration(decl);
9454 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9456 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9458 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9459 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9460 external->symbol = symbol;
9461 symbol->__anon2.__anon2.externalSet = external;
9462 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9464 if(!symbol->__anon2.__anon2.externalPtr)
9466 struct Declaration * decl;
9467 struct External * external;
9468 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
9469 char propName[1024];
9472 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9475 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9476 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*specifiers), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
9478 ListAdd(specifiers, MkSpecifierName("Property"));
9479 strcpy(propName, "__ecereProp_");
9480 FullClassNameCat(propName, prop->_class->fullName, 0);
9481 strcat(propName, "_");
9482 FullClassNameCat(propName, prop->name, 1);
9484 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
9486 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9489 strcpy(propName, "__ecerePropM_");
9490 FullClassNameCat(propName, prop->_class->fullName, 0);
9491 strcat(propName, "_");
9492 FullClassNameCat(propName, prop->name, 1);
9493 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9495 decl = MkDeclaration(specifiers, list);
9497 external = MkExternalDeclaration(decl);
9498 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
9499 external->symbol = symbol;
9500 symbol->__anon2.__anon2.externalPtr = external;
9502 if(inCompiler && neededBy)
9504 if(symbol->__anon2.__anon2.externalPtr)
9505 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalPtr, 0);
9506 if(symbol->__anon2.__anon2.externalGet)
9507 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalGet, symbol->__anon2.__anon2.externalGet->type == 0);
9508 if(symbol->__anon2.__anon2.externalSet)
9509 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalSet, symbol->__anon2.__anon2.externalSet->type == 0);
9513 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction);
9515 void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char * name)
9517 struct Symbol * symbol = method->symbol;
9519 if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && (!symbol->__anon2.__anon3.methodCodeExternal || method->type == 1)))
9521 unsigned int dllImport = 0;
9523 if(!method->dataType)
9524 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9526 if(!symbol || method->type == 1)
9528 struct Symbol * classSym;
9530 if(!method->_class->symbol)
9531 method->_class->symbol = FindClass(method->_class->fullName);
9532 classSym = method->_class->symbol;
9533 if(!classSym->_import)
9535 struct ModuleImport * module;
9537 if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->name)
9538 module = FindModule(method->_class->module);
9540 module = mainModule;
9541 classSym->_import = __extension__ ({
9542 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9544 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->_class->fullName), __ecereInstance1->isRemote = method->_class->isRemote, __ecereInstance1;
9546 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9550 symbol = method->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9552 if(!symbol->_import)
9554 symbol->_import = (struct ClassImport *)__extension__ ({
9555 struct MethodImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodImport);
9557 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
9559 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->methods, symbol->_import);
9563 symbol->type = method->dataType;
9565 symbol->type->refCount++;
9568 if(!method->dataType->dllExport)
9570 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)
9576 struct Declaration * decl;
9577 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9578 struct Declarator * d;
9579 struct Declarator * funcDecl;
9580 struct External * external;
9582 specifiers = MkList();
9583 declarators = MkList();
9585 ListAdd(specifiers, MkSpecifier(EXTERN));
9586 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
9587 ListAdd(specifiers, MkSpecifier(STATIC));
9588 if(method->type == 1)
9590 ListAdd(specifiers, MkSpecifier(INT));
9591 d = MkDeclaratorIdentifier(MkIdentifier(name));
9595 d = MkDeclaratorIdentifier(MkIdentifier(name));
9597 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9599 struct Context * context = SetupTemplatesContext(method->_class);
9601 d = SpecDeclFromString(method->dataTypeString, specifiers, d);
9602 FinishTemplatesContext(context);
9604 funcDecl = GetFuncDecl(d);
9607 struct Specifier * spec, * next;
9609 for(spec = (*specifiers).first; spec; spec = next)
9614 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9615 FreeSpecifier(spec);
9619 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
9621 if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
9623 struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
9624 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")));
9625 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
9626 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
9628 if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
9630 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
9632 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
9633 FreeTypeName(param);
9635 if(!funcDecl->__anon1.function.parameters)
9636 funcDecl->__anon1.function.parameters = MkList();
9637 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
9641 ProcessDeclarator(d, 1);
9642 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9643 decl = MkDeclaration(specifiers, declarators);
9644 ReplaceThisClassSpecifiers(specifiers, method->_class);
9645 external = MkExternalDeclaration(decl);
9646 external->symbol = symbol;
9647 symbol->__anon2.__anon1.pointerExternal = external;
9648 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9649 DeclareStruct(external, method->_class->fullName, 1, 1);
9650 if(method->dataType)
9651 DeclareType(external, method->dataType, 1, 1);
9654 if(inCompiler && neededFor)
9656 struct External * external = symbol->__anon2.__anon1.pointerExternal ? symbol->__anon2.__anon1.pointerExternal : symbol->__anon2.__anon3.methodCodeExternal;
9658 __ecereMethod_External_CreateUniqueEdge(neededFor, external, external->type == 0);
9662 struct __ecereNameSpace__ecere__com__GlobalFunction;
9664 struct __ecereNameSpace__ecere__com__GlobalFunction
9666 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
9667 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
9670 struct __ecereNameSpace__ecere__com__Instance * module;
9671 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
9672 const char * dataTypeString;
9673 struct Type * dataType;
9677 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
9679 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);
9681 unsigned int DeclareFunction(struct External * neededFor, struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
9683 struct Symbol * symbol = function->symbol;
9685 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
9687 unsigned int imported = 0;
9688 unsigned int dllImport = 0;
9690 if(!function->dataType)
9692 function->dataType = ProcessTypeString(function->dataTypeString, 0);
9693 if(!function->dataType->__anon1.__anon2.thisClass)
9694 function->dataType->__anon1.__anon2.staticMethod = 1;
9700 struct ModuleImport * module = FindModule(function->module);
9702 symbol = function->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9705 if(!function->dataType->dllExport)
9707 symbol->_import = (struct ClassImport *)__extension__ ({
9708 struct FunctionImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionImport);
9710 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->name), __ecereInstance1;
9712 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symbol->_import);
9716 symbol->type = ProcessTypeString(function->dataTypeString, 0);
9717 if(!symbol->type->__anon1.__anon2.thisClass)
9718 symbol->type->__anon1.__anon2.staticMethod = 1;
9721 imported = symbol->_import ? 1 : 0;
9722 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9728 struct Declaration * decl;
9729 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9730 struct Declarator * d;
9731 struct Declarator * funcDecl;
9732 struct External * external;
9734 specifiers = MkList();
9735 declarators = MkList();
9736 ListAdd(specifiers, MkSpecifier(EXTERN));
9737 d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
9739 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9740 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
9741 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType == 1)
9743 struct Specifier * spec;
9745 for(spec = (*specifiers).first; spec; spec = spec->next)
9746 if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
9748 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9749 FreeSpecifier(spec);
9753 funcDecl = GetFuncDecl(d);
9754 if(funcDecl && !funcDecl->__anon1.function.parameters)
9756 funcDecl->__anon1.function.parameters = MkList();
9757 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
9759 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9761 struct Context * oldCtx = curContext;
9763 curContext = globalContext;
9764 decl = MkDeclaration(specifiers, declarators);
9765 curContext = oldCtx;
9767 external = MkExternalDeclaration(decl);
9768 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9769 external->symbol = symbol;
9770 symbol->__anon2.__anon1.pointerExternal = external;
9771 DeclareType(external, function->dataType, 1, 1);
9775 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
9776 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
9777 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;
9780 void DeclareFunctionUtil(struct External * neededBy, const char * s)
9782 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
9789 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
9790 strcpy(name, "__ecereFunction_");
9791 FullClassNameCat(name, s, 0);
9792 DeclareFunction(neededBy, function, name);
9795 FindSymbol(s, globalContext, globalContext, 0, 0);
9798 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
9800 char propName[1024], propNameM[1024];
9801 char getName[1024], setName[1024];
9802 struct __ecereNameSpace__ecere__sys__OldList * args;
9804 DeclareProperty(curExternal, prop, setName, getName);
9805 strcpy(propName, "__ecereProp_");
9806 FullClassNameCat(propName, prop->_class->fullName, 0);
9807 strcat(propName, "_");
9808 FullClassNameCat(propName, prop->name, 1);
9809 strcpy(propNameM, "__ecerePropM_");
9810 FullClassNameCat(propNameM, prop->_class->fullName, 0);
9811 strcat(propNameM, "_");
9812 FullClassNameCat(propNameM, prop->name, 1);
9813 if(prop->isWatchable)
9816 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9817 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9818 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9820 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9821 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9822 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9823 DeclareFunctionUtil(curExternal, "eInstance_FireWatchers");
9827 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9828 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9829 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9831 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9832 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9833 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9834 DeclareFunctionUtil(curExternal, "eInstance_FireSelfWatchers");
9836 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
9837 curFunction->propSet->fireWatchersDone = 1;
9840 struct __ecereNameSpace__ecere__com__SubModule;
9842 struct __ecereNameSpace__ecere__com__SubModule
9844 struct __ecereNameSpace__ecere__com__SubModule * prev;
9845 struct __ecereNameSpace__ecere__com__SubModule * next;
9846 struct __ecereNameSpace__ecere__com__Instance * module;
9850 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
9852 struct __ecereNameSpace__ecere__com__SubModule * subModule;
9854 if(searchFor == searchIn)
9856 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
9858 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
9860 if(ModuleVisibility(subModule->module, searchFor))
9867 void ProcessExpressionType(struct Expression * exp);
9869 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
9871 if(exp->type == 0 && exp->__anon1.__anon1.identifier)
9873 struct Identifier * id = exp->__anon1.__anon1.identifier;
9874 struct Context * ctx;
9875 struct Symbol * symbol = (((void *)0));
9877 if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
9879 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
9881 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, id->string);
9886 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))))
9888 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
9889 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9890 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9891 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9895 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
9897 if(!prop && !method)
9898 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
9899 if(!prop && !method && !member)
9901 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string);
9903 if(prop || method || member || classProp)
9906 exp->__anon1.member.member = id;
9907 exp->__anon1.member.memberType = 0;
9908 exp->__anon1.member.exp = QMkExpId("this");
9911 else if(_class && _class->templateParams.first)
9913 struct __ecereNameSpace__ecere__com__Class * sClass;
9915 for(sClass = _class; sClass; sClass = sClass->base)
9917 if(sClass->templateParams.first)
9919 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9921 for(param = sClass->templateParams.first; param; param = param->next)
9923 if(param->type == 2 && !strcmp(param->name, id->string))
9925 struct Expression * argExp = GetTemplateArgExpByName(param->name, _class, 2);
9929 struct Declarator * decl;
9930 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
9932 FreeIdentifier(exp->__anon1.member.member);
9933 ProcessExpressionType(argExp);
9934 decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
9935 exp->expType = ProcessType(specs, decl);
9937 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
9948 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
9950 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
9952 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
9954 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
9955 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
9958 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
9959 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
9961 void * ptr = inst->data + dataMember->offset + offset;
9962 char * result = (((void *)0));
9964 exp->loc = member->loc = inst->loc;
9965 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
9966 if(!dataMember->dataType)
9967 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
9968 type = dataMember->dataType;
9971 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
9973 if(_class->type == 4)
9975 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9979 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
9980 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
9982 for(item = e->values.first; item; item = item->next)
9984 if(item->data == GetEnumValue(_class, ptr))
9986 result = item->name;
9992 exp->__anon1.__anon1.identifier = MkIdentifier(result);
9994 exp->destType = MkClassType(_class->fullName);
9995 ProcessExpressionType(exp);
9999 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10001 if(!_class->dataType)
10002 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10003 type = _class->dataType;
10012 FreeExpContents(exp);
10013 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10019 FreeExpContents(exp);
10020 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10026 FreeExpContents(exp);
10027 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10033 FreeExpContents(exp);
10034 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10040 FreeExpContents(exp);
10041 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10047 FreeExpContents(exp);
10048 exp->__anon1.__anon1.constant = PrintInt64((long long)*(ssize_t *)ptr);
10053 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10056 ListAdd(memberList, member);
10058 if(parentDataMember->type == 1)
10063 void CheckTemplateTypes(struct Expression * exp)
10065 struct Expression * nbExp = GetNonBracketsExp(exp);
10067 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
10069 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10070 struct Context * context;
10071 int kind = exp->expType->kind;
10075 exp->destType->refCount++;
10077 exp->expType->refCount++;
10078 newExp->prev = (((void *)0));
10079 newExp->next = (((void *)0));
10080 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10082 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10084 if(c->type == 2 || c->type == 4 || c->type == 3)
10087 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10088 kind = c->dataType->kind;
10094 if(exp->destType->classObjectType)
10097 exp->destType->refCount--;
10099 exp->expType->refCount--;
10100 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
10104 struct __ecereNameSpace__ecere__sys__OldList * specs;
10105 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10106 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10108 context = PushContext();
10109 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10110 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10111 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10113 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10114 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
10115 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
10116 exp->__anon1.compound->__anon1.compound.context = context;
10117 PopContext(context);
10122 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
10123 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))
10124 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
10126 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10131 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
10133 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10134 struct Context * context;
10135 int kind = exp->expType->kind;
10139 exp->destType->refCount++;
10141 exp->expType->refCount++;
10142 newExp->prev = (((void *)0));
10143 newExp->next = (((void *)0));
10144 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10146 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10148 if(c->type == 2 || c->type == 4 || c->type == 3)
10151 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10152 kind = c->dataType->kind;
10158 if(exp->destType->classObjectType)
10161 exp->destType->refCount--;
10163 exp->expType->refCount--;
10164 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
10168 struct __ecereNameSpace__ecere__sys__OldList * specs;
10169 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10170 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10172 context = PushContext();
10173 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10174 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10175 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10177 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10178 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
10179 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
10180 exp->__anon1.compound->__anon1.compound.context = context;
10181 PopContext(context);
10186 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
10189 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10190 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)));
10191 ProcessExpressionType((*exp->__anon1.list).first);
10197 if(__ecereProp_Type_Get_isPointerType(exp->expType))
10199 exp->needTemplateCast = 2;
10200 newExp->needCast = 1;
10201 newExp->needTemplateCast = 2;
10202 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10204 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
10205 exp->needTemplateCast = 2;
10206 newExp->needCast = 1;
10207 newExp->needTemplateCast = 2;
10208 ProcessExpressionType((*exp->__anon1.list).first);
10214 if(exp->expType->kind == 20)
10216 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
10220 FreeType(exp->destType);
10221 FreeType(exp->expType);
10222 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
10227 char typeString[1024];
10228 struct Declarator * decl;
10229 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
10231 typeString[0] = '\0';
10232 PrintType(exp->expType, typeString, 0, 0);
10233 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
10235 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
10236 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10237 exp->__anon1.cast.exp->needCast = 1;
10238 exp->needTemplateCast = 2;
10239 newExp->needTemplateCast = 2;
10247 static void ProcessInitializer(struct Initializer * init, struct Type * type)
10252 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
10254 if(init->__anon1.exp && !init->__anon1.exp->destType)
10256 FreeType(init->__anon1.exp->destType);
10257 init->__anon1.exp->destType = type;
10261 if(init->__anon1.exp)
10263 ProcessExpressionType(init->__anon1.exp);
10264 init->isConstant = init->__anon1.exp->isConstant;
10270 struct Expression * exp = init->__anon1.exp;
10271 struct Instantiation * inst = exp->__anon1.instance;
10272 struct MembersInit * members;
10275 init->__anon1.list = MkList();
10278 for(members = (*inst->members).first; members; members = members->next)
10280 if(members->type == 0)
10282 struct MemberInit * member;
10284 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
10286 ListAdd(init->__anon1.list, member->initializer);
10287 member->initializer = (((void *)0));
10292 FreeExpression(exp);
10296 struct Initializer * i;
10297 struct Type * initializerType = (((void *)0));
10298 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
10299 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
10300 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
10301 int subMemberStackPos = 0;
10303 if(type && type->kind == 12)
10304 initializerType = Dereference(type);
10305 else if(type && (type->kind == 9 || type->kind == 10))
10306 initializerType = type->__anon1.__anon1.members.first;
10307 for(i = (*init->__anon1.list).first; i; i = i->next)
10309 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
10311 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
10314 if(!curMember->dataType)
10315 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
10316 initializerType = curMember->dataType;
10319 ProcessInitializer(i, initializerType);
10320 if(initializerType && type && (type->kind == 9 || type->kind == 10))
10321 initializerType = initializerType->next;
10323 init->isConstant = 0;
10325 if(type && type->kind == 12)
10326 FreeType(initializerType);
10327 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))
10329 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
10336 void PopulateInstance(struct Instantiation * inst)
10338 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
10339 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
10340 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10341 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
10344 inst->members = MkListOne(MkMembersInitList(memberList));
10346 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
10347 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10349 if(!dataMember->isProperty)
10351 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10352 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
10355 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10356 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10357 struct Type * type;
10358 void * ptr = inst->data + dataMember->offset;
10359 char * result = (((void *)0));
10361 exp->loc = member->loc = inst->loc;
10362 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10363 if(!dataMember->dataType)
10364 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10365 type = dataMember->dataType;
10366 if(type->kind == 8)
10368 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10370 if(_class->type == 4)
10372 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10376 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10377 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10379 for(item = e->values.first; item; item = item->next)
10381 if(item->data == GetEnumValue(_class, ptr))
10383 result = item->name;
10390 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10392 exp->destType = MkClassType(_class->fullName);
10393 ProcessExpressionType(exp);
10396 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10398 if(!_class->dataType)
10399 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10400 type = _class->dataType;
10409 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10415 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10421 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10427 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10433 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10438 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10441 ListAdd(memberList, member);
10447 int ComputeTypeSize(struct Type * type);
10449 void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
10451 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10452 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10454 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))
10456 int unionMemberOffset = 0;
10461 member->memberOffset = 0;
10462 if(targetBits < sizeof(void *) * 8)
10463 member->structAlignment = 0;
10465 else if(targetBits < sizeof(void *) * 8)
10466 _class->structAlignment = 0;
10467 if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
10468 _class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
10469 if(!member && _class->destructionWatchOffset)
10470 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10472 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10474 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10476 if(!dataMember->isProperty)
10478 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
10480 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10486 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10488 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10490 if(!dataMember->isProperty && (dataMember->type != 0 || dataMember->dataTypeString))
10492 if(!isMember && _class->type == 2 && dataMember->dataType)
10494 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
10498 ComputeTypeSize(dataMember->dataType);
10499 if(bitMember->pos == -1)
10500 bitMember->pos = _class->memberOffset;
10501 if(!bitMember->size)
10502 bitMember->size = dataMember->dataType->size * 8;
10503 _class->memberOffset = bitMember->pos + bitMember->size;
10504 for(d = 0; d < bitMember->size; d++)
10510 bitMember->mask = mask << bitMember->pos;
10512 else if(dataMember->type == 0 && dataMember->dataType)
10517 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)))
10518 ComputeTypeSize(dataMember->dataType);
10519 if(dataMember->dataType->bitFieldCount)
10521 bitFields += dataMember->dataType->bitFieldCount;
10528 int size = (bitFields + 7) / 8;
10532 int __simpleStruct0;
10536 short __simpleStruct0;
10538 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10539 if(member->memberOffset % alignment)
10540 member->memberOffset += alignment - (member->memberOffset % alignment);
10542 dataMember->offset = member->memberOffset;
10543 if(member->type == 1)
10544 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10547 member->memberOffset += size;
10554 short __simpleStruct0;
10556 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10557 if(_class->memberOffset % alignment)
10558 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10560 dataMember->offset = _class->memberOffset;
10561 _class->memberOffset += size;
10565 size = dataMember->dataType->size;
10566 alignment = dataMember->dataType->alignment;
10570 int __simpleStruct0;
10574 short __simpleStruct0;
10576 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10577 if(member->memberOffset % alignment)
10578 member->memberOffset += alignment - (member->memberOffset % alignment);
10580 dataMember->offset = member->memberOffset;
10581 if(member->type == 1)
10582 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10585 member->memberOffset += size;
10592 short __simpleStruct0;
10594 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10595 if(_class->memberOffset % alignment)
10596 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10598 dataMember->offset = _class->memberOffset;
10599 _class->memberOffset += size;
10606 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
10607 alignment = dataMember->structAlignment;
10610 int __simpleStruct0;
10614 short __simpleStruct0;
10616 if(member->memberOffset % alignment)
10617 member->memberOffset += alignment - (member->memberOffset % alignment);
10618 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10620 dataMember->offset = member->memberOffset;
10621 if(member->type == 1)
10622 unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10624 member->memberOffset += dataMember->memberOffset;
10630 short __simpleStruct0;
10632 if(_class->memberOffset % alignment)
10633 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10634 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10636 dataMember->offset = _class->memberOffset;
10637 _class->memberOffset += dataMember->memberOffset;
10645 int size = (bitFields + 7) / 8;
10649 int __simpleStruct0;
10653 short __simpleStruct0;
10655 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10656 if(member->memberOffset % alignment)
10657 member->memberOffset += alignment - (member->memberOffset % alignment);
10659 if(member->type == 1)
10660 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10663 member->memberOffset += size;
10670 short __simpleStruct0;
10672 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10673 if(_class->memberOffset % alignment)
10674 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10676 _class->memberOffset += size;
10681 if(member && member->type == 1)
10683 member->memberOffset = unionMemberOffset;
10687 if(_class->type != 2)
10691 if(_class->structAlignment)
10693 if(_class->memberOffset % _class->structAlignment)
10694 extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
10696 _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;
10699 struct __ecereNameSpace__ecere__com__Property * prop;
10701 for(prop = _class->membersAndProperties.first; prop; prop = prop->next)
10703 if(prop->isProperty && prop->isWatchable)
10705 prop->watcherOffset = _class->structSize;
10706 _class->structSize += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10711 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
10713 for(derivative = _class->derivatives.first; derivative; derivative = derivative->next)
10715 struct __ecereNameSpace__ecere__com__Class * deriv = derivative->data;
10717 if(deriv->computeSize)
10719 deriv->offset = (_class->type == 5 ? _class->memberOffset : _class->structSize);
10720 deriv->memberOffset = 0;
10721 deriv->structSize = deriv->offset;
10722 ComputeClassMembers(deriv, 0);
10730 FinishTemplatesContext(context);
10733 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)
10735 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10736 unsigned int totalSize = 0;
10737 unsigned int maxSize = 0;
10740 struct __ecereNameSpace__ecere__com__DataMember * member;
10742 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10746 if(!isMember && _class->base)
10748 maxSize = _class->structSize;
10750 if(_class->type == 1 || _class->type == 5)
10751 AddMembers(neededBy, declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
10754 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
10756 if(maxSize > baseSize)
10757 maxSize -= baseSize;
10763 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
10765 if(!member->isProperty)
10767 switch(member->type)
10771 if(member->dataTypeString)
10773 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
10774 struct Declarator * decl;
10776 decl = SpecDeclFromString(member->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(member->name)));
10777 ListAdd(decls, MkStructDeclarator(decl, (((void *)0))));
10778 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, decls, (((void *)0)))));
10779 if(!member->dataType)
10780 member->dataType = ProcessType(specs, decl);
10781 ReplaceThisClassSpecifiers(specs, topClass);
10783 struct Type * type = ProcessType(specs, decl);
10785 DeclareType(neededBy, member->dataType, 1, 0);
10788 ComputeTypeSize(member->dataType);
10789 size = member->dataType->size;
10790 alignment = member->dataType->alignment;
10793 if(totalSize % alignment)
10794 totalSize += alignment - (totalSize % alignment);
10803 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
10806 sprintf(id, "__anon%d", anonID++);
10808 AddMembers(neededBy, list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
10809 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
10810 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
10811 alignment = member->structAlignment;
10814 if(totalSize % alignment)
10815 totalSize += alignment - (totalSize % alignment);
10825 unsigned int __simpleStruct0;
10827 if(topMember && topMember->type == 1)
10828 *retSize = (__simpleStruct0 = *retSize, (__simpleStruct0 > totalSize) ? __simpleStruct0 : totalSize);
10830 *retSize += totalSize;
10832 else if(totalSize < maxSize && _class->type != 1000)
10834 int autoPadding = 0;
10836 if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
10837 autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
10838 if(totalSize + autoPadding < maxSize)
10840 char sizeString[50];
10842 sprintf(sizeString, "%d", maxSize - totalSize);
10843 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
10849 FinishTemplatesContext(context);
10850 return topMember ? topMember->memberID : _class->memberID;
10853 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)
10858 CheckConstCompatibility(source, dest, 1);
10859 if(source->kind == 20 && dest->kind != 20)
10861 struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
10866 if(dest->kind == 20 && source->kind != 20)
10868 struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
10873 if(dest->classObjectType == 2 && dest->kind != 11)
10875 if(source->classObjectType != 3)
10879 if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
10887 if(source->kind != 11 && source->classObjectType == 3)
10889 if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
10892 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
10894 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))
10897 if(dest->kind == 14 && source->kind != 0)
10899 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))
10901 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))
10903 if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
10905 if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
10907 if(conversions != (((void *)0)))
10909 if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
10914 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
10916 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
10918 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
10920 if(sourceBase == destBase)
10924 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))
10928 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4 && ((source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type != 4) || source->kind == 8))
10930 if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
10937 if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
10941 if(source->kind == 8)
10943 struct __ecereNameSpace__ecere__com__Class * _class;
10945 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
10947 struct __ecereNameSpace__ecere__com__Property * convert;
10949 for(convert = _class->conversions.first; convert; convert = convert->next)
10951 if(convert->memberAccess == 1 || _class->module == privateModule)
10953 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
10955 if(!convert->dataType)
10956 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
10957 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))
10959 if(!conversions && !convert->Get)
10961 else if(conversions != (((void *)0)))
10963 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))
10967 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
10969 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
10978 if(dest->kind == 8)
10980 struct __ecereNameSpace__ecere__com__Class * _class;
10982 for(_class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
10984 struct __ecereNameSpace__ecere__com__Property * convert;
10986 for(convert = _class->conversions.first; convert; convert = convert->next)
10988 if(convert->memberAccess == 1 || _class->module == privateModule)
10990 struct Type * constType = (((void *)0));
10991 unsigned int success = 0;
10993 if(!convert->dataType)
10994 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
10995 if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
10997 struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
10999 constType = __extension__ ({
11000 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11002 __ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
11004 CopyTypeInto(ptrType, convert->dataType->__anon1.type);
11005 ptrType->constant = 1;
11007 if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
11009 if(!conversions && !convert->Set)
11011 else if(conversions != (((void *)0)))
11013 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))
11017 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
11019 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
11025 FreeType(constType);
11031 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
11033 if(!dest->__anon1._class->__anon1.registered->dataType)
11034 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
11035 if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
11037 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))
11044 if(source->kind == 8)
11046 struct __ecereNameSpace__ecere__com__Class * _class;
11048 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11050 struct __ecereNameSpace__ecere__com__Property * convert;
11052 for(convert = _class->conversions.first; convert; convert = convert->next)
11054 if(convert->memberAccess == 1 || _class->module == privateModule)
11056 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11058 if(!convert->dataType)
11059 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11060 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))
11062 if(!conversions && !convert->Get)
11064 else if(conversions != (((void *)0)))
11066 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))
11070 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11072 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11080 if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
11082 if(!source->__anon1._class->__anon1.registered->dataType)
11083 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
11084 if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
11086 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))
11088 else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
11094 if(source->kind == 8 || source->kind == 19)
11096 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
11098 else if(dest->kind == 7 && source->kind == 6)
11100 else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
11102 else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
11104 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
11106 else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
11108 else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
11110 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))
11112 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))
11114 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)))
11116 struct Type * paramSource, * paramDest;
11118 if(dest->kind == 16)
11119 owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
11120 if(source->kind == 16)
11121 owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
11122 if(dest->kind == 13 && dest->__anon1.type->kind == 11)
11123 dest = dest->__anon1.type;
11124 if(source->kind == 13 && source->__anon1.type->kind == 11)
11125 source = source->__anon1.type;
11126 if(dest->kind == 16)
11127 dest = dest->__anon1.__anon3.method->dataType;
11128 if(source->kind == 16)
11129 source = source->__anon1.__anon3.method->dataType;
11130 paramSource = source->__anon1.__anon2.params.first;
11131 if(paramSource && paramSource->kind == 0)
11132 paramSource = (((void *)0));
11133 paramDest = dest->__anon1.__anon2.params.first;
11134 if(paramDest && paramDest->kind == 0)
11135 paramDest = (((void *)0));
11136 if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11138 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))))
11140 if(paramDest && paramDest->kind == 8)
11141 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
11143 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
11146 paramDest = paramDest->next;
11148 else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
11150 if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11152 if(dest->__anon1.__anon2.thisClass)
11154 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
11156 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11162 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
11164 if(owningClassDest)
11165 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
11167 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
11171 paramSource = paramSource->next;
11175 if(dest->__anon1.__anon2.thisClass)
11177 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
11179 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11185 if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
11187 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
11193 if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11195 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
11199 CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
11200 for(; paramDest; paramDest = paramDest->next)
11204 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
11208 struct Type * paramDestType = paramDest;
11209 struct Type * paramSourceType = paramSource;
11210 struct Type * type = paramDestType;
11212 if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
11215 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
11216 struct __ecereNameSpace__ecere__com__Class * sClass;
11218 for(sClass = owningClassSource; sClass; sClass = sClass->base)
11221 if(sClass->templateClass)
11222 sClass = sClass->templateClass;
11223 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
11225 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
11227 for(sClass = sClass->base; sClass; sClass = sClass->base)
11229 if(sClass->templateClass)
11230 sClass = sClass->templateClass;
11231 id += sClass->templateParams.count;
11242 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
11244 paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
11247 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)))
11252 PrintType(paramDest, type, 0, 1);
11253 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
11254 if(paramDestType != paramDest)
11255 FreeType(paramDestType);
11258 if(paramDestType != paramDest)
11259 FreeType(paramDestType);
11261 paramSource = paramSource->next;
11265 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
11270 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
11274 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
11276 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))
11278 ComputeTypeSize(source->__anon1.type);
11279 ComputeTypeSize(dest->__anon1.type);
11280 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))
11288 void ComputeInstantiation(struct Expression * exp)
11290 struct Instantiation * inst = exp->__anon1.instance;
11291 struct MembersInit * members;
11292 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11293 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11294 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11295 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11296 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11297 int subMemberStackPos = 0;
11300 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11304 if(_class->type == 0 || _class->type == 5)
11306 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11307 if(_class->type == 0)
11308 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11311 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11315 for(members = (*inst->members).first; members; members = members->next)
11317 switch(members->type)
11321 if(members->__anon1.dataMembers)
11323 struct MemberInit * member;
11325 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11327 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11328 unsigned int found = 0;
11329 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11330 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11331 unsigned int dataMemberOffset;
11335 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11338 if(curMember->isProperty)
11339 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11342 dataMember = curMember;
11343 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11344 if(_class->type == 0)
11345 dataMemberOffset += _class->base->structSize;
11352 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11356 if(prop->memberAccess == 1)
11358 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11359 curClass = prop->_class;
11364 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11365 int _subMemberStackPos = 0;
11367 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11371 if(dataMember->memberAccess == 1)
11373 curMember = dataMember;
11374 curClass = dataMember->_class;
11375 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11376 subMemberStackPos = _subMemberStackPos;
11381 if(found && member->initializer && member->initializer->type == 0)
11383 struct Expression * value = member->initializer->__anon1.exp;
11384 struct Type * type = (((void *)0));
11385 unsigned int deepMember = 0;
11389 type = prop->dataType;
11391 else if(dataMember)
11393 if(!dataMember->dataType)
11394 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11395 type = dataMember->dataType;
11397 if(ident && ident->next)
11400 for(ident = ident->next; ident && type; ident = ident->next)
11402 if(type->kind == 8)
11404 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11406 type = prop->dataType;
11409 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11411 type = dataMember->dataType;
11414 else if(type->kind == 9 || type->kind == 10)
11416 struct Type * memberType;
11418 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11420 if(!strcmp(memberType->name, ident->string))
11431 FreeType(value->destType);
11432 value->destType = type;
11435 ComputeExpression(value);
11437 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11439 if(type->kind == 8)
11441 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11443 if(_class && (_class->type == 2 || _class->type == 3 || _class->type == 4))
11445 if(!_class->dataType)
11446 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11447 type = _class->dataType;
11452 void * ptr = inst->data + dataMemberOffset;
11454 if(value->type == 2)
11460 GetInt(value, (int *)ptr);
11465 GetInt64(value, (long long *)ptr);
11470 GetIntPtr(value, (intptr_t *)ptr);
11475 GetIntSize(value, (ssize_t *)ptr);
11480 GetFloat(value, (float *)ptr);
11485 GetDouble(value, (double *)ptr);
11490 else if(value->type == 1)
11492 if(type->kind == 8)
11494 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11496 if(_class->type == 1)
11498 ComputeTypeSize(type);
11499 if(value->__anon1.instance->data)
11500 memcpy(ptr, value->__anon1.instance->data, type->size);
11505 else if(prop && prop->Set != (void *)(intptr_t)1)
11507 if(value->type == 1 && value->__anon1.instance->data)
11509 if(type->kind == 8)
11511 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11513 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)))
11515 void (* Set)(void *, void *) = (void *)prop->Set;
11517 Set(inst->data, value->__anon1.instance->data);
11518 PopulateInstance(inst);
11522 else if(value->type == 2)
11528 void (* Set)(void *, double) = (void *)prop->Set;
11530 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11535 void (* Set)(void *, float) = (void *)prop->Set;
11537 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11542 void (* Set)(void *, int) = (void *)prop->Set;
11544 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11549 void (* Set)(void *, long long) = (void *)prop->Set;
11551 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11556 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11558 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11563 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11565 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11570 else if(value->type == 3)
11574 ReadString(temp, value->__anon1.__anon2.string);
11575 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11579 else if(!deepMember && type && _class->type == 3)
11583 if(value->type == 2)
11585 if(type->kind == 8)
11587 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11589 if(_class->type == 3)
11591 if(!_class->dataType)
11592 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11593 type = _class->dataType;
11601 float (* Set)(float) = (void *)prop->Set;
11603 GetFloat(member->initializer->__anon1.exp, &fValue);
11604 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11611 double (* Set)(double) = (void *)prop->Set;
11613 GetDouble(member->initializer->__anon1.exp, &dValue);
11614 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11622 else if(!deepMember && type && _class->type == 2)
11626 if(value->type == 1 && value->__anon1.instance->data)
11628 unsigned int (* Set)(void *) = (void *)prop->Set;
11630 bits = Set(value->__anon1.instance->data);
11632 else if(value->type == 2)
11636 else if(dataMember)
11638 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11639 struct Type * type;
11642 bits = (bits & ~bitMember->mask);
11643 if(!bitMember->dataType)
11644 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11645 type = bitMember->dataType;
11646 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11648 if(!type->__anon1._class->__anon1.registered->dataType)
11649 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11650 type = type->__anon1._class->__anon1.registered->dataType;
11659 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11667 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11676 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11684 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11692 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11700 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11705 bits |= part << bitMember->pos;
11711 if(_class && _class->type == 3)
11713 ComputeExpression(member->initializer->__anon1.exp);
11714 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11716 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11726 if(_class && _class->type == 2)
11728 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11733 FreeInstance(inst);
11737 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11739 if(exp->__anon1.op.op == SIZEOF)
11741 FreeExpContents(exp);
11743 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11747 if(!exp->__anon1.op.exp1)
11749 switch(exp->__anon1.op.op)
11753 struct Expression * exp2 = exp->__anon1.op.exp2;
11755 exp->__anon1.op.exp2 = (((void *)0));
11756 FreeExpContents(exp);
11757 FreeType(exp->expType);
11758 FreeType(exp->destType);
11760 ((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
11766 FreeExpContents(exp);
11767 op1->ops.Neg(exp, op1);
11771 if(op1->ops.BitNot)
11773 FreeExpContents(exp);
11774 op1->ops.BitNot(exp, op1);
11780 FreeExpContents(exp);
11781 op1->ops.Not(exp, op1);
11788 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11790 if(Promote(op2, op1->kind, op1->type->isSigned))
11791 op2->kind = op1->kind, op2->ops = op1->ops;
11792 else if(Promote(op1, op2->kind, op2->type->isSigned))
11793 op1->kind = op2->kind, op1->ops = op2->ops;
11795 switch(exp->__anon1.op.op)
11800 FreeExpContents(exp);
11801 op1->ops.Add(exp, op1, op2);
11807 FreeExpContents(exp);
11808 op1->ops.Sub(exp, op1, op2);
11814 FreeExpContents(exp);
11815 op1->ops.Mul(exp, op1, op2);
11821 FreeExpContents(exp);
11822 op1->ops.Div(exp, op1, op2);
11828 FreeExpContents(exp);
11829 op1->ops.Mod(exp, op1, op2);
11833 if(exp->__anon1.op.exp2)
11835 if(op1->ops.BitAnd)
11837 FreeExpContents(exp);
11838 op1->ops.BitAnd(exp, op1, op2);
11845 FreeExpContents(exp);
11846 op1->ops.BitOr(exp, op1, op2);
11850 if(op1->ops.BitXor)
11852 FreeExpContents(exp);
11853 op1->ops.BitXor(exp, op1, op2);
11857 if(op1->ops.LShift)
11859 FreeExpContents(exp);
11860 op1->ops.LShift(exp, op1, op2);
11864 if(op1->ops.RShift)
11866 FreeExpContents(exp);
11867 op1->ops.RShift(exp, op1, op2);
11873 FreeExpContents(exp);
11874 op1->ops.Equ(exp, op1, op2);
11880 FreeExpContents(exp);
11881 op1->ops.Nqu(exp, op1, op2);
11887 FreeExpContents(exp);
11888 op1->ops.And(exp, op1, op2);
11894 FreeExpContents(exp);
11895 op1->ops.Or(exp, op1, op2);
11901 FreeExpContents(exp);
11902 op1->ops.Grt(exp, op1, op2);
11908 FreeExpContents(exp);
11909 op1->ops.Sma(exp, op1, op2);
11913 if(op1->ops.GrtEqu)
11915 FreeExpContents(exp);
11916 op1->ops.GrtEqu(exp, op1, op2);
11920 if(op1->ops.SmaEqu)
11922 FreeExpContents(exp);
11923 op1->ops.SmaEqu(exp, op1, op2);
11931 void ApplyAnyObjectLogic(struct Expression * e)
11933 struct Type * destType = e->destType;
11935 if(destType && (destType->classObjectType == 3))
11937 if(e && e->expType)
11939 struct Type * type = e->expType;
11940 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
11942 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11944 _class = type->__anon1._class->__anon1.registered;
11946 else if(type->kind == 19)
11948 _class = FindClass("ecere::com::Class")->__anon1.registered;
11952 char string[1024] = "";
11953 struct Symbol * classSym;
11955 PrintTypeNoConst(type, string, 0, 1);
11956 classSym = FindClass(string);
11958 _class = classSym->__anon1.registered;
11960 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)))
11962 if(!_class || strcmp(_class->fullName, "char *"))
11964 struct Expression * checkedExp = e, * newExp;
11966 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
11968 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
11970 if(checkedExp->type == 23)
11972 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
11975 checkedExp = (*checkedExp->__anon1.list).last;
11977 else if(checkedExp->type == 11)
11978 checkedExp = checkedExp->__anon1.cast.exp;
11980 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
11982 newExp = checkedExp->__anon1.op.exp2;
11983 checkedExp->__anon1.op.exp2 = (((void *)0));
11984 FreeExpContents(checkedExp);
11985 if(e->expType && e->expType->passAsTemplate)
11989 ComputeTypeSize(e->expType);
11990 sprintf(size, "%d", e->expType->size);
11991 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))))));
11993 ReplaceExpContents(checkedExp, newExp);
11994 e->byReference = 1;
11996 else if(!e->byReference || (_class && _class->type == 5))
11998 struct Expression * checkedExp;
12001 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;
12003 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
12005 struct Context * context = PushContext();
12006 struct Declarator * decl;
12007 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12008 char typeString[1024];
12009 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12011 typeString[0] = '\0';
12013 newExp->prev = (((void *)0));
12014 newExp->next = (((void *)0));
12015 newExp->expType = (((void *)0));
12016 PrintTypeNoConst(e->expType, typeString, 0, 1);
12017 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12018 newExp->destType = ProcessType(specs, decl);
12019 curContext = context;
12023 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
12026 sprintf(name, "__internalValue%03X", internalValueCounter++);
12027 if(!curCompound->__anon1.compound.declarations)
12028 curCompound->__anon1.compound.declarations = MkList();
12029 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
12030 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
12031 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
12032 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
12035 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
12037 struct Type * type = e->destType;
12039 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12040 CopyTypeInto(e->destType, type);
12041 e->destType->refCount = 1;
12042 e->destType->classObjectType = 0;
12045 e->__anon1.compound->__anon1.compound.context = context;
12046 PopContext(context);
12047 curContext = context->parent;
12051 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12053 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12055 if(checkedExp->type == 23)
12057 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12060 checkedExp = (*checkedExp->__anon1.list).last;
12062 else if(checkedExp->type == 11)
12063 checkedExp = checkedExp->__anon1.cast.exp;
12066 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12068 *operand = *checkedExp;
12069 __ecereMethod_Expression_Clear(checkedExp);
12070 checkedExp->destType = ProcessTypeString("void *", 0);
12071 checkedExp->expType = checkedExp->destType;
12072 checkedExp->destType->refCount++;
12073 checkedExp->type = 4;
12074 checkedExp->__anon1.op.op = '&';
12075 checkedExp->__anon1.op.exp1 = (((void *)0));
12076 checkedExp->__anon1.op.exp2 = operand;
12085 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))))
12087 if(e->expType->classObjectType && destType && destType->classObjectType)
12093 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12096 thisExp->prev = (((void *)0));
12097 thisExp->next = (((void *)0));
12098 __ecereMethod_Expression_Clear(e);
12100 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
12101 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
12102 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
12104 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12105 CopyTypeInto(e->expType, thisExp->expType);
12106 e->expType->byReference = 0;
12107 e->expType->refCount = 1;
12108 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))
12110 e->expType->classObjectType = 0;
12115 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
12117 if(destType->kind == 14)
12119 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
12121 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))
12123 unsigned int byReference = e->expType->byReference;
12124 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12125 struct Declarator * decl;
12126 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12127 char typeString[1024];
12128 struct Type * type;
12129 int backupClassObjectType;
12130 unsigned int backupByReference;
12132 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
12136 backupClassObjectType = type->classObjectType;
12137 backupByReference = type->byReference;
12138 type->classObjectType = 0;
12139 type->byReference = 0;
12140 typeString[0] = '\0';
12141 PrintType(type, typeString, 0, 1);
12142 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12143 type->classObjectType = backupClassObjectType;
12144 type->byReference = backupByReference;
12146 thisExp->prev = (((void *)0));
12147 thisExp->next = (((void *)0));
12148 __ecereMethod_Expression_Clear(e);
12149 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)))
12151 unsigned int passAsTemplate = thisExp->destType->passAsTemplate;
12154 destType->refCount++;
12156 e->__anon1.op.op = '*';
12157 e->__anon1.op.exp1 = (((void *)0));
12158 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
12159 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12160 CopyTypeInto(t, thisExp->destType);
12161 t->passAsTemplate = 0;
12162 FreeType(thisExp->destType);
12163 thisExp->destType = t;
12164 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12165 CopyTypeInto(t, destType);
12166 t->passAsTemplate = passAsTemplate;
12167 FreeType(destType);
12169 destType->refCount = 0;
12170 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12171 CopyTypeInto(e->expType, type);
12172 if(type->passAsTemplate)
12174 e->expType->classObjectType = 0;
12175 e->expType->passAsTemplate = 0;
12177 e->expType->byReference = 0;
12178 e->expType->refCount = 1;
12183 e->__anon1.cast.typeName = MkTypeName(specs, decl);
12184 e->__anon1.cast.exp = thisExp;
12185 e->byReference = 1;
12190 FreeType(e->destType);
12191 e->destType = destType;
12192 destType->refCount++;
12197 void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module)
12199 struct __ecereNameSpace__ecere__com__Class * _class;
12200 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
12202 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
12203 ComputeModuleClasses(subModule->data);
12204 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->classes.first; _class; _class = _class->next)
12205 ComputeClassMembers(_class, 0);
12208 int ComputeTypeSize(struct Type * type)
12210 unsigned int size = type ? type->size : 0;
12212 if(!size && type && !type->computing)
12214 type->computing = 1;
12218 type->alignment = size = sizeof(char);
12221 type->alignment = size = sizeof(char);
12224 type->alignment = size = sizeof(int);
12227 type->alignment = size = sizeof(long long);
12230 type->alignment = size = targetBits / 8;
12231 type->pointerAlignment = 1;
12234 type->alignment = size = targetBits / 8;
12235 type->pointerAlignment = 1;
12238 type->alignment = size = sizeof(long);
12241 type->alignment = size = sizeof(short);
12244 type->alignment = size = sizeof(float);
12247 type->alignment = size = sizeof(double);
12251 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
12253 if(_class && _class->type == 1)
12255 ComputeClassMembers(_class, 0);
12256 type->alignment = _class->structAlignment;
12257 type->pointerAlignment = (unsigned int)_class->pointerAlignment;
12258 size = _class->structSize;
12259 if(type->alignment && size % type->alignment)
12260 size += type->alignment - (size % type->alignment);
12262 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
12264 if(!_class->dataType)
12265 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12266 size = type->alignment = ComputeTypeSize(_class->dataType);
12270 size = type->alignment = targetBits / 8;
12271 type->pointerAlignment = 1;
12277 size = type->alignment = targetBits / 8;
12278 type->pointerAlignment = 1;
12281 if(type->__anon1.__anon4.arraySizeExp)
12283 ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
12284 ComputeExpression(type->__anon1.__anon4.arraySizeExp);
12285 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)))
12287 struct Location oldLoc = yylloc;
12288 char expression[10240];
12290 expression[0] = '\0';
12291 type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
12292 yylloc = type->__anon1.__anon4.arraySizeExp->loc;
12294 PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
12295 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
12298 GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
12300 else if(type->__anon1.__anon4.enumClass)
12302 if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
12304 type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
12307 type->__anon1.__anon4.arraySize = 0;
12311 type->__anon1.__anon4.arraySize = 0;
12313 size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
12314 if(type->__anon1.type)
12316 type->alignment = type->__anon1.type->alignment;
12317 type->pointerAlignment = type->__anon1.type->pointerAlignment;
12322 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12324 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12326 if(symbol && symbol->type)
12328 ComputeTypeSize(symbol->type);
12329 size = symbol->type->size;
12334 struct Type * member;
12336 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12338 int __simpleStruct0, __simpleStruct1;
12339 unsigned int addSize = ComputeTypeSize(member);
12341 member->offset = size;
12342 if(member->alignment && size % member->alignment)
12343 member->offset += member->alignment - (size % member->alignment);
12344 size = member->offset;
12345 if(member->pointerAlignment && type->size <= 4)
12346 type->pointerAlignment = 1;
12347 else if(!member->pointerAlignment && member->alignment >= 8)
12348 type->pointerAlignment = 0;
12349 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12352 if(type->alignment && size % type->alignment)
12353 size += type->alignment - (size % type->alignment);
12359 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12361 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12363 if(symbol && symbol->type)
12365 ComputeTypeSize(symbol->type);
12366 size = symbol->type->size;
12367 type->alignment = symbol->type->alignment;
12372 struct Type * member;
12374 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12376 int __simpleStruct0, __simpleStruct1;
12377 unsigned int addSize = ComputeTypeSize(member);
12379 member->offset = size;
12380 if(member->alignment && size % member->alignment)
12381 member->offset += member->alignment - (size % member->alignment);
12382 size = member->offset;
12383 if(member->pointerAlignment && type->size <= 4)
12384 type->pointerAlignment = 1;
12385 else if(!member->pointerAlignment && member->alignment >= 8)
12386 type->pointerAlignment = 0;
12387 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12388 size = ((size > addSize) ? size : addSize);
12390 if(type->alignment && size % type->alignment)
12391 size += type->alignment - (size % type->alignment);
12397 struct TemplateParameter * param = type->__anon1.templateParameter;
12398 struct Type * baseType = ProcessTemplateParameterType(param);
12402 size = ComputeTypeSize(baseType);
12403 type->alignment = baseType->alignment;
12404 type->pointerAlignment = baseType->pointerAlignment;
12407 type->alignment = size = sizeof(uint64);
12412 type->alignment = size = sizeof(enum
12420 type->alignment = size = targetBits / 8;
12421 type->pointerAlignment = 1;
12426 type->computing = 0;
12431 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl)
12433 struct External * external = (((void *)0));
12434 struct Symbol * classSym = FindClass(name);
12435 struct __ecereNameSpace__ecere__sys__OldList * curDeclarations = (((void *)0));
12437 if(!inCompiler || !classSym)
12438 return (((void *)0));
12439 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
12440 return (((void *)0));
12441 if(!classSym->__anon1.registered || (classSym->__anon1.registered->type == 0 && classSym->__anon1.registered->structSize && classSym->__anon1.registered->base && classSym->__anon1.registered->base->base))
12442 _DeclareStruct(neededBy, "ecere::com::Instance", 0, 1, fwdDecl);
12443 external = classSym->__anon2.__anon1.structExternal;
12444 if(external && external->__anon1.declaration)
12446 struct Specifier * spec;
12448 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12449 if(spec->type == 3 || spec->type == 4)
12451 curDeclarations = spec->__anon1.__anon2.definitions;
12455 if(classSym->__anon1.registered && !classSym->declaring && classSym->imported && (!classSym->declaredStructSym || (classSym->__anon1.registered->type == 5 && !skipNoHead && external && !curDeclarations)))
12457 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12458 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
12459 char structName[1024];
12460 unsigned int addedPadding = 0;
12461 struct Specifier * curSpec = (((void *)0));
12463 classSym->declaring++;
12464 if(strchr(classSym->string, '<'))
12466 if(classSym->__anon1.registered->templateClass)
12467 external = _DeclareStruct(neededBy, classSym->__anon1.registered->templateClass->fullName, skipNoHead, needDereference, fwdDecl);
12468 classSym->declaring--;
12472 FullClassNameCat(structName, name, 0);
12473 classSym->declaredStructSym = 1;
12474 if(!external || (classSym->__anon1.registered->type == 5 && !skipNoHead && !curDeclarations))
12476 unsigned int add = 0;
12480 external = MkExternalDeclaration((((void *)0)));
12481 classSym->__anon2.__anon1.structExternal = external;
12482 external->symbol = classSym;
12487 declarations = MkList();
12488 AddMembers(external, declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
12490 if(external->__anon1.declaration)
12492 struct Specifier * spec;
12494 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12495 if(spec->type == 3 || spec->type == 4)
12498 curDeclarations = spec->__anon1.__anon2.definitions;
12502 if(declarations && (!(*declarations).count || ((*declarations).count == 1 && addedPadding)))
12504 FreeList(declarations, (void *)(FreeClassDef));
12505 declarations = (((void *)0));
12507 if(classSym->__anon1.registered->type != 5 && !declarations)
12509 FreeExternal(external);
12510 external = (((void *)0));
12511 classSym->__anon2.__anon1.structExternal = (((void *)0));
12516 curSpec->__anon1.__anon2.definitions = declarations;
12519 specifiers = MkList();
12520 declarators = MkList();
12521 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
12522 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12525 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12528 classSym->declaring--;
12530 else if(!classSym->declaredStructSym && classSym->__anon2.__anon1.structExternal)
12532 classSym->declaredStructSym = 1;
12533 if(classSym->__anon1.registered)
12534 DeclareMembers(classSym->__anon2.__anon1.structExternal, classSym->__anon1.registered, 0);
12535 if(classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
12537 struct Specifier * spec;
12539 for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
12541 if(spec->__anon1.__anon2.definitions)
12542 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
12546 if(inCompiler && neededBy && (external || !classSym->imported))
12550 classSym->__anon2.__anon1.structExternal = external = MkExternalDeclaration((((void *)0)));
12551 external->symbol = classSym;
12552 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12554 if(reachedPass15 && !external->__anon1.declaration && classSym->__anon1.registered && classSym->__anon1.registered->type == 5)
12556 char structName[1024];
12557 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12560 FullClassNameCat(structName, name, 0);
12561 specifiers = MkList();
12562 declarators = MkList();
12563 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))));
12564 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12568 struct External * e = external->fwdDecl ? external->fwdDecl : external;
12570 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)e->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
12571 __ecereMethod_External_CreateUniqueEdge(neededBy, e, !needDereference && !external->fwdDecl);
12574 __ecereMethod_External_CreateUniqueEdge(neededBy, external, !needDereference);
12579 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)
12581 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
12582 unsigned int found = 0;
12583 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
12584 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
12585 unsigned int freeType = 0;
12587 yylloc = member->loc;
12592 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
12596 dataMember = *curMember;
12602 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
12603 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
12604 int _subMemberStackPos = 0;
12607 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, ident->string, privateModule, _subMemberStack, &_subMemberStackPos);
12610 dataMember = thisMember;
12611 if(curMember && thisMember->memberAccess == 1)
12613 *curMember = thisMember;
12614 *curClass = thisMember->_class;
12615 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
12616 *subMemberStackPos = _subMemberStackPos;
12622 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
12623 if(method && method->type == 1)
12626 method = (((void *)0));
12631 struct Type * type = (((void *)0));
12635 if(!dataMember->dataType && dataMember->dataTypeString)
12637 struct Context * context = SetupTemplatesContext(_class);
12639 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
12640 FinishTemplatesContext(context);
12642 type = dataMember->dataType;
12646 if(!method->dataType)
12647 ProcessMethodType(method);
12648 type = method->dataType;
12650 if(ident && ident->next)
12652 for(ident = ident->next; ident && type; ident = ident->next)
12654 if(type->kind == 8)
12656 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
12658 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
12660 type = dataMember->dataType;
12662 else if(type->kind == 9 || type->kind == 10)
12664 struct Type * memberType;
12666 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
12668 if(!strcmp(memberType->name, ident->string))
12677 if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
12680 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
12681 struct __ecereNameSpace__ecere__com__Class * sClass;
12683 for(sClass = _class; sClass; sClass = sClass->base)
12686 if(sClass->templateClass)
12687 sClass = sClass->templateClass;
12688 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
12690 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
12692 for(sClass = sClass->base; sClass; sClass = sClass->base)
12694 if(sClass->templateClass)
12695 sClass = sClass->templateClass;
12696 id += sClass->templateParams.count;
12707 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
12709 if(arg.__anon1.__anon1.dataTypeString)
12711 unsigned int constant = type->constant;
12713 type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
12714 if(type->kind == 8 && constant)
12715 type->constant = 1;
12716 else if(type->kind == 13)
12718 struct Type * t = type->__anon1.type;
12720 while(t->kind == 13)
12721 t = t->__anon1.type;
12723 t->constant = constant;
12726 if(type && _class->templateClass)
12727 type->passAsTemplate = 1;
12734 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
12736 struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
12737 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
12738 int paramCount = 0;
12739 int lastParam = -1;
12740 char templateString[1024];
12741 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
12743 sprintf(templateString, "%s<", expClass->templateClass->fullName);
12744 for(cClass = expClass; cClass; cClass = cClass->base)
12748 if(cClass->templateClass)
12749 cClass = cClass->templateClass;
12750 for(param = cClass->templateParams.first; param; param = param->next)
12753 struct __ecereNameSpace__ecere__com__Class * sClass;
12754 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
12756 for(sClass = cClass->base; sClass; sClass = sClass->base)
12758 if(sClass->templateClass)
12759 sClass = sClass->templateClass;
12760 id += sClass->templateParams.count;
12762 arg = expClass->templateArgs[id];
12763 for(sClass = _class; sClass; sClass = sClass->base)
12765 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
12767 struct __ecereNameSpace__ecere__com__Class * nextClass;
12769 if(sClass->templateClass)
12770 sClass = sClass->templateClass;
12771 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
12773 if(nextClass->templateClass)
12774 nextClass = nextClass->templateClass;
12775 p += nextClass->templateParams.count;
12777 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
12779 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
12781 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12783 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
12784 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
12791 char argument[256];
12793 argument[0] = '\0';
12794 switch(param->type)
12798 char expString[1024];
12799 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12800 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
12801 struct Expression * exp;
12802 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
12804 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
12805 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
12806 ProcessExpressionType(exp);
12807 ComputeExpression(exp);
12808 expString[0] = '\0';
12809 PrintExpression(exp, expString);
12810 strcat(argument, expString);
12811 FreeExpression(exp);
12816 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
12821 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12822 strcat(argument, arg.__anon1.__anon1.dataTypeString);
12829 strcat(templateString, ", ");
12830 if(lastParam != p - 1)
12832 strcat(templateString, param->name);
12833 strcat(templateString, " = ");
12835 strcat(templateString, argument);
12844 int len = strlen(templateString);
12846 if(templateString[len - 1] == '<')
12850 if(templateString[len - 1] == '>')
12851 templateString[len++] = ' ';
12852 templateString[len++] = '>';
12854 templateString[len++] = '\0';
12857 struct Context * context = SetupTemplatesContext(_class);
12861 type = ProcessTypeString(templateString, 0);
12863 FinishTemplatesContext(context);
12866 if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
12868 ProcessExpressionType(member->initializer->__anon1.exp);
12869 if(!member->initializer->__anon1.exp->expType)
12873 char expString[10240];
12875 expString[0] = '\0';
12876 PrintExpression(member->initializer->__anon1.exp, expString);
12877 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
12878 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
12881 else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
12883 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
12886 else if(member->initializer)
12888 ProcessInitializer(member->initializer, type);
12895 if(_class && _class->type == 3)
12897 if(member->initializer)
12899 struct Type * type = MkClassType(_class->fullName);
12901 ProcessInitializer(member->initializer, type);
12907 if(member->initializer)
12909 ProcessInitializer(member->initializer, (((void *)0)));
12915 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12919 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12921 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
12925 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
12930 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
12932 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
12934 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)))
12936 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
12938 if(_class->type == 4)
12940 struct __ecereNameSpace__ecere__sys__OldList converts =
12944 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12947 if(!_class->symbol)
12948 _class->symbol = FindClass(_class->fullName);
12949 type->__anon1._class = _class->symbol;
12950 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))
12952 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
12953 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
12957 struct __ecereNameSpace__ecere__com__Class * baseClass;
12959 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
12961 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
12963 for(value = e->values.first; value; value = value->next)
12965 if(!strcmp(value->name, string))
12970 FreeType(sourceExp->expType);
12971 sourceExp->isConstant = 1;
12972 sourceExp->expType = MkClassType(baseClass->fullName);
12973 if(inCompiler || inPreCompiler || inDebugger)
12975 char constant[256];
12977 FreeExpContents(sourceExp);
12978 sourceExp->type = 2;
12979 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
12980 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
12982 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
12983 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
12985 while(converts.first)
12987 struct Conversion * convert = converts.first;
12989 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
12990 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
12992 ((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
12999 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
13000 ((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
13003 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)))
13004 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
13009 void ComputeExpression(struct Expression * exp)
13015 struct Identifier * id = exp->__anon1.__anon1.identifier;
13017 if(id && exp->isConstant && !inCompiler && !inPreCompiler && !inDebugger)
13019 struct __ecereNameSpace__ecere__com__Class * c = (exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
13021 if(c && c->type == 4)
13023 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13027 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13028 struct __ecereNameSpace__ecere__com__EnumClassData * e = (c ? ((void *)(((char *)c->data) + enumClass->offsetClass)) : (((void *)0)));
13030 for(value = e->values.first; value; value = value->next)
13032 if(!strcmp(value->name, id->string))
13037 const char * dts = c->dataTypeString;
13039 FreeExpContents(exp);
13041 exp->__anon1.__anon1.constant = (dts && (!strcmp(dts, "int") || !strcmp(dts, "int64") || !strcmp(dts, "short") || !strcmp(dts, "char"))) ? PrintInt64(value->data) : PrintUInt64(value->data);
13050 ComputeInstantiation(exp);
13055 struct Expression * exp1, * exp2 = (((void *)0));
13056 struct Operand op1 =
13063 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13066 struct Operand op2 =
13073 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13077 if(exp->__anon1.op.exp2)
13079 struct Expression * e = exp->__anon1.op.exp2;
13081 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
13083 if(e->type == 5 || e->type == 32 || e->type == 23)
13086 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13088 e = (*e->__anon1.list).last;
13091 if(exp->__anon1.op.op == 261 && e && e->expType)
13093 if(e->type == 3 && e->__anon1.__anon2.string)
13095 char * string = e->__anon1.__anon2.string;
13096 int len = strlen(string);
13097 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
13099 len = UnescapeString(tmp, string + 1, len - 2);
13100 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
13101 FreeExpContents(exp);
13103 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
13107 struct Type * type = e->expType;
13110 FreeExpContents(exp);
13112 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13118 ComputeExpression(exp->__anon1.op.exp2);
13120 if(exp->__anon1.op.exp1)
13122 ComputeExpression(exp->__anon1.op.exp1);
13123 exp1 = exp->__anon1.op.exp1;
13124 exp2 = exp->__anon1.op.exp2;
13125 op1 = GetOperand(exp1);
13127 op1.type->refCount++;
13130 op2 = GetOperand(exp2);
13132 op2.type->refCount++;
13137 exp1 = exp->__anon1.op.exp2;
13138 op1 = GetOperand(exp1);
13140 op1.type->refCount++;
13142 CallOperator(exp, exp1, exp2, &op1, &op2);
13144 FreeType(op1.type);
13146 FreeType(op2.type);
13152 struct Expression * e, * n;
13154 for(e = (*exp->__anon1.list).first; e; e = n)
13159 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
13160 struct Expression * prev = exp->prev;
13161 struct Expression * next = exp->next;
13163 ComputeExpression(e);
13164 FreeType(exp->expType);
13165 FreeType(exp->destType);
13169 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
13170 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
13181 struct Expression * memberExp = exp->__anon1.member.exp;
13182 struct Identifier * memberID = exp->__anon1.member.member;
13183 struct Type * type;
13185 ComputeExpression(exp->__anon1.member.exp);
13186 type = exp->__anon1.member.exp->expType;
13189 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)));
13190 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13191 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13192 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
13194 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
13195 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
13199 struct Symbol * classSym;
13202 PrintTypeNoConst(type, string, 0, 1);
13203 classSym = FindClass(string);
13204 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13206 if(exp->__anon1.member.member)
13208 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
13210 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
13212 if(!prop && !member && _class && exp->__anon1.member.member)
13214 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
13216 convertTo = _class;
13217 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13218 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
13224 struct Type * type = prop->dataType;
13226 if(_class->type == 3)
13228 if(type->kind == 8)
13230 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13232 if(_class->type == 3)
13234 if(!_class->dataType)
13235 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13236 type = _class->dataType;
13244 float (* Get)(float) = (void *)prop->Get;
13246 GetFloat(exp->__anon1.member.exp, &value);
13247 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
13254 double (* Get)(double);
13256 GetDouble(exp->__anon1.member.exp, &value);
13258 Get = (void *)prop->Set;
13260 Get = (void *)prop->Get;
13261 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
13271 struct Expression * value = exp->__anon1.member.exp;
13272 struct Type * type;
13274 if(!prop->dataType)
13275 ProcessPropertyType(prop);
13276 type = prop->dataType;
13280 else if(_class->type == 1)
13286 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13288 if(propertyClass->type == 1 && value->type == 1)
13290 void (* Set)(void *, void *) = (void *)prop->Set;
13292 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13293 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13294 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13295 exp->__anon1.instance->loc = exp->loc;
13297 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
13298 PopulateInstance(exp->__anon1.instance);
13305 void (* Set)(void *, int) = (void *)prop->Set;
13307 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13308 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13309 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13310 exp->__anon1.instance->loc = exp->loc;
13312 GetInt(value, &intValue);
13313 Set(exp->__anon1.instance->data, intValue);
13314 PopulateInstance(exp->__anon1.instance);
13319 long long intValue;
13320 void (* Set)(void *, long long) = (void *)prop->Set;
13322 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13323 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13324 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13325 exp->__anon1.instance->loc = exp->loc;
13327 GetInt64(value, &intValue);
13328 Set(exp->__anon1.instance->data, intValue);
13329 PopulateInstance(exp->__anon1.instance);
13335 void (* Set)(void *, intptr_t) = (void *)prop->Set;
13337 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13338 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13339 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13340 exp->__anon1.instance->loc = exp->loc;
13342 GetIntPtr(value, &intValue);
13343 Set(exp->__anon1.instance->data, intValue);
13344 PopulateInstance(exp->__anon1.instance);
13350 void (* Set)(void *, ssize_t) = (void *)prop->Set;
13352 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13353 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13354 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13355 exp->__anon1.instance->loc = exp->loc;
13357 GetIntSize(value, &intValue);
13358 Set(exp->__anon1.instance->data, intValue);
13359 PopulateInstance(exp->__anon1.instance);
13365 void (* Set)(void *, float) = (void *)prop->Set;
13367 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13368 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13369 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13370 exp->__anon1.instance->loc = exp->loc;
13372 GetFloat(value, &floatValue);
13373 Set(exp->__anon1.instance->data, floatValue);
13374 PopulateInstance(exp->__anon1.instance);
13379 double doubleValue;
13380 void (* Set)(void *, double) = (void *)prop->Set;
13382 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13383 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13384 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13385 exp->__anon1.instance->loc = exp->loc;
13387 GetDouble(value, &doubleValue);
13388 Set(exp->__anon1.instance->data, doubleValue);
13389 PopulateInstance(exp->__anon1.instance);
13394 else if(_class->type == 2)
13400 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13402 if(propertyClass->type == 1 && value->__anon1.instance->data)
13404 unsigned int (* Set)(void *) = (void *)prop->Set;
13405 unsigned int bits = Set(value->__anon1.instance->data);
13407 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13411 else if(_class->type == 2)
13413 unsigned int value;
13414 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
13417 GetUInt(exp->__anon1.member.exp, &value);
13419 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13428 if(_class->type == 2)
13430 unsigned int value;
13432 GetUInt(exp->__anon1.member.exp, &value);
13437 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13439 if(_class->type == 1)
13441 void (* Get)(unsigned int, void *) = (void *)prop->Get;
13443 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13444 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13445 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13446 exp->__anon1.instance->loc = exp->loc;
13448 Get(value, exp->__anon1.instance->data);
13449 PopulateInstance(exp->__anon1.instance);
13451 else if(_class->type == 2)
13453 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
13454 uint64 bits = Get(value);
13456 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
13463 else if(_class->type == 1)
13465 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
13471 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13473 if(_class->type == 1 && value)
13475 void (* Get)(void *, void *) = (void *)prop->Get;
13477 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13478 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13479 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13480 exp->__anon1.instance->loc = exp->loc;
13482 Get(value, exp->__anon1.instance->data);
13483 PopulateInstance(exp->__anon1.instance);
13494 exp->isConstant = 0;
13503 FreeExpression(memberExp);
13504 FreeIdentifier(memberID);
13510 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
13512 FreeExpContents(exp);
13513 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13520 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
13522 if(classSym && classSym->__anon1.registered)
13524 if(classSym->__anon1.registered->fixed)
13526 FreeSpecifier(exp->__anon1._class);
13527 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
13532 char className[1024];
13534 strcpy(className, "__ecereClass_");
13535 FullClassNameCat(className, classSym->string, 1);
13536 DeclareClass(curExternal, classSym, className);
13537 FreeExpContents(exp);
13539 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
13540 exp->__anon1.member.member = MkIdentifier("structSize");
13547 struct Type * type;
13548 struct Expression * e = exp;
13550 if(exp->type == 11)
13552 if(exp->__anon1.cast.exp)
13553 ComputeExpression(exp->__anon1.cast.exp);
13554 e = exp->__anon1.cast.exp;
13556 if(e && exp->expType)
13558 type = exp->expType;
13559 if(type->kind == 8)
13561 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13563 if(_class && (_class->type == 3 || _class->type == 2))
13565 if(!_class->dataType)
13566 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13567 type = _class->dataType;
13578 if(GetChar(e, &value))
13580 FreeExpContents(exp);
13581 exp->__anon1.__anon1.constant = PrintChar(value);
13587 unsigned char value = 0;
13589 if(GetUChar(e, &value))
13591 FreeExpContents(exp);
13592 exp->__anon1.__anon1.constant = PrintUChar(value);
13602 if(GetShort(e, &value))
13604 FreeExpContents(exp);
13605 exp->__anon1.__anon1.constant = PrintShort(value);
13611 unsigned short value = 0;
13613 if(GetUShort(e, &value))
13615 FreeExpContents(exp);
13616 exp->__anon1.__anon1.constant = PrintUShort(value);
13626 if(GetInt(e, &value))
13628 FreeExpContents(exp);
13629 exp->__anon1.__anon1.constant = PrintInt(value);
13635 unsigned int value = 0;
13637 if(GetUInt(e, &value))
13639 FreeExpContents(exp);
13640 exp->__anon1.__anon1.constant = PrintUInt(value);
13648 long long value = 0;
13650 if(GetInt64(e, &value))
13652 FreeExpContents(exp);
13653 exp->__anon1.__anon1.constant = PrintInt64(value);
13661 if(GetUInt64(e, &value))
13663 FreeExpContents(exp);
13664 exp->__anon1.__anon1.constant = PrintUInt64(value);
13672 intptr_t value = 0;
13674 if(GetIntPtr(e, &value))
13676 FreeExpContents(exp);
13677 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13683 uintptr_t value = 0;
13685 if(GetUIntPtr(e, &value))
13687 FreeExpContents(exp);
13688 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13698 if(GetIntSize(e, &value))
13700 FreeExpContents(exp);
13701 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13709 if(GetUIntSize(e, &value))
13711 FreeExpContents(exp);
13712 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13721 if(GetFloat(e, &value))
13723 FreeExpContents(exp);
13724 exp->__anon1.__anon1.constant = PrintFloat(value);
13733 if(GetDouble(e, &value))
13735 FreeExpContents(exp);
13736 exp->__anon1.__anon1.constant = PrintDouble(value);
13747 struct Operand op1 =
13754 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13757 struct Operand op2 =
13764 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13767 struct Operand op3 =
13774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13778 if(exp->__anon1.cond.exp)
13779 ComputeExpression((*exp->__anon1.cond.exp).last);
13780 if(exp->__anon1.cond.elseExp)
13781 ComputeExpression(exp->__anon1.cond.elseExp);
13782 if(exp->__anon1.cond.cond)
13783 ComputeExpression(exp->__anon1.cond.cond);
13784 op1 = GetOperand(exp->__anon1.cond.cond);
13786 op1.type->refCount++;
13787 op2 = GetOperand((*exp->__anon1.cond.exp).last);
13789 op2.type->refCount++;
13790 op3 = GetOperand(exp->__anon1.cond.elseExp);
13792 op3.type->refCount++;
13795 FreeExpContents(exp);
13796 op1.ops.Cond(exp, &op1, &op2, &op3);
13799 FreeType(op1.type);
13801 FreeType(op2.type);
13803 FreeType(op3.type);
13809 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
13811 struct __ecereNameSpace__ecere__com__Instance * module;
13813 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))
13815 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))
13817 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))
13819 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)
13821 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13827 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
13829 struct Type * source;
13830 struct Type * realDest = dest;
13831 struct Type * backupSourceExpType = (((void *)0));
13832 struct Expression * nbExp = GetNonBracketsExp(sourceExp);
13833 struct Expression * computedExp = nbExp;
13836 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)
13838 computedExp = CopyExpression(nbExp);
13839 ComputeExpression(computedExp);
13841 source = sourceExp->expType;
13842 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
13844 if(computedExp != nbExp)
13846 FreeExpression(computedExp);
13847 computedExp = nbExp;
13852 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
13854 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
13856 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
13858 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
13860 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
13862 if(sourceBase == destBase)
13864 if(computedExp != nbExp)
13866 FreeExpression(computedExp);
13867 computedExp = nbExp;
13876 struct __ecereNameSpace__ecere__sys__OldList * specs;
13877 unsigned int flag = 0;
13878 long long value = (((int)0x7fffffff));
13880 source->refCount++;
13881 if(computedExp->type == 2)
13883 if(source->isSigned)
13884 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13886 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13888 else if(computedExp->type == 4 && sourceExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
13890 if(source->isSigned)
13891 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13893 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13895 if(computedExp != nbExp)
13897 FreeExpression(computedExp);
13898 computedExp = nbExp;
13900 if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "unichar"))
13903 source = __extension__ ({
13904 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13906 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
13909 if(dest->kind == 8)
13911 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
13913 if(_class && _class->type == 3)
13915 if(source->kind != 8)
13917 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13918 struct Type * tempDest, * tempSource;
13920 for(; _class->base->type != 1000; _class = _class->base)
13923 tempDest = tempType;
13924 tempType->kind = 8;
13925 if(!_class->symbol)
13926 _class->symbol = FindClass(_class->fullName);
13927 tempType->__anon1._class = _class->symbol;
13928 tempType->truth = dest->truth;
13929 if(tempType->__anon1._class)
13930 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
13931 backupSourceExpType = sourceExp->expType;
13932 if(dest->passAsTemplate)
13934 sourceExp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13935 CopyTypeInto(sourceExp->expType, dest);
13936 sourceExp->expType->passAsTemplate = 0;
13940 sourceExp->expType = dest;
13944 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
13947 if(_class && _class->type == 2 && source->kind != 8)
13949 if(!dest->__anon1._class->__anon1.registered->dataType)
13950 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
13951 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
13954 FreeType(sourceExp->expType);
13955 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
13956 source->refCount++;
13959 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
13961 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13962 struct Declarator * decl;
13965 ReadString(string, sourceExp->__anon1.__anon2.string);
13966 decl = SpecDeclFromString(string, specs, (((void *)0)));
13967 FreeExpContents(sourceExp);
13968 FreeType(sourceExp->expType);
13969 sourceExp->type = 24;
13970 sourceExp->__anon1._classExp.specifiers = specs;
13971 sourceExp->__anon1._classExp.decl = decl;
13972 sourceExp->expType = dest;
13976 if(backupSourceExpType)
13977 FreeType(backupSourceExpType);
13981 else if(source->kind == 8)
13983 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
13985 if(_class && (_class->type == 3 || _class->type == 2))
13987 if(dest->kind != 8)
13989 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13990 struct Type * tempDest, * tempSource;
13992 if(!source->__anon1._class->__anon1.registered->dataType)
13993 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
13994 for(; _class->base->type != 1000; _class = _class->base)
13997 tempSource = tempType;
13998 tempType->kind = 8;
13999 tempType->__anon1._class = FindClass(_class->fullName);
14000 tempType->truth = source->truth;
14001 tempType->classObjectType = source->classObjectType;
14002 if(tempType->__anon1._class)
14003 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14004 if(conversions && conversions->last)
14006 ((struct Conversion *)conversions->last)->resultType = dest;
14009 FreeType(sourceExp->expType);
14010 sourceExp->expType = MkClassType(_class->fullName);
14011 sourceExp->expType->truth = source->truth;
14012 sourceExp->expType->classObjectType = source->classObjectType;
14013 if(!sourceExp->destType)
14015 FreeType(sourceExp->destType);
14016 sourceExp->destType = sourceExp->expType;
14017 if(sourceExp->expType)
14018 sourceExp->expType->refCount++;
14020 if(!_class->dataType)
14021 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14023 dest = MkClassType(source->__anon1._class->string);
14024 dest->truth = source->truth;
14025 dest->classObjectType = source->classObjectType;
14027 source = _class->dataType;
14028 source->refCount++;
14029 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
14035 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14042 if(dest->kind == 8)
14044 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
14045 unsigned int fittingValue = 0;
14047 if(_class && _class->type == 4)
14049 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14050 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14052 if(c && value >= 0 && value <= c->largest)
14055 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
14057 if(_class->type == 0 || _class->type == 5)
14059 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14061 *newExp = *sourceExp;
14062 if(sourceExp->destType)
14063 sourceExp->destType->refCount++;
14064 if(sourceExp->expType)
14065 sourceExp->expType->refCount++;
14066 sourceExp->type = 11;
14067 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
14068 sourceExp->__anon1.cast.exp = newExp;
14069 FreeType(sourceExp->expType);
14070 sourceExp->expType = (((void *)0));
14071 ProcessExpressionType(sourceExp);
14074 FreeType(sourceExp->expType);
14075 sourceExp->expType = dest;
14080 if(backupSourceExpType)
14081 FreeType(backupSourceExpType);
14084 if(!_class->dataType)
14085 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14087 dest = _class->dataType;
14090 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))
14092 specs = MkListOne(MkSpecifier(DOUBLE));
14094 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))
14096 specs = MkListOne(MkSpecifier(FLOAT));
14098 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))
14101 if(!dest->isSigned)
14102 ListAdd(specs, MkSpecifier(UNSIGNED));
14103 ListAdd(specs, MkSpecifier(INT64));
14105 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
14108 if(!dest->isSigned)
14109 ListAdd(specs, MkSpecifier(UNSIGNED));
14110 ListAdd(specs, MkSpecifier(INT));
14112 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14115 if(!dest->isSigned)
14116 ListAdd(specs, MkSpecifier(UNSIGNED));
14117 ListAdd(specs, MkSpecifier(SHORT));
14119 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14122 if(!dest->isSigned)
14123 ListAdd(specs, MkSpecifier(UNSIGNED));
14124 ListAdd(specs, MkSpecifier(CHAR));
14130 if(backupSourceExpType)
14132 if(sourceExp->expType)
14133 FreeType(sourceExp->expType);
14134 sourceExp->expType = backupSourceExpType;
14139 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))
14141 specs = MkListOne(MkSpecifier(DOUBLE));
14143 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))
14145 specs = MkListOne(MkSpecifier(FLOAT));
14147 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
14150 ListAdd(specs, MkSpecifier(BOOL));
14152 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)))
14154 if(source->kind == 3)
14158 if(backupSourceExpType)
14159 FreeType(backupSourceExpType);
14165 if(!dest->isSigned)
14166 ListAdd(specs, MkSpecifier(UNSIGNED));
14167 ListAdd(specs, MkSpecifier(CHAR));
14170 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)))))
14172 if(source->kind == 3)
14176 if(backupSourceExpType)
14177 FreeType(backupSourceExpType);
14183 if(!dest->isSigned)
14184 ListAdd(specs, MkSpecifier(UNSIGNED));
14185 ListAdd(specs, MkSpecifier(SHORT));
14188 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
14191 if(!dest->isSigned)
14192 ListAdd(specs, MkSpecifier(UNSIGNED));
14193 ListAdd(specs, MkSpecifier(INT));
14195 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
14198 if(!dest->isSigned)
14199 ListAdd(specs, MkSpecifier(UNSIGNED));
14200 ListAdd(specs, MkSpecifier(INT64));
14202 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14204 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
14210 if(backupSourceExpType)
14212 if(sourceExp->expType)
14213 FreeType(sourceExp->expType);
14214 sourceExp->expType = backupSourceExpType;
14218 if(!flag && !sourceExp->opDestType)
14220 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14222 *newExp = *sourceExp;
14223 newExp->prev = (((void *)0));
14224 newExp->next = (((void *)0));
14225 if(sourceExp->destType)
14226 sourceExp->destType->refCount++;
14227 if(sourceExp->expType)
14228 sourceExp->expType->refCount++;
14229 sourceExp->type = 11;
14230 if(realDest->kind == 8)
14232 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
14233 FreeList(specs, (void *)(FreeSpecifier));
14236 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
14237 if(newExp->type == 4)
14239 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
14242 sourceExp->__anon1.cast.exp = newExp;
14243 FreeType(sourceExp->expType);
14244 sourceExp->expType = (((void *)0));
14245 ProcessExpressionType(sourceExp);
14248 FreeList(specs, (void *)(FreeSpecifier));
14251 if(backupSourceExpType)
14252 FreeType(backupSourceExpType);
14257 if(computedExp != nbExp)
14259 FreeExpression(computedExp);
14260 computedExp = nbExp;
14262 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
14263 sourceExp = (*sourceExp->__anon1.list).last;
14264 if(sourceExp->type == 0)
14266 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
14268 if(dest->kind == 8)
14270 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
14272 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
14273 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14277 for(; _class && _class->type == 4; _class = _class->base)
14279 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
14280 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14282 for(value = e->values.first; value; value = value->next)
14284 if(!strcmp(value->name, id->string))
14289 FreeType(sourceExp->expType);
14290 sourceExp->isConstant = 1;
14291 sourceExp->expType = MkClassType(_class->fullName);
14292 if(inCompiler || inPreCompiler || inDebugger)
14294 FreeExpContents(sourceExp);
14295 sourceExp->type = 2;
14296 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
14297 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
14299 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
14308 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
14319 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
14321 unsigned int result = 1;
14325 struct __ecereNameSpace__ecere__sys__OldList converts =
14329 struct Conversion * convert;
14331 if(destType->kind == 0)
14333 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
14337 for(convert = converts.first; convert; convert = convert->next)
14339 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
14343 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14344 int objectType = exp->expType ? exp->expType->classObjectType : 0;
14347 newExp->prev = (((void *)0));
14348 newExp->next = (((void *)0));
14349 newExp->destType = (((void *)0));
14353 exp->addedThis = 1;
14354 exp->__anon1.member.exp = newExp;
14355 FreeType(exp->__anon1.member.exp->expType);
14356 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
14357 exp->__anon1.member.exp->expType->classObjectType = objectType;
14358 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
14359 exp->__anon1.member.memberType = 1;
14360 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14363 exp->expType->refCount++;
14364 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14370 exp->addedThis = 1;
14371 exp->__anon1.member.exp = newExp;
14372 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)
14374 newExp->byReference = 1;
14376 FreeType(exp->__anon1.member.exp->expType);
14377 exp->__anon1.member.exp->expType = (((void *)0));
14378 if(convert->convert->dataType)
14380 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14381 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
14382 exp->__anon1.member.exp->expType->refCount = 1;
14383 exp->__anon1.member.exp->expType->classObjectType = objectType;
14384 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14386 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
14387 exp->__anon1.member.memberType = 4;
14388 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14390 if(convert->resultType)
14391 convert->resultType->refCount++;
14397 FreeType(exp->expType);
14400 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14401 if(exp->destType->casted)
14404 exp->expType->refCount++;
14408 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14409 if(exp->destType->casted)
14411 if(convert->resultType)
14412 convert->resultType->refCount++;
14416 if(exp->isConstant && inCompiler)
14417 ComputeExpression(exp);
14418 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
14420 if(!result && exp->expType && converts.count)
14422 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14424 if(!result && exp->expType && exp->destType)
14426 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))
14433 static void ProcessFunction(struct FunctionDefinition * function);
14435 void ProcessInstantiationType(struct Instantiation * inst)
14437 yylloc = inst->loc;
14440 struct MembersInit * members;
14441 struct Symbol * classSym;
14442 struct __ecereNameSpace__ecere__com__Class * _class;
14444 classSym = inst->_class->__anon1.__anon1.symbol;
14445 _class = classSym ? classSym->__anon1.registered : (((void *)0));
14446 if(!_class || _class->type != 5)
14447 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
14448 afterExternal = afterExternal ? afterExternal : curExternal;
14450 ProcessExpressionType(inst->exp);
14451 inst->isConstant = 1;
14454 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
14455 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
14456 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
14457 int subMemberStackPos = 0;
14459 for(members = (*inst->members).first; members; members = members->next)
14461 switch(members->type)
14466 static unsigned int instMethodID = 0;
14467 struct External * external = curExternal;
14468 struct Context * context = curContext;
14469 struct Declarator * declarator = members->__anon1.function->declarator;
14470 struct Identifier * nameID = GetDeclId(declarator);
14471 char * unmangled = nameID ? nameID->string : (((void *)0));
14472 struct Expression * exp;
14473 struct External * createdExternal = (((void *)0));
14479 strcpy(name, "__ecereInstMeth_");
14480 FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
14482 strcat(name, nameID->string);
14484 sprintf(number, "_%08d", instMethodID++);
14485 strcat(name, number);
14486 nameID->string = __ecereNameSpace__ecere__sys__CopyString(name);
14490 struct Symbol * symbol = declarator->symbol;
14491 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, unmangled, privateModule);
14493 if(method && method->type == 1)
14495 symbol->__anon1.method = method;
14496 ProcessMethodType(method);
14497 if(!symbol->type->__anon1.__anon2.thisClass)
14499 if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
14501 if(!currentClass->symbol)
14502 currentClass->symbol = FindClass(currentClass->fullName);
14503 symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
14507 if(!_class->symbol)
14508 _class->symbol = FindClass(_class->fullName);
14509 symbol->type->__anon1.__anon2.thisClass = _class->symbol;
14512 DeclareType(curExternal, symbol->type, 1, 1);
14516 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
14519 createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
14522 FreeSpecifier(nameID->_class);
14523 nameID->_class = (((void *)0));
14525 curExternal = createdExternal;
14528 if(createdExternal->__anon1.function)
14529 ProcessFunction(createdExternal->__anon1.function);
14531 else if(declarator)
14533 curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
14534 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
14536 curExternal = external;
14537 curContext = context;
14540 FreeClassFunction(members->__anon1.function);
14541 exp = QMkExpId(name);
14543 members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
14544 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
14550 if(members->__anon1.dataMembers && classSym)
14552 struct MemberInit * member;
14553 struct Location oldyyloc = yylloc;
14555 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
14557 ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
14558 if(member->initializer && !member->initializer->isConstant)
14559 inst->isConstant = 0;
14571 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
14573 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct, unsigned int warnClasses)
14579 if(spec->__anon1.specifier == THISCLASS)
14584 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14585 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14586 ProcessSpecifier(spec, declareStruct, 0);
14593 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
14596 DeclareType(curExternal, symbol->type, 1, 1);
14597 else if(spec->__anon1.__anon1.symbol)
14599 struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
14601 if(warnClasses && !c)
14602 Compiler_Warning("Undeclared class %s\n", spec->__anon1.__anon1.name);
14603 DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
14609 struct Enumerator * e;
14611 if(spec->__anon1.__anon2.list)
14613 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
14616 ProcessExpressionType(e->exp);
14625 if(spec->__anon1.__anon2.definitions)
14627 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
14629 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
14636 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
14641 if(decl->__anon1.identifier->classSym)
14643 FreeSpecifier(decl->__anon1.identifier->_class);
14644 decl->__anon1.identifier->_class = (((void *)0));
14648 if(decl->__anon1.array.exp)
14649 ProcessExpressionType(decl->__anon1.array.exp);
14657 struct Identifier * id = (((void *)0));
14658 struct Specifier * classSpec = (((void *)0));
14660 if(decl->type == 4)
14662 id = GetDeclId(decl);
14663 if(id && id->_class)
14665 classSpec = id->_class;
14666 id->_class = (((void *)0));
14669 if(decl->declarator)
14670 ProcessDeclarator(decl->declarator, isFunction);
14671 if(decl->type == 4)
14675 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
14677 if(!decl->__anon1.function.parameters)
14678 decl->__anon1.function.parameters = MkList();
14679 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
14681 if(decl->__anon1.function.parameters)
14683 struct TypeName * param;
14685 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
14687 if(param->qualifiers)
14689 struct Specifier * spec;
14691 for(spec = (*param->qualifiers).first; spec; spec = spec->next)
14693 if(spec->type == 0)
14695 if(spec->__anon1.specifier == TYPED_OBJECT)
14697 struct Declarator * d = param->declarator;
14698 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);
14700 if(!d || d->type != 5)
14701 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
14702 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14703 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
14704 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
14705 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
14706 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
14710 else if(spec->__anon1.specifier == ANY_OBJECT)
14712 struct Declarator * d = param->declarator;
14714 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14715 param->qualifiers = MkListOne(MkSpecifier(VOID));
14716 if(!d || d->type != 5)
14717 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
14718 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
14721 else if(spec->__anon1.specifier == THISCLASS)
14726 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14727 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14728 ProcessSpecifier(spec, 0, 0);
14733 else if(spec->type == 1)
14735 ProcessSpecifier(spec, isFunction, 1);
14737 else if((spec->type == 3 || spec->type == 4) && !spec->__anon1.__anon2.definitions && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
14739 struct Declarator * d = param->declarator;
14741 if(!d || d->type != 5)
14742 DeclareStruct(curExternal, spec->__anon1.__anon2.id->string, 0, 1);
14746 if(param->declarator)
14747 ProcessDeclarator(param->declarator, 0);
14756 static void ProcessDeclaration(struct Declaration * decl, unsigned int warnClasses)
14758 yylloc = decl->loc;
14763 unsigned int declareStruct = 0;
14765 if(decl->__anon1.__anon1.declarators)
14767 struct InitDeclarator * d;
14769 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14771 struct Type * type, * subType;
14773 ProcessDeclarator(d->declarator, 0);
14774 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14777 ProcessInitializer(d->initializer, type);
14778 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
14780 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
14782 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
14784 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
14785 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
14786 if(decl->__anon1.__anon1.specifiers)
14787 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
14788 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
14791 decl->__anon1.inst = inst;
14795 for(subType = type; subType; )
14797 if(subType->kind == 8)
14802 else if(subType->kind == 13)
14804 else if(subType->kind == 12)
14805 subType = subType->__anon1.__anon4.arrayType;
14814 if(decl->__anon1.__anon1.specifiers)
14816 struct Specifier * s;
14818 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
14820 ProcessSpecifier(s, declareStruct, 1);
14827 ProcessInstantiationType(decl->__anon1.inst);
14832 struct Specifier * spec;
14833 struct Declarator * d;
14834 unsigned int declareStruct = 0;
14836 if(decl->__anon1.__anon1.declarators)
14838 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14840 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14841 struct Type * subType;
14843 ProcessDeclarator(d, 0);
14844 for(subType = type; subType; )
14846 if(subType->kind == 8)
14851 else if(subType->kind == 13)
14853 else if(subType->kind == 12)
14854 subType = subType->__anon1.__anon4.arrayType;
14861 if(decl->__anon1.__anon1.specifiers)
14863 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
14864 ProcessSpecifier(spec, declareStruct, warnClasses);
14871 static void ProcessStatement(struct Statement * stmt)
14873 yylloc = stmt->loc;
14877 ProcessStatement(stmt->__anon1.labeled.stmt);
14880 if(stmt->__anon1.caseStmt.exp)
14882 FreeType(stmt->__anon1.caseStmt.exp->destType);
14883 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
14885 curSwitchType->refCount++;
14886 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
14887 ComputeExpression(stmt->__anon1.caseStmt.exp);
14889 if(stmt->__anon1.caseStmt.stmt)
14890 ProcessStatement(stmt->__anon1.caseStmt.stmt);
14894 if(stmt->__anon1.compound.context)
14896 struct Declaration * decl;
14897 struct Statement * s;
14898 struct Statement * prevCompound = curCompound;
14899 struct Context * prevContext = curContext;
14901 if(!stmt->__anon1.compound.isSwitch)
14902 curCompound = stmt;
14903 curContext = stmt->__anon1.compound.context;
14904 if(stmt->__anon1.compound.declarations)
14906 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
14907 ProcessDeclaration(decl, 1);
14909 if(stmt->__anon1.compound.statements)
14911 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
14912 ProcessStatement(s);
14914 curContext = prevContext;
14915 curCompound = prevCompound;
14921 struct Expression * exp;
14923 if(stmt->__anon1.expressions)
14925 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
14926 ProcessExpressionType(exp);
14932 struct Expression * exp;
14934 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
14935 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
14936 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
14937 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
14939 ProcessExpressionType(exp);
14941 if(stmt->__anon1.ifStmt.stmt)
14942 ProcessStatement(stmt->__anon1.ifStmt.stmt);
14943 if(stmt->__anon1.ifStmt.elseStmt)
14944 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
14949 struct Type * oldSwitchType = curSwitchType;
14951 if(stmt->__anon1.switchStmt.exp)
14953 struct Expression * exp;
14955 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
14959 ProcessExpressionType(exp);
14962 curSwitchType = exp->expType;
14965 ProcessStatement(stmt->__anon1.switchStmt.stmt);
14966 curSwitchType = oldSwitchType;
14971 if(stmt->__anon1.whileStmt.exp)
14973 struct Expression * exp;
14975 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
14976 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
14977 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
14978 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
14980 ProcessExpressionType(exp);
14983 if(stmt->__anon1.whileStmt.stmt)
14984 ProcessStatement(stmt->__anon1.whileStmt.stmt);
14989 if(stmt->__anon1.doWhile.exp)
14991 struct Expression * exp;
14993 if((*stmt->__anon1.doWhile.exp).last)
14995 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
14996 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
14997 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
14999 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
15001 ProcessExpressionType(exp);
15004 if(stmt->__anon1.doWhile.stmt)
15005 ProcessStatement(stmt->__anon1.doWhile.stmt);
15010 struct Expression * exp;
15012 if(stmt->__anon1.forStmt.init)
15013 ProcessStatement(stmt->__anon1.forStmt.init);
15014 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
15016 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
15017 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
15018 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
15020 if(stmt->__anon1.forStmt.check)
15021 ProcessStatement(stmt->__anon1.forStmt.check);
15022 if(stmt->__anon1.forStmt.increment)
15024 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
15025 ProcessExpressionType(exp);
15027 if(stmt->__anon1.forStmt.stmt)
15028 ProcessStatement(stmt->__anon1.forStmt.stmt);
15033 struct Identifier * id = stmt->__anon1.forEachStmt.id;
15034 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
15035 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
15036 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
15037 char iteratorType[1024];
15038 struct Type * source;
15039 struct Expression * e;
15040 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));
15041 struct Expression * arrayExp;
15042 const char * typeString = (((void *)0));
15043 int builtinCount = 0;
15045 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
15049 FreeType(e->destType);
15050 e->destType = ProcessTypeString("Container", 0);
15052 if(!isBuiltin || e->next)
15053 ProcessExpressionType(e);
15055 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
15056 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)))
15058 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
15059 struct Symbol * symbol;
15060 struct Expression * expIt = (((void *)0));
15061 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
15062 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
15063 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
15064 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
15069 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
15070 stmt->__anon1.compound.context->parent = curContext;
15071 curContext = stmt->__anon1.compound.context;
15073 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
15075 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
15077 isCustomAVLTree = 1;
15078 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
15081 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
15083 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
15085 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
15088 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
15090 if(inCompiler && isArray)
15092 struct Declarator * decl;
15093 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15095 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
15096 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15097 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
15101 struct Type * type = (((void *)0));
15102 char typeStringBuf[1024];
15104 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
15105 if(((struct Expression *)(*exp).last)->type == 11)
15107 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
15110 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
15112 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)
15114 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
15116 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
15118 else if(arrayExp->__anon1.list)
15120 struct Expression * e;
15122 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15124 ProcessExpressionType(e);
15134 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15138 e->expType = (((void *)0));
15139 e = (*arrayExp->__anon1.list).first;
15140 ProcessExpressionType(e);
15143 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15145 FreeType(e->expType);
15146 e->expType = (((void *)0));
15148 type = (((void *)0));
15156 FreeType(e->expType);
15157 e->expType = (((void *)0));
15163 typeStringBuf[0] = '\0';
15164 PrintType(type, typeStringBuf, 0, 1);
15165 typeString = typeStringBuf;
15173 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
15174 struct Declarator * decl;
15175 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15177 if(arrayExp->__anon1.list)
15179 struct Expression * e;
15181 builtinCount = (*arrayExp->__anon1.list).count;
15182 type = ProcessTypeString(typeString, 0);
15183 while((e = (*arrayExp->__anon1.list).first))
15185 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
15186 e->destType = type;
15188 ProcessExpressionType(e);
15190 ListAdd(initializers, MkInitializerAssignment(e));
15193 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
15195 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
15196 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
15197 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
15198 FreeList(exp, (void *)(FreeExpression));
15200 else if(arrayExp->__anon1.list)
15202 struct Expression * e;
15204 type = ProcessTypeString(typeString, 0);
15205 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15207 e->destType = type;
15209 ProcessExpressionType(e);
15216 arrayExp->expType = ProcessTypeString("Container", 0);
15217 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
15220 else if(inCompiler && isLinkList && !isList)
15222 struct Declarator * decl;
15223 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15225 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
15226 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15227 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
15229 else if(inCompiler && _class->templateArgs)
15232 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
15234 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
15235 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)))))))));
15239 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
15242 switch(block->type)
15245 if(block->__anon1.compound.context)
15246 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15249 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
15250 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15251 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
15252 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15255 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
15256 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15259 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
15260 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15263 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
15264 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15267 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
15268 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15271 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
15272 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15278 block = MkIfStmt(filter, block, (((void *)0)));
15282 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));
15283 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15284 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15285 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15291 sprintf(count, "%d", builtinCount);
15292 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));
15293 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15294 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15295 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15297 else if(isLinkList && !isList)
15299 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
15300 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
15302 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
15304 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));
15308 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15309 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
15311 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));
15313 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15314 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15315 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15319 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
15321 ProcessExpressionType(expIt);
15322 if((*stmt->__anon1.compound.declarations).first)
15323 ProcessDeclaration((*stmt->__anon1.compound.declarations).first, 1);
15325 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
15326 ProcessStatement(stmt);
15329 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
15331 curContext = stmt->__anon1.compound.context->parent;
15336 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
15348 struct Expression * exp;
15350 if(stmt->__anon1.expressions)
15352 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15356 if(curFunction && !curFunction->type)
15357 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
15358 FreeType(exp->destType);
15359 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
15361 exp->destType->refCount++;
15363 ProcessExpressionType(exp);
15370 ProcessDeclaration(stmt->__anon1.decl, 1);
15375 struct AsmField * field;
15377 if(stmt->__anon1.asmStmt.inputFields)
15379 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
15380 if(field->expression)
15381 ProcessExpressionType(field->expression);
15383 if(stmt->__anon1.asmStmt.outputFields)
15385 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
15386 if(field->expression)
15387 ProcessExpressionType(field->expression);
15389 if(stmt->__anon1.asmStmt.clobberedFields)
15391 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
15393 if(field->expression)
15394 ProcessExpressionType(field->expression);
15401 struct PropertyWatch * propWatch;
15402 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15403 struct Expression * object = stmt->__anon1._watch.object;
15404 struct Expression * watcher = stmt->__anon1._watch.watcher;
15407 ProcessExpressionType(watcher);
15409 ProcessExpressionType(object);
15412 if(watcher || thisClass)
15414 struct External * external = curExternal;
15415 struct Context * context = curContext;
15418 stmt->__anon1.expressions = MkList();
15419 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15421 struct ClassFunction * func;
15422 char watcherName[1024];
15423 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;
15424 struct External * createdExternal;
15426 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
15427 if(propWatch->deleteWatch)
15428 strcat(watcherName, "_delete");
15431 struct Identifier * propID;
15433 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15435 strcat(watcherName, "_");
15436 strcat(watcherName, propID->string);
15439 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
15441 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)));
15442 ProcessClassFunctionBody(func, propWatch->compound);
15443 propWatch->compound = (((void *)0));
15444 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
15445 FreeClassFunction(func);
15446 curExternal = createdExternal;
15447 ProcessFunction(createdExternal->__anon1.function);
15448 if(propWatch->deleteWatch)
15450 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15452 ListAdd(args, CopyExpression(object));
15453 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15454 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
15455 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
15459 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
15460 struct Identifier * propID;
15462 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15464 char propName[1024];
15465 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15469 char getName[1024], setName[1024];
15470 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15472 DeclareProperty(createdExternal, prop, setName, getName);
15473 strcpy(propName, "__ecereProp_");
15474 FullClassNameCat(propName, prop->_class->fullName, 0);
15475 strcat(propName, "_");
15476 FullClassNameCat(propName, prop->name, 1);
15477 ListAdd(args, CopyExpression(object));
15478 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15479 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15480 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
15481 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
15482 __ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
15485 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15490 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
15492 curExternal = external;
15493 curContext = context;
15495 FreeExpression(watcher);
15497 FreeExpression(object);
15498 FreeList(watches, (void *)(FreePropertyWatch));
15501 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15505 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15507 ProcessStatement(propWatch->compound);
15514 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15515 struct Expression * object = stmt->__anon1._watch.object;
15516 struct __ecereNameSpace__ecere__com__Class * _class;
15519 ProcessExpressionType(object);
15522 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
15525 struct Identifier * propID;
15528 stmt->__anon1.expressions = MkList();
15529 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
15531 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
15538 for(propID = (*watches).first; propID; propID = propID->next)
15540 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15544 CreateFireWatcher(prop, object, stmt);
15547 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15552 struct __ecereNameSpace__ecere__com__Property * prop;
15553 struct __ecereNameSpace__ecere__com__Class * base;
15555 for(base = _class; base; base = base->base)
15557 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
15559 if(prop->isProperty && prop->isWatchable)
15561 CreateFireWatcher(prop, object, stmt);
15567 FreeExpression(object);
15568 FreeList(watches, (void *)(FreeIdentifier));
15571 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15577 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15578 struct Expression * object = stmt->__anon1._watch.object;
15579 struct Expression * watcher = stmt->__anon1._watch.watcher;
15580 struct __ecereNameSpace__ecere__com__Class * _class;
15583 ProcessExpressionType(object);
15585 ProcessExpressionType(watcher);
15588 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
15589 if(watcher || thisClass)
15593 struct Identifier * propID;
15596 stmt->__anon1.expressions = MkList();
15599 struct __ecereNameSpace__ecere__sys__OldList * args;
15602 ListAdd(args, CopyExpression(object));
15603 ListAdd(args, MkExpConstant("0"));
15604 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15605 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15609 for(propID = (*watches).first; propID; propID = propID->next)
15611 char propName[1024];
15612 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15616 char getName[1024], setName[1024];
15617 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15619 DeclareProperty(curExternal, prop, setName, getName);
15620 strcpy(propName, "__ecereProp_");
15621 FullClassNameCat(propName, prop->_class->fullName, 0);
15622 strcat(propName, "_");
15623 FullClassNameCat(propName, prop->name, 1);
15624 ListAdd(args, CopyExpression(object));
15625 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15626 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15627 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15630 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15634 FreeExpression(object);
15636 FreeExpression(watcher);
15637 FreeList(watches, (void *)(FreeIdentifier));
15640 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15643 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15650 void ComputeDataTypes()
15652 struct External * external;
15654 currentClass = (((void *)0));
15655 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
15656 DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
15657 DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
15658 DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
15659 DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
15660 DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
15661 DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
15662 DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
15663 DeclareFunctionUtil((((void *)0)), "eSystem_New");
15664 DeclareFunctionUtil((((void *)0)), "eSystem_New0");
15665 DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
15666 DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
15667 DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
15668 DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
15669 DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
15670 DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
15671 DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
15672 DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
15673 DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
15674 DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
15675 DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
15677 for(external = (*ast).first; external; external = external->next)
15679 afterExternal = curExternal = external;
15680 if(external->type == 0)
15684 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15685 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15687 currentClass = external->__anon1.function->_class;
15688 ProcessFunction(external->__anon1.function);
15690 else if(external->type == 1)
15692 if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
15694 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15695 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15697 currentClass = (((void *)0));
15698 if(external->__anon1.declaration)
15699 ProcessDeclaration(external->__anon1.declaration, 1);
15701 else if(external->type == 2)
15703 struct ClassDefinition * _class = external->__anon1._class;
15705 currentClass = external->symbol->__anon1.registered;
15708 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15709 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15711 if(_class->definitions)
15713 ProcessClass(_class->definitions, _class->symbol);
15717 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
15718 ((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
15721 else if(external->type == 4)
15723 thisNameSpace = external->__anon1.id->string;
15726 currentClass = (((void *)0));
15727 thisNameSpace = (((void *)0));
15728 curExternal = (((void *)0));
15731 void ProcessExpressionType(struct Expression * exp)
15733 unsigned int unresolved = 0;
15734 struct Location oldyylloc = yylloc;
15735 unsigned int notByReference = 0;
15737 if(!exp || exp->expType)
15744 struct Identifier * id = exp->__anon1.__anon1.identifier;
15746 if(!id || !topContext)
15748 if(id->_class && id->_class->__anon1.__anon1.name)
15750 id->classSym = id->_class->__anon1.__anon1.symbol;
15752 if(!strcmp(id->string, "__runtimePlatform"))
15754 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
15757 else if(strstr(id->string, "__ecereClass") == id->string)
15759 exp->expType = ProcessTypeString("ecere::com::Class", 1);
15762 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
15764 ReplaceClassMembers(exp, thisClass);
15767 ProcessExpressionType(exp);
15770 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
15775 struct Symbol * symbol = (((void *)0));
15776 unsigned int findInGlobal = 0;
15778 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)
15781 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15784 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
15790 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
15793 ProcessExpressionType(exp);
15797 else if(currentClass && !id->_class)
15799 if(ResolveIdWithClass(exp, currentClass, 1))
15802 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15806 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15809 struct Type * type = symbol->type;
15810 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
15812 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
15814 struct Context * context = SetupTemplatesContext(_class);
15816 type = ReplaceThisClassType(_class);
15817 FinishTemplatesContext(context);
15819 type->refCount = 0;
15821 FreeSpecifier(id->_class);
15822 id->_class = (((void *)0));
15823 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15824 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
15825 id->classSym = (((void *)0));
15826 exp->expType = type;
15829 if(type && (type->kind == 15))
15830 exp->isConstant = 1;
15831 if(symbol->isParam || !strcmp(id->string, "this"))
15833 if(_class && _class->type == 1 && !type->declaredWithStruct)
15834 exp->byReference = 1;
15836 if(symbol->isIterator)
15838 if(symbol->isIterator == 3)
15841 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
15842 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
15843 exp->expType = (((void *)0));
15844 ProcessExpressionType(exp);
15846 else if(symbol->isIterator != 4)
15849 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
15850 exp->__anon1.member.exp->expType = exp->expType;
15851 exp->__anon1.member.member = MkIdentifier("data");
15852 exp->expType = (((void *)0));
15853 ProcessExpressionType(exp);
15860 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
15862 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15866 strcpy(name, thisNameSpace);
15867 strcat(name, "::");
15868 strcat(name, id->string);
15869 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
15872 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
15877 for(c = 0; c < definedExpStackPos; c++)
15878 if(definedExpStack[c] == definedExp)
15880 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
15882 struct Location backupYylloc = yylloc;
15883 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
15885 definedExpStack[definedExpStackPos++] = definedExp;
15886 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
15887 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
15888 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15890 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15891 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
15892 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
15893 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15895 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15896 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
15898 parsedExpression = (((void *)0));
15900 expression_yyparse();
15901 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
15903 fileInput = backInput;
15904 yylloc = backupYylloc;
15905 if(parsedExpression)
15907 FreeIdentifier(id);
15909 exp->__anon1.list = MkListOne(parsedExpression);
15910 ApplyLocation(parsedExpression, &yylloc);
15911 ProcessExpressionType(exp);
15912 definedExpStackPos--;
15915 definedExpStackPos--;
15921 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
15927 struct GlobalData * data = (((void *)0));
15929 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15933 strcpy(name, thisNameSpace);
15934 strcat(name, "::");
15935 strcat(name, id->string);
15936 data = FindGlobalData(name);
15939 data = FindGlobalData(id->string);
15942 DeclareGlobalData(curExternal, data);
15943 exp->expType = data->dataType;
15945 data->dataType->refCount++;
15946 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15947 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
15948 FreeSpecifier(id->_class);
15949 id->_class = (((void *)0));
15954 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
15956 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15960 strcpy(name, thisNameSpace);
15961 strcat(name, "::");
15962 strcat(name, id->string);
15963 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
15966 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
15971 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15972 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
15974 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
15975 strcpy(name, "__ecereFunction_");
15976 FullClassNameCat(name, id->string, 0);
15977 if(DeclareFunction(curExternal, function, name))
15979 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15980 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
15982 exp->expType = function->dataType;
15983 if(function->dataType)
15984 function->dataType->refCount++;
15985 FreeSpecifier(id->_class);
15986 id->_class = (((void *)0));
15998 if(!exp->__anon1.instance->_class)
16000 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
16002 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
16005 ProcessInstantiationType(exp->__anon1.instance);
16006 exp->isConstant = exp->__anon1.instance->isConstant;
16007 if(exp->__anon1.instance->_class)
16009 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
16017 char * constant = exp->__anon1.__anon1.constant;
16018 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
16020 exp->expType = type;
16021 if(constant[0] == '\'')
16023 if((int)((unsigned char *)constant)[1] > 127)
16026 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
16030 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
16031 exp->__anon1.__anon1.constant = PrintUInt(ch);
16033 type->__anon1._class = FindClass("unichar");
16034 type->isSigned = 0;
16039 type->isSigned = 1;
16044 char * dot = strchr(constant, '.');
16045 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
16050 exponent = strchr(constant, 'p');
16052 exponent = strchr(constant, 'P');
16056 exponent = strchr(constant, 'e');
16058 exponent = strchr(constant, 'E');
16060 if(dot || exponent)
16062 if(strchr(constant, 'f') || strchr(constant, 'F'))
16066 type->isSigned = 1;
16070 unsigned int isSigned = constant[0] == '-';
16071 char * endP = (((void *)0));
16072 long long i64 = strtoll(constant, &endP, 0);
16073 uint64 ui64 = strtoull(constant, &endP, 0);
16074 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16075 unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16079 if(i64 < (((int)0x80000000)))
16084 if(ui64 > (((int)0x7fffffff)))
16086 if(ui64 > (0xffffffff))
16089 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
16093 else if(constant[0] != '0' || !constant[1])
16098 type->kind = is64Bit ? 4 : 3;
16099 type->isSigned = isSigned;
16102 exp->isConstant = 1;
16103 if(exp->destType && exp->destType->kind == 7)
16105 else if(exp->destType && exp->destType->kind == 6)
16107 else if(exp->destType && exp->destType->kind == 4)
16114 exp->isConstant = 1;
16115 exp->expType = __extension__ ({
16116 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16118 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
16119 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16121 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
16122 }), __ecereInstance2;
16128 ProcessExpressionType(exp->__anon1._new.size);
16129 exp->expType = __extension__ ({
16130 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16132 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
16134 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16138 ProcessExpressionType(exp->__anon1._renew.size);
16139 ProcessExpressionType(exp->__anon1._renew.exp);
16140 exp->expType = __extension__ ({
16141 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16143 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
16145 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16149 unsigned int assign = 0, boolResult = 0, boolOps = 0;
16150 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
16151 unsigned int useDestType = 0, useSideType = 0;
16152 struct Location oldyylloc = yylloc;
16153 unsigned int useSideUnit = 0;
16154 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
16155 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
16157 switch(exp->__anon1.op.op)
16209 if(exp->__anon1.op.exp1)
16216 if(exp->__anon1.op.op == '&')
16218 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
16220 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
16221 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
16223 if(symbol && symbol->isIterator == 2)
16226 exp->__anon1.member.exp = exp->__anon1.op.exp2;
16227 exp->__anon1.member.member = MkIdentifier("key");
16228 exp->expType = (((void *)0));
16229 exp->__anon1.op.exp2->expType = symbol->type;
16230 symbol->type->refCount++;
16231 ProcessExpressionType(exp);
16237 if(exp->__anon1.op.exp1)
16239 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
16241 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
16243 if(exp->__anon1.op.exp1->destType)
16244 FreeType(exp->__anon1.op.exp1->destType);
16245 exp->__anon1.op.exp1->destType = exp->destType;
16246 exp->__anon1.op.exp1->opDestType = 1;
16248 exp->destType->refCount++;
16252 if(exp->__anon1.op.exp1->destType)
16253 FreeType(exp->__anon1.op.exp1->destType);
16254 exp->__anon1.op.exp1->destType = dummy;
16257 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16258 exp->__anon1.op.exp1->destType->count++;
16259 ProcessExpressionType(exp->__anon1.op.exp1);
16260 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16261 exp->__anon1.op.exp1->destType->count--;
16262 exp->__anon1.op.exp1->opDestType = 0;
16263 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)
16265 exp->__anon1.op.exp2 = MkExpConstant("1");
16266 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
16269 if(exp->__anon1.op.exp1->destType == dummy)
16272 exp->__anon1.op.exp1->destType = (((void *)0));
16274 if(exp->__anon1.op.exp2)
16276 if(!assign && exp->__anon1.op.exp1->expType && (exp->__anon1.op.exp1->expType->kind == 1 || exp->__anon1.op.exp1->expType->kind == 2))
16278 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);
16280 FreeType(exp->__anon1.op.exp1->expType);
16281 exp->__anon1.op.exp1->expType = type;
16284 type1 = exp->__anon1.op.exp1->expType;
16286 if(exp->__anon1.op.exp2)
16288 char expString[10240];
16290 expString[0] = '\0';
16291 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
16293 if(exp->__anon1.op.exp1)
16295 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
16296 if(exp->__anon1.op.exp1->expType)
16297 exp->__anon1.op.exp1->expType->refCount++;
16301 exp->__anon1.op.exp2->destType = exp->destType;
16302 if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
16303 exp->__anon1.op.exp2->opDestType = 1;
16305 exp->destType->refCount++;
16309 exp->expType = type1;
16314 PrintExpression(exp->__anon1.op.exp2, expString);
16315 if(type1 && type1->kind == 13)
16317 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)
16318 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
16319 else if(exp->__anon1.op.op == '=')
16321 if(exp->__anon1.op.exp2->destType)
16322 FreeType(exp->__anon1.op.exp2->destType);
16323 exp->__anon1.op.exp2->destType = type1;
16330 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)
16334 if(exp->__anon1.op.exp2->destType)
16335 FreeType(exp->__anon1.op.exp2->destType);
16336 exp->__anon1.op.exp2->destType = type1;
16343 exp->expType = type1;
16345 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
16347 if(exp->__anon1.op.exp2->destType)
16348 FreeType(exp->__anon1.op.exp2->destType);
16349 exp->__anon1.op.exp2->destType = exp->destType;
16350 if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
16351 exp->__anon1.op.exp2->opDestType = 1;
16353 exp->destType->refCount++;
16357 if(exp->__anon1.op.exp2->destType)
16358 FreeType(exp->__anon1.op.exp2->destType);
16359 exp->__anon1.op.exp2->destType = dummy;
16362 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))
16364 FreeType(exp->__anon1.op.exp2->destType);
16365 exp->__anon1.op.exp2->destType = type1;
16368 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16369 exp->__anon1.op.exp2->destType->count++;
16370 if(exp->__anon1.op.op == SIZEOF)
16372 struct Expression * e = exp->__anon1.op.exp2;
16374 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
16376 if(e->type == 5 || e->type == 32 || e->type == 23)
16379 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
16381 e = (*e->__anon1.list).last;
16384 if(e->type == 11 && e->__anon1.cast.exp)
16385 e->__anon1.cast.exp->needCast = 1;
16387 ProcessExpressionType(exp->__anon1.op.exp2);
16388 exp->__anon1.op.exp2->opDestType = 0;
16389 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16390 exp->__anon1.op.exp2->destType->count--;
16391 if(!assign && (exp->__anon1.op.exp1 || exp->__anon1.op.op == '~'))
16393 if(exp->__anon1.op.exp2->expType && (exp->__anon1.op.exp2->expType->kind == 1 || exp->__anon1.op.exp2->expType->kind == 2))
16395 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);
16397 FreeType(exp->__anon1.op.exp2->expType);
16398 exp->__anon1.op.exp2->expType = type;
16401 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
16403 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)
16405 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
16406 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16408 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)))
16410 if(exp->__anon1.op.op == ADD_ASSIGN)
16411 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16413 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))
16415 if(exp->__anon1.op.op == ADD_ASSIGN)
16416 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16418 else if(inCompiler)
16420 char type1String[1024];
16421 char type2String[1024];
16423 type1String[0] = '\0';
16424 type2String[0] = '\0';
16425 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
16426 PrintType(type1, type2String, 0, 1);
16427 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16428 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
16431 if(exp->__anon1.op.exp2->destType == dummy)
16434 exp->__anon1.op.exp2->destType = (((void *)0));
16436 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
16438 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16439 type2->refCount = 1;
16440 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
16441 type2->isSigned = 1;
16443 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))
16445 type2 = __extension__ ({
16446 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16448 __ecereInstance1->kind = 3, __ecereInstance1;
16450 type2->refCount = 1;
16451 type2->isSigned = 1;
16455 type2 = exp->__anon1.op.exp2->expType;
16461 if(exp->__anon1.op.op == SIZEOF)
16463 exp->expType = __extension__ ({
16464 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16466 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16468 exp->isConstant = 1;
16470 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
16472 exp->expType = Dereference(type2);
16473 if(type2 && type2->kind == 8)
16474 notByReference = 1;
16476 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
16477 exp->expType = Reference(type2);
16478 else if(exp->__anon1.op.op == LEFT_OP || exp->__anon1.op.op == RIGHT_OP)
16480 if(exp->__anon1.op.exp1->expType)
16482 exp->expType = exp->__anon1.op.exp1->expType;
16483 exp->expType->refCount++;
16490 if(exp->__anon1.op.exp1)
16492 if(exp->__anon1.op.exp1->destType)
16493 FreeType(exp->__anon1.op.exp1->destType);
16494 exp->__anon1.op.exp1->destType = MkClassType("bool");
16495 exp->__anon1.op.exp1->destType->truth = 1;
16496 if(!exp->__anon1.op.exp1->expType)
16497 ProcessExpressionType(exp->__anon1.op.exp1);
16499 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16500 FreeType(exp->__anon1.op.exp1->expType);
16501 exp->__anon1.op.exp1->expType = MkClassType("bool");
16502 exp->__anon1.op.exp1->expType->truth = 1;
16504 if(exp->__anon1.op.exp2)
16506 if(exp->__anon1.op.exp2->destType)
16507 FreeType(exp->__anon1.op.exp2->destType);
16508 exp->__anon1.op.exp2->destType = MkClassType("bool");
16509 exp->__anon1.op.exp2->destType->truth = 1;
16510 if(!exp->__anon1.op.exp2->expType)
16511 ProcessExpressionType(exp->__anon1.op.exp2);
16513 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16514 FreeType(exp->__anon1.op.exp2->expType);
16515 exp->__anon1.op.exp2->expType = MkClassType("bool");
16516 exp->__anon1.op.exp2->expType->truth = 1;
16519 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")))))
16521 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"))))
16523 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)))
16525 struct Type * intType;
16527 if(!type1->__anon1._class->__anon1.registered->dataType)
16528 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
16529 if(!type2->__anon1._class->__anon1.registered->dataType)
16530 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
16531 intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
16532 if(exp->__anon1.op.exp1->destType)
16533 FreeType(exp->__anon1.op.exp1->destType);
16534 if(exp->__anon1.op.exp2->destType)
16535 FreeType(exp->__anon1.op.exp2->destType);
16536 exp->__anon1.op.exp1->destType = intType;
16537 exp->__anon1.op.exp2->destType = intType;
16538 intType->refCount++;
16542 if(exp->__anon1.op.exp2->destType)
16543 FreeType(exp->__anon1.op.exp2->destType);
16544 exp->__anon1.op.exp2->destType = type1;
16546 if(exp->__anon1.op.exp1->destType)
16547 FreeType(exp->__anon1.op.exp1->destType);
16548 exp->__anon1.op.exp1->destType = type2;
16551 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)
16552 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);
16553 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
16555 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16559 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16561 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
16562 ProcessExpressionType(exp->__anon1.op.exp1);
16563 if(type2->kind != 13)
16565 ProcessExpressionType(classExp);
16566 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
16567 if(!exp->__anon1.op.exp2->expType)
16571 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
16574 ProcessExpressionType(exp->__anon1.op.exp2);
16578 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)))
16580 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
16581 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16582 exp->expType = type1;
16586 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)))
16588 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
16589 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16590 exp->expType = type2;
16594 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))
16596 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
16600 unsigned int success = 0;
16602 if(type1->kind == 13 && type2->kind == 13)
16604 if(exp->__anon1.op.op == '+')
16605 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16606 else if(exp->__anon1.op.op == '-')
16608 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
16610 exp->expType = __extension__ ({
16611 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16613 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
16616 if(type1->__anon1.type->kind == 20)
16618 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16622 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16624 ProcessExpressionType(classExp);
16626 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"))));
16627 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
16635 if(!success && exp->__anon1.op.exp1->type == 2)
16637 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16640 FreeType(exp->expType);
16641 exp->expType = exp->__anon1.op.exp1->destType;
16642 if(exp->__anon1.op.exp1->destType)
16643 exp->__anon1.op.exp1->destType->refCount++;
16646 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16649 FreeType(exp->expType);
16650 exp->expType = exp->__anon1.op.exp2->destType;
16651 if(exp->__anon1.op.exp2->destType)
16652 exp->__anon1.op.exp2->destType->refCount++;
16658 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16661 FreeType(exp->expType);
16662 exp->expType = exp->__anon1.op.exp2->destType;
16663 if(exp->__anon1.op.exp2->destType)
16664 exp->__anon1.op.exp2->destType->refCount++;
16667 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16670 FreeType(exp->expType);
16671 exp->expType = exp->__anon1.op.exp1->destType;
16672 if(exp->__anon1.op.exp1->destType)
16673 exp->__anon1.op.exp1->destType->refCount++;
16679 char expString1[10240];
16680 char expString2[10240];
16684 expString1[0] = '\0';
16685 expString2[0] = '\0';
16690 PrintExpression(exp->__anon1.op.exp1, expString1);
16691 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16692 PrintExpression(exp->__anon1.op.exp2, expString2);
16693 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16694 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
16695 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
16697 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
16701 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)
16703 if(exp->__anon1.op.exp1->destType)
16704 FreeType(exp->__anon1.op.exp1->destType);
16705 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16706 if(type2->__anon1._class->__anon1.registered->dataType)
16707 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16708 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16709 exp->expType = type2;
16713 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)
16715 if(exp->__anon1.op.exp2->destType)
16716 FreeType(exp->__anon1.op.exp2->destType);
16717 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16718 if(type1->__anon1._class->__anon1.registered->dataType)
16719 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16720 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16721 exp->expType = type1;
16727 unsigned int valid = 0;
16729 if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
16731 if(exp->__anon1.op.exp2->destType)
16732 FreeType(exp->__anon1.op.exp2->destType);
16733 if(!type1->__anon1._class->__anon1.registered->dataType)
16734 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
16735 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16736 exp->__anon1.op.exp2->destType->refCount++;
16737 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16740 type2 = exp->__anon1.op.exp2->destType;
16743 exp->expType = type2;
16746 if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
16748 if(exp->__anon1.op.exp1->destType)
16749 FreeType(exp->__anon1.op.exp1->destType);
16750 if(!type2->__anon1._class->__anon1.registered->dataType)
16751 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
16752 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16753 exp->__anon1.op.exp1->destType->refCount++;
16754 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16755 type1 = exp->__anon1.op.exp1->destType;
16756 exp->expType = type1;
16759 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
16761 unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
16762 unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
16764 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
16766 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16768 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16771 FreeType(exp->expType);
16772 exp->expType = exp->__anon1.op.exp2->expType;
16773 if(exp->__anon1.op.exp2->expType)
16774 exp->__anon1.op.exp2->expType->refCount++;
16778 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16780 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16783 FreeType(exp->expType);
16784 exp->expType = exp->__anon1.op.exp1->expType;
16785 if(exp->__anon1.op.exp1->expType)
16786 exp->__anon1.op.exp1->expType->refCount++;
16793 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16795 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16798 FreeType(exp->expType);
16799 exp->expType = exp->__anon1.op.exp1->expType;
16800 if(exp->__anon1.op.exp1->expType)
16801 exp->__anon1.op.exp1->expType->refCount++;
16805 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16807 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16810 FreeType(exp->expType);
16811 exp->expType = exp->__anon1.op.exp2->expType;
16812 if(exp->__anon1.op.exp2->expType)
16813 exp->__anon1.op.exp2->expType->refCount++;
16821 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))
16823 if(exp->__anon1.op.exp1->destType)
16824 FreeType(exp->__anon1.op.exp1->destType);
16825 exp->__anon1.op.exp1->destType = type2;
16827 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16830 FreeType(exp->expType);
16831 exp->expType = exp->__anon1.op.exp1->destType;
16832 if(exp->__anon1.op.exp1->destType)
16833 exp->__anon1.op.exp1->destType->refCount++;
16838 if(exp->__anon1.op.exp2->destType)
16839 FreeType(exp->__anon1.op.exp2->destType);
16840 exp->__anon1.op.exp2->destType = type1;
16842 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16845 FreeType(exp->expType);
16846 exp->expType = exp->__anon1.op.exp2->destType;
16847 if(exp->__anon1.op.exp2->destType)
16848 exp->__anon1.op.exp2->destType->refCount++;
16850 else if(type1 && type2)
16852 char expString1[10240];
16853 char expString2[10240];
16854 char type1String[1024];
16855 char type2String[1024];
16857 expString1[0] = '\0';
16858 expString2[0] = '\0';
16859 type1String[0] = '\0';
16860 type2String[0] = '\0';
16863 PrintExpression(exp->__anon1.op.exp1, expString1);
16864 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16865 PrintExpression(exp->__anon1.op.exp2, expString2);
16866 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16867 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
16868 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
16870 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
16871 if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
16873 exp->expType = exp->__anon1.op.exp1->expType;
16874 if(exp->__anon1.op.exp1->expType)
16875 exp->__anon1.op.exp1->expType->refCount++;
16877 else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
16879 exp->expType = exp->__anon1.op.exp2->expType;
16880 if(exp->__anon1.op.exp2->expType)
16881 exp->__anon1.op.exp2->expType->refCount++;
16889 if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
16891 struct Type * oldType = exp->__anon1.op.exp1->expType;
16893 exp->__anon1.op.exp1->expType = (((void *)0));
16894 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16897 exp->__anon1.op.exp1->expType = oldType;
16899 if(exp->__anon1.op.exp1->destType)
16900 FreeType(exp->__anon1.op.exp1->destType);
16901 exp->__anon1.op.exp1->destType = type2;
16903 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16906 FreeType(exp->expType);
16907 exp->expType = exp->__anon1.op.exp1->destType;
16908 if(exp->__anon1.op.exp1->destType)
16909 exp->__anon1.op.exp1->destType->refCount++;
16913 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
16915 if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
16917 if(exp->__anon1.op.exp1->destType)
16918 FreeType(exp->__anon1.op.exp1->destType);
16919 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16920 if(type2->__anon1._class->__anon1.registered->dataType)
16921 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16922 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16924 if(exp->__anon1.op.op == '!')
16926 exp->expType = MkClassType("bool");
16927 exp->expType->truth = 1;
16931 exp->expType = type2;
16936 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
16938 if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
16940 if(exp->__anon1.op.exp2->destType)
16941 FreeType(exp->__anon1.op.exp2->destType);
16942 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16943 if(type1->__anon1._class->__anon1.registered->dataType)
16944 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16945 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16947 exp->expType = type1;
16953 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
16955 char expString[10000];
16957 expString[0] = '\0';
16960 PrintExpression(exp->__anon1.op.exp1, expString);
16961 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16964 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
16966 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
16968 char expString[10240];
16970 expString[0] = '\0';
16973 PrintExpression(exp->__anon1.op.exp2, expString);
16974 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16977 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
16981 FreeType(exp->expType);
16982 exp->expType = MkClassType("bool");
16983 exp->expType->truth = 1;
16985 if(exp->__anon1.op.op != SIZEOF)
16986 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
16987 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
16989 DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
16991 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
16992 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
16993 yylloc = oldyylloc;
17002 struct Expression * e;
17004 exp->isConstant = 1;
17005 for(e = (*exp->__anon1.list).first; e; e = e->next)
17009 FreeType(e->destType);
17010 e->opDestType = exp->opDestType;
17011 e->destType = exp->destType;
17014 exp->destType->refCount++;
17017 ProcessExpressionType(e);
17018 if(!exp->expType && !e->next)
17020 exp->expType = e->expType;
17022 e->expType->refCount++;
17025 exp->isConstant = 0;
17027 e = (*exp->__anon1.list).first;
17028 if(!e->next && e->type == 8)
17030 struct Expression * next = exp->next, * prev = exp->prev;
17032 FreeType(exp->expType);
17033 FreeType(exp->destType);
17034 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17038 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
17039 ProcessExpressionType(exp);
17045 struct Expression * e;
17047 exp->isConstant = 1;
17048 ProcessExpressionType(exp->__anon1.index.exp);
17049 if(!exp->__anon1.index.exp->isConstant)
17050 exp->isConstant = 0;
17051 if(exp->__anon1.index.exp->expType)
17053 struct Type * source = exp->__anon1.index.exp->expType;
17055 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
17057 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
17058 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
17060 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
17062 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
17063 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
17065 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
17067 if(type->kind == 8)
17068 type->constant = 1;
17069 else if(type->kind == 13)
17071 struct Type * t = type;
17073 while(t->kind == 13)
17074 t = t->__anon1.type;
17077 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
17082 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
17084 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
17087 FreeType(e->destType);
17088 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
17090 ProcessExpressionType(e);
17095 exp->isConstant = 0;
17098 exp->expType = Dereference(exp->__anon1.index.exp->expType);
17100 DeclareType(curExternal, exp->expType, 1, 0);
17105 struct Expression * e;
17106 struct Type * functionType;
17107 struct Type * methodType = (((void *)0));
17113 PrintExpression(exp->__anon1.call.exp, name);
17114 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
17116 PrintExpression(exp->__anon1.call.exp, name);
17119 if(exp->__anon1.call.exp->type == 0)
17121 struct Expression * idExp = exp->__anon1.call.exp;
17122 struct Identifier * id = idExp->__anon1.__anon1.identifier;
17124 if(!strcmp(id->string, "__builtin_frame_address"))
17126 exp->expType = ProcessTypeString("void *", 1);
17127 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17128 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17131 else if(!strcmp(id->string, "__ENDIAN_PAD"))
17133 exp->expType = ProcessTypeString("int", 1);
17134 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17135 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17138 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
17140 struct Expression * a = (((void *)0));
17141 struct Expression * b = (((void *)0));
17142 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
17144 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
17146 a = (*exp->__anon1.call.arguments).first;
17147 b = (*exp->__anon1.call.arguments).last;
17151 else if((*exp->__anon1.call.arguments).count == 1)
17153 a = (*exp->__anon1.call.arguments).first;
17158 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
17159 idExp->__anon1.__anon1.identifier = (((void *)0));
17160 FreeExpContents(exp);
17161 ProcessExpressionType(a);
17163 ProcessExpressionType(b);
17165 exp->__anon1.list = MkList();
17166 if(a->expType && (!b || b->expType))
17168 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
17172 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17173 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
17174 struct Declaration * decl;
17175 char temp1[1024], temp2[1024];
17177 GetTypeSpecs(a->expType, specs);
17178 if(a && !a->isConstant && a->type != 0)
17180 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
17181 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
17182 tempExp1 = QMkExpId(temp1);
17183 tempExp1->expType = a->expType;
17185 a->expType->refCount++;
17186 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
17188 if(b && !b->isConstant && b->type != 0)
17190 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
17191 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
17192 tempExp2 = QMkExpId(temp2);
17193 tempExp2->expType = b->expType;
17195 b->expType->refCount++;
17196 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
17198 decl = MkDeclaration(specs, decls);
17199 if(!curCompound->__anon1.compound.declarations)
17200 curCompound->__anon1.compound.declarations = MkList();
17201 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
17205 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
17207 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
17209 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
17210 exp->expType = a->expType;
17212 a->expType->refCount++;
17214 else if(!strcmp(id->string, "Abs"))
17216 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
17217 exp->expType = a->expType;
17219 a->expType->refCount++;
17221 else if(!strcmp(id->string, "Sgn"))
17223 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"))))));
17224 exp->expType = ProcessTypeString("int", 0);
17226 FreeExpression(tempExp1);
17228 FreeExpression(tempExp2);
17229 FreeIdentifier(id);
17235 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
17237 if(!exp->__anon1.call.exp->destType)
17239 exp->__anon1.call.exp->destType = dummy;
17242 ProcessExpressionType(exp->__anon1.call.exp);
17243 if(exp->__anon1.call.exp->destType == dummy)
17246 exp->__anon1.call.exp->destType = (((void *)0));
17250 functionType = exp->__anon1.call.exp->expType;
17251 if(functionType && functionType->kind == 16)
17253 methodType = functionType;
17254 functionType = methodType->__anon1.__anon3.method->dataType;
17255 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
17257 char typeString[1024];
17259 typeString[0] = '\0';
17261 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
17263 functionType->__anon1.__anon2.thisClass = (((void *)0));
17264 PrintType(functionType, typeString, 1, 1);
17265 functionType->__anon1.__anon2.thisClass = back;
17267 if(strstr(typeString, "thisclass"))
17269 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17270 struct Declarator * decl;
17273 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17275 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17276 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))
17277 thisClassParams = 0;
17278 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17280 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
17282 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
17283 ProcessDeclarator(decl, 1);
17284 thisClass = backupThisClass;
17286 thisClassParams = 1;
17287 functionType = ProcessType(specs, decl);
17288 functionType->refCount = 0;
17289 FinishTemplatesContext(context);
17291 struct Type * p, * op;
17293 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)
17296 p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17299 if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
17301 functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17304 FreeList(specs, (void *)(FreeSpecifier));
17305 FreeDeclarator(decl);
17309 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
17311 struct Type * type = functionType->__anon1.type;
17313 if(!functionType->refCount)
17315 functionType->__anon1.type = (((void *)0));
17316 FreeType(functionType);
17318 functionType = type;
17320 if(functionType && functionType->kind != 11)
17322 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
17324 else if(functionType)
17326 unsigned int emptyParams = 0, noParams = 0;
17327 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
17328 struct Type * type = functionType->__anon1.__anon2.params.first;
17329 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
17331 struct Location oldyylloc = yylloc;
17335 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
17337 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
17340 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
17342 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)
17344 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
17347 e->destType = type;
17349 type = functionType->__anon1.__anon2.params.first;
17352 type->refCount = 0;
17354 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
17356 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
17357 type->byReference = functionType->byReference;
17358 type->typedByReference = functionType->typedByReference;
17361 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
17363 e->destType = type;
17365 type = functionType->__anon1.__anon2.params.first;
17368 type->refCount = 0;
17371 if(type && type->kind == 0)
17374 if(!type->refCount)
17376 type = (((void *)0));
17378 for(; e; e = e->next)
17380 if(!type && !emptyParams)
17383 if(methodType && methodType->__anon1.__anon3.methodClass)
17384 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);
17386 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);
17389 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
17391 struct Type * templatedType = (((void *)0));
17392 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
17393 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
17396 if(_class && _class->templateArgs)
17398 struct __ecereNameSpace__ecere__com__Class * sClass;
17400 for(sClass = _class; sClass; sClass = sClass->base)
17402 if(sClass->templateClass)
17403 sClass = sClass->templateClass;
17405 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
17407 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
17409 struct __ecereNameSpace__ecere__com__Class * nextClass;
17411 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17413 if(nextClass->templateClass)
17414 nextClass = nextClass->templateClass;
17415 id += nextClass->templateParams.count;
17425 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
17427 unsigned int constant = type->constant;
17428 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
17431 struct Context * context = SetupTemplatesContext(_class);
17433 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
17434 FinishTemplatesContext(context);
17436 if(templatedType->kind == 8 && constant)
17437 templatedType->constant = 1;
17438 else if(templatedType->kind == 13)
17440 struct Type * t = templatedType->__anon1.type;
17442 while(t->kind == 13)
17443 t = t->__anon1.type;
17445 t->constant = constant;
17447 e->destType = templatedType;
17450 templatedType->passAsTemplate = 1;
17455 e->destType = type;
17462 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
17464 e->destType = type->prev;
17465 e->destType->refCount++;
17469 e->destType = type;
17474 if(type && type->kind != 14)
17476 struct Type * next = type->next;
17478 if(!type->refCount)
17483 if(type && type->kind != 14)
17485 if(methodType && methodType->__anon1.__anon3.methodClass)
17486 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);
17488 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);
17490 yylloc = oldyylloc;
17491 if(type && !type->refCount)
17496 functionType = __extension__ ({
17497 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17499 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
17501 if(exp->__anon1.call.exp->type == 0)
17503 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
17507 struct Symbol * symbol;
17508 struct Location oldyylloc = yylloc;
17510 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
17511 if(strstr(string, "__builtin_") == string)
17515 functionType->__anon1.__anon2.returnType = exp->destType;
17516 exp->destType->refCount++;
17520 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
17521 symbol = __extension__ ({
17522 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
17524 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
17526 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
17527 if(strstr(symbol->string, "::"))
17528 globalContext->hasNameSpace = 1;
17529 yylloc = oldyylloc;
17532 else if(exp->__anon1.call.exp->type == 8)
17536 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
17537 if(!functionType->__anon1.__anon2.returnType)
17539 functionType->__anon1.__anon2.returnType = __extension__ ({
17540 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17542 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
17546 if(functionType && functionType->kind == 11)
17548 exp->expType = functionType->__anon1.__anon2.returnType;
17549 if(functionType->__anon1.__anon2.returnType)
17550 functionType->__anon1.__anon2.returnType->refCount++;
17551 if(!functionType->refCount)
17552 FreeType(functionType);
17554 if(exp->__anon1.call.arguments)
17556 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
17557 ProcessExpressionType(e);
17563 struct Type * type;
17564 struct Location oldyylloc = yylloc;
17565 unsigned int thisPtr;
17566 struct Expression * checkExp = exp->__anon1.member.exp;
17570 if(checkExp->type == 11)
17571 checkExp = checkExp->__anon1.cast.exp;
17572 else if(checkExp->type == 5)
17573 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
17577 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
17578 exp->thisPtr = thisPtr;
17579 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
17581 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
17583 ProcessExpressionType(exp->__anon1.member.exp);
17584 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)
17586 exp->isConstant = 0;
17589 exp->isConstant = exp->__anon1.member.exp->isConstant;
17590 type = exp->__anon1.member.exp->expType;
17592 if(type && (type->kind == 20))
17594 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
17595 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
17599 for(param = _class->templateParams.first; param; param = param->next)
17601 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
17605 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
17607 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
17611 struct Expression * expMember = exp->__anon1.member.exp;
17612 struct Declarator * decl;
17613 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17614 char thisClassTypeString[1024];
17616 FreeIdentifier(exp->__anon1.member.member);
17617 ProcessExpressionType(argExp);
17619 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
17623 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
17624 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
17627 strcpy(thisClassTypeString, _class->fullName);
17629 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
17630 exp->expType = ProcessType(specs, decl);
17631 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
17633 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
17634 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
17635 int paramCount = 0;
17636 int lastParam = -1;
17637 char templateString[1024];
17638 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
17640 sprintf(templateString, "%s<", expClass->templateClass->fullName);
17641 for(cClass = expClass; cClass; cClass = cClass->base)
17645 for(param = cClass->templateParams.first; param; param = param->next)
17648 struct __ecereNameSpace__ecere__com__Class * sClass;
17649 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
17651 for(sClass = cClass->base; sClass; sClass = sClass->base)
17652 id += sClass->templateParams.count;
17653 arg = expClass->templateArgs[id];
17654 for(sClass = _class; sClass; sClass = sClass->base)
17656 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
17658 struct __ecereNameSpace__ecere__com__Class * nextClass;
17660 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17661 p += nextClass->templateParams.count;
17662 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
17664 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
17666 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17668 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
17669 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
17676 char argument[256];
17678 argument[0] = '\0';
17679 switch(param->type)
17683 char expString[1024];
17684 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17685 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
17686 struct Expression * exp;
17687 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
17689 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
17690 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
17691 ProcessExpressionType(exp);
17692 ComputeExpression(exp);
17693 expString[0] = '\0';
17694 PrintExpression(exp, expString);
17695 strcat(argument, expString);
17696 FreeExpression(exp);
17701 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
17706 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17708 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
17709 strcat(argument, thisClassTypeString);
17711 strcat(argument, arg.__anon1.__anon1.dataTypeString);
17719 strcat(templateString, ", ");
17720 if(lastParam != p - 1)
17722 strcat(templateString, param->name);
17723 strcat(templateString, " = ");
17725 strcat(templateString, argument);
17734 int len = strlen(templateString);
17736 if(templateString[len - 1] == '>')
17737 templateString[len++] = ' ';
17738 templateString[len++] = '>';
17739 templateString[len++] = '\0';
17742 struct Context * context = SetupTemplatesContext(_class);
17744 FreeType(exp->expType);
17745 exp->expType = ProcessTypeString(templateString, 0);
17746 FinishTemplatesContext(context);
17749 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
17750 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
17752 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")))))))));
17755 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
17757 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
17760 if(type && (type->kind == 20))
17762 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)))
17764 struct Identifier * id = exp->__anon1.member.member;
17765 int typeKind = type->kind;
17766 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));
17768 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
17770 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
17775 if(typeKind == 3 || typeKind == 15)
17776 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
17779 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17781 _class = type->__anon1._class->__anon1.registered;
17783 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
17785 _class = FindClass("char *")->__anon1.registered;
17787 else if(type->kind == 13)
17789 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
17790 FreeType(exp->expType);
17791 exp->expType = ProcessTypeString("uintptr", 0);
17792 exp->byReference = 1;
17796 char string[1024] = "";
17797 struct Symbol * classSym;
17799 PrintTypeNoConst(type, string, 0, 1);
17800 classSym = FindClass(string);
17802 _class = classSym->__anon1.registered;
17808 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
17809 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
17810 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
17811 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
17812 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
17814 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
17815 exp->__anon1.member.memberType = 1;
17816 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
17817 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
17820 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
17822 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
17823 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
17825 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17827 member = (((void *)0));
17829 if(!member && !prop)
17830 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17831 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
17832 exp->__anon1.member.thisPtr = 1;
17836 unsigned int useMemberForNonConst = 0;
17840 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
17841 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);
17842 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
17843 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
17845 if((!prop || useMemberForNonConst) && !member)
17847 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
17850 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
17851 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);
17852 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
17853 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
17858 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
17859 prop = (((void *)0));
17861 member = (((void *)0));
17865 if(!prop && !member && !method)
17866 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
17867 if(!prop && !member && !method)
17871 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
17874 exp->__anon1.member.memberType = 5;
17875 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
17879 char structName[1024];
17880 struct Identifier * id = exp->__anon1.member.member;
17881 struct Expression * classExp = exp->__anon1.member.exp;
17884 FreeType(classExp->expType);
17885 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
17886 strcpy(structName, "__ecereClassData_");
17887 FullClassNameCat(structName, type->__anon1._class->string, 0);
17889 exp->__anon1.member.member = id;
17890 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"))))))));
17892 ProcessExpressionType(exp);
17898 struct Symbol * classSym = FindClass(id->string);
17902 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
17905 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
17909 if(exp->__anon1.member.exp->destType)
17910 FreeType(exp->__anon1.member.exp->destType);
17912 if(method && !method->_class->symbol)
17913 method->_class->symbol = FindClass(method->_class->fullName);
17914 if(prop && !prop->_class->symbol)
17915 prop->_class->symbol = FindClass(prop->_class->fullName);
17916 exp->__anon1.member.exp->destType = __extension__ ({
17917 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17919 __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;
17924 exp->__anon1.member.memberType = 1;
17925 if(!prop->dataType)
17926 ProcessPropertyType(prop);
17927 exp->expType = prop->dataType;
17928 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
17930 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17932 CopyTypeInto(type, exp->expType);
17933 type->refCount = 1;
17934 type->constant = 1;
17935 exp->expType = type;
17937 else if(prop->dataType)
17938 prop->dataType->refCount++;
17942 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
17944 FreeExpContents(exp);
17946 exp->__anon1.__anon1.identifier = MkIdentifier("class");
17947 ProcessExpressionType(exp);
17950 exp->__anon1.member.memberType = 3;
17951 DeclareStruct(curExternal, _class->fullName, 0, 1);
17952 if(member->_class != _class)
17953 DeclareStruct(curExternal, member->_class->fullName, 0, 1);
17954 if(!member->dataType)
17956 struct Context * context = SetupTemplatesContext(_class);
17958 member->dataType = ProcessTypeString(member->dataTypeString, 0);
17959 FinishTemplatesContext(context);
17961 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)
17962 member->dataType->bitMemberSize = ((struct __ecereNameSpace__ecere__com__BitMember *)member)->size;
17963 exp->expType = member->dataType;
17964 if(member->dataType)
17965 member->dataType->refCount++;
17967 else if(revConvert)
17969 exp->__anon1.member.memberType = 4;
17970 exp->expType = MkClassType(revConvert->_class->fullName);
17975 exp->__anon1.member.memberType = 2;
17977 if(!method->dataType)
17978 ProcessMethodType(method);
17979 exp->expType = __extension__ ({
17980 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17982 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
17984 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
17985 exp->expType->__anon1.__anon3.usedClass = _class;
17987 else if(!classProp)
17989 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
17991 FreeExpContents(exp);
17993 exp->__anon1.__anon1.identifier = MkIdentifier("class");
17994 FreeType(exp->expType);
17995 exp->expType = MkClassType("ecere::com::Class");
17998 yylloc = exp->__anon1.member.member->loc;
17999 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
18001 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
18003 if(_class && exp->expType)
18005 struct __ecereNameSpace__ecere__com__Class * tClass;
18007 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
18008 while(tClass && !tClass->templateClass)
18009 tClass = tClass->base;
18010 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
18013 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18014 struct __ecereNameSpace__ecere__com__Class * sClass;
18016 for(sClass = tClass; sClass; sClass = sClass->base)
18019 if(sClass->templateClass)
18020 sClass = sClass->templateClass;
18021 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18023 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
18025 for(sClass = sClass->base; sClass; sClass = sClass->base)
18026 id += sClass->templateParams.count;
18034 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
18036 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18037 struct Context * context = SetupTemplatesContext(tClass);
18038 unsigned int constant = exp->expType->constant;
18039 unsigned int passAsTemplate = 0;
18040 struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
18041 struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
18043 if(t && t->kind == 8 && t->__anon1._class)
18044 thisClassFrom = t->__anon1._class->__anon1.registered;
18046 thisClassFrom = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "class");
18048 passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
18049 FreeType(exp->expType);
18050 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18051 exp->expType->thisClassFrom = thisClassFrom;
18052 if(exp->expType->kind == 8 && constant)
18053 exp->expType->constant = 1;
18054 else if(exp->expType->kind == 13)
18056 struct Type * t = exp->expType->__anon1.type;
18058 while(t->kind == 13)
18059 t = t->__anon1.type;
18061 t->constant = constant;
18065 if(exp->expType->kind == 21)
18067 FreeType(exp->expType);
18068 exp->expType = ReplaceThisClassType(_class);
18071 exp->expType->passAsTemplate = 1;
18074 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18075 if(exp->destType->kind == 8 && constant)
18076 exp->destType->constant = 1;
18077 else if(exp->destType->kind == 13)
18079 struct Type * t = exp->destType->__anon1.type;
18081 while(t->kind == 13)
18082 t = t->__anon1.type;
18084 t->constant = constant;
18086 if(exp->destType->kind == 21)
18088 FreeType(exp->destType);
18089 exp->destType = ReplaceThisClassType(_class);
18093 FinishTemplatesContext(context);
18096 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)
18099 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18100 struct __ecereNameSpace__ecere__com__Class * sClass;
18102 for(sClass = tClass; sClass; sClass = sClass->base)
18105 if(sClass->templateClass)
18106 sClass = sClass->templateClass;
18107 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18109 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
18111 for(sClass = sClass->base; sClass; sClass = sClass->base)
18112 id += sClass->templateParams.count;
18122 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18123 struct Context * context = SetupTemplatesContext(tClass);
18124 struct Type * basicType;
18126 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18129 if(basicType->kind == 21)
18131 FreeType(basicType);
18132 basicType = ReplaceThisClassType(_class);
18134 FreeType(exp->expType);
18135 exp->expType = __extension__ ({
18136 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18138 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
18142 exp->destType = exp->expType;
18143 exp->destType->refCount++;
18146 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18147 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18148 struct Declarator * decl;
18150 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18153 exp->destType->refCount++;
18155 exp->expType->refCount++;
18157 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
18158 exp->__anon1.cast.exp = newExp;
18161 FinishTemplatesContext(context);
18164 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
18166 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
18170 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
18172 int paramCount = 0;
18173 int lastParam = -1;
18174 char templateString[1024];
18175 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
18177 sprintf(templateString, "%s<", expClass->templateClass->fullName);
18178 while(cClass != expClass)
18180 struct __ecereNameSpace__ecere__com__Class * sClass;
18182 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
18185 for(param = cClass->templateParams.first; param; param = param->next)
18187 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
18189 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
18190 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
18192 while(cClassCur != tClass && !paramCur)
18194 struct __ecereNameSpace__ecere__com__Class * sClassCur;
18196 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
18198 cClassCur = sClassCur;
18199 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
18201 if(!strcmp(paramCur->name, param->name))
18208 if(paramCur && paramCur->type == 0)
18209 arg = tClass->templateArgs[cp];
18211 arg = expClass->templateArgs[p];
18213 char argument[256];
18215 argument[0] = '\0';
18216 switch(param->type)
18220 char expString[1024];
18221 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18222 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
18223 struct Expression * exp;
18224 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
18226 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
18227 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
18228 ProcessExpressionType(exp);
18229 ComputeExpression(exp);
18230 expString[0] = '\0';
18231 PrintExpression(exp, expString);
18232 strcat(argument, expString);
18233 FreeExpression(exp);
18238 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
18243 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
18244 strcat(argument, arg.__anon1.__anon1.dataTypeString);
18251 strcat(templateString, ", ");
18252 if(lastParam != p - 1)
18254 strcat(templateString, param->name);
18255 strcat(templateString, " = ");
18257 strcat(templateString, argument);
18266 int len = strlen(templateString);
18268 if(templateString[len - 1] == '>')
18269 templateString[len++] = ' ';
18270 templateString[len++] = '>';
18271 templateString[len++] = '\0';
18273 FreeType(exp->expType);
18275 struct Context * context = SetupTemplatesContext(tClass);
18277 exp->expType = ProcessTypeString(templateString, 0);
18278 FinishTemplatesContext(context);
18285 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)");
18287 else if(type && (type->kind == 9 || type->kind == 10))
18289 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
18293 exp->expType = memberType;
18295 memberType->refCount++;
18300 char expString[10240];
18302 expString[0] = '\0';
18305 PrintExpression(exp, expString);
18306 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18308 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
18310 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
18312 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
18314 struct Identifier * id = exp->__anon1.member.member;
18315 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));
18319 FreeType(exp->expType);
18320 exp->expType = ReplaceThisClassType(_class);
18324 yylloc = oldyylloc;
18329 struct Type * destType = exp->destType;
18331 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
18333 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
18335 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
18339 ProcessExpressionType(exp);
18346 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
18348 if(classSym && classSym->__anon1.registered)
18350 if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
18353 struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
18356 DeclareStruct(curExternal, classSym->string, 0, 1);
18357 FreeSpecifier(exp->__anon1._class);
18358 FullClassNameCat(name, classSym->string, 0);
18362 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
18366 struct Expression * e;
18369 if(b->structSize == b->offset)
18370 exp->__anon1.op.exp1 = MkExpConstant("0");
18372 exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18373 exp->__anon1.op.op = '+';
18375 while(b->offset != 0)
18377 struct Symbol * sym;
18378 struct Expression * typeSize;
18381 sym = FindClass(b->fullName);
18383 DeclareStruct(curExternal, sym->string, 0, 1);
18384 FullClassNameCat(name, sym->string, 0);
18385 if(b->structSize == b->offset)
18386 typeSize = MkExpConstant("0");
18388 typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18389 e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
18390 e = e->__anon1.op.exp2;
18396 if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
18398 FreeSpecifier(exp->__anon1._class);
18399 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
18404 char className[1024];
18406 strcpy(className, "__ecereClass_");
18407 FullClassNameCat(className, classSym->string, 1);
18408 DeclareClass(curExternal, classSym, className);
18409 FreeExpContents(exp);
18411 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
18412 exp->__anon1.member.member = MkIdentifier("structSize");
18416 exp->expType = __extension__ ({
18417 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18419 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18425 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
18427 exp->expType = __extension__ ({
18428 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18430 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18432 exp->isConstant = 1;
18433 DeclareType(curExternal, type, 1, 0);
18439 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
18442 FreeType(exp->__anon1.cast.exp->destType);
18443 exp->__anon1.cast.exp->destType = type;
18446 ProcessExpressionType(exp->__anon1.cast.exp);
18449 exp->expType = type;
18450 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
18452 void * prev = exp->prev, * next = exp->next;
18453 struct Type * expType = exp->__anon1.cast.exp->destType;
18454 struct Expression * castExp = exp->__anon1.cast.exp;
18455 struct Type * destType = exp->destType;
18458 expType->refCount++;
18459 FreeType(exp->expType);
18460 FreeTypeName(exp->__anon1.cast.typeName);
18462 FreeType(exp->expType);
18463 FreeType(exp->destType);
18464 exp->expType = expType;
18465 exp->destType = destType;
18466 ((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
18472 exp->isConstant = exp->__anon1.cast.exp->isConstant;
18478 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
18480 exp->expType = type;
18485 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
18487 ProcessExpressionType(exp->__anon1.vaArg.exp);
18488 exp->expType = type;
18493 struct Expression * e;
18494 struct Type * t = exp->destType;
18496 if(t && !exp->destType->casted)
18498 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18499 CopyTypeInto(t, exp->destType);
18504 exp->isConstant = 1;
18505 FreeType(exp->__anon1.cond.cond->destType);
18506 exp->__anon1.cond.cond->destType = MkClassType("bool");
18507 exp->__anon1.cond.cond->destType->truth = 1;
18508 ProcessExpressionType(exp->__anon1.cond.cond);
18509 if(!exp->__anon1.cond.cond->isConstant)
18510 exp->isConstant = 0;
18511 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
18515 FreeType(e->destType);
18518 e->destType->refCount++;
18520 ProcessExpressionType(e);
18523 exp->expType = e->expType;
18525 e->expType->refCount++;
18528 exp->isConstant = 0;
18530 FreeType(exp->__anon1.cond.elseExp->destType);
18531 exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
18532 if(exp->__anon1.cond.elseExp->destType)
18533 exp->__anon1.cond.elseExp->destType->refCount++;
18534 ProcessExpressionType(exp->__anon1.cond.elseExp);
18535 if(!exp->__anon1.cond.elseExp->isConstant)
18536 exp->isConstant = 0;
18542 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
18544 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
18546 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
18548 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
18550 exp->destType->refCount++;
18552 ProcessStatement(exp->__anon1.compound);
18553 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
18555 exp->expType->refCount++;
18561 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
18563 if(spec && spec->type == 1)
18565 exp->expType = MkClassType(spec->__anon1.__anon1.name);
18566 exp->expType->kind = 19;
18567 exp->byReference = 1;
18571 exp->expType = MkClassType("ecere::com::Class");
18572 exp->byReference = 1;
18578 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
18582 struct Identifier * id = exp->__anon1.classData.id;
18583 char structName[1024];
18584 struct Expression * classExp;
18586 strcpy(structName, "__ecereClassData_");
18587 FullClassNameCat(structName, _class->fullName, 0);
18589 exp->__anon1.member.member = id;
18590 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
18591 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
18593 classExp = MkExpIdentifier(MkIdentifier("class"));
18594 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"))))))));
18595 ProcessExpressionType(exp);
18602 struct Type * type = (((void *)0));
18603 const char * typeString = (((void *)0));
18604 char typeStringBuf[1024];
18606 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))
18608 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
18610 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
18612 else if(exp->__anon1.list)
18614 struct Expression * e;
18616 for(e = (*exp->__anon1.list).first; e; e = e->next)
18618 ProcessExpressionType(e);
18628 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18632 e->expType = (((void *)0));
18633 e = (*exp->__anon1.list).first;
18634 ProcessExpressionType(e);
18637 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18639 FreeType(e->expType);
18640 e->expType = (((void *)0));
18642 type = (((void *)0));
18650 FreeType(e->expType);
18651 e->expType = (((void *)0));
18657 typeStringBuf[0] = '\0';
18658 PrintTypeNoConst(type, typeStringBuf, 0, 1);
18659 typeString = typeStringBuf;
18661 type = (((void *)0));
18666 char templateString[1024];
18667 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18668 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
18669 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18670 struct Expression * expExt;
18671 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
18673 sprintf(templateString, "Container<%s>", typeString);
18674 if(exp->__anon1.list)
18676 struct Expression * e;
18678 type = ProcessTypeString(typeString, 0);
18679 while((e = (*exp->__anon1.list).first))
18681 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
18682 e->destType = type;
18684 ProcessExpressionType(e);
18685 ListAdd(initializers, MkInitializerAssignment(e));
18688 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
18690 DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
18691 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
18692 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18693 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
18694 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18695 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
18696 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18697 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
18698 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18699 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
18700 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18702 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
18704 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18705 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
18706 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18707 exp->expType = ProcessTypeString(templateString, 0);
18709 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
18710 ProcessExpressionType(expExt);
18714 exp->expType = ProcessTypeString("Container", 0);
18715 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18720 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
18722 FreeType(exp->expType);
18723 exp->expType = ReplaceThisClassType(thisClass);
18725 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)
18727 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
18731 if(exp->expType->kind != 15)
18733 struct Type * member;
18734 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
18736 FreeType(exp->expType);
18737 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18738 exp->expType->kind = symbol->type->kind;
18739 exp->expType->refCount++;
18740 exp->expType->__anon1.__anon1.enumName = enumName;
18741 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
18742 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18743 member->refCount++;
18747 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
18749 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18751 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);
18753 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
18758 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)))
18760 exp->byReference = 1;
18763 if(exp->destType && (exp->destType->kind == 18))
18765 else if(exp->destType && !exp->destType->keepCast)
18767 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
18768 exp->needTemplateCast = 1;
18769 if(exp->destType->kind == 0)
18771 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
18773 unsigned int invalidCast = 0;
18775 if(inCompiler && exp->destType->count && exp->expType)
18777 struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
18778 struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
18780 if(c1 && c1->type != 1)
18781 c1 = (((void *)0));
18782 if(c2 && c2->type != 1)
18783 c2 = (((void *)0));
18784 if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
18787 if(!exp->destType->count || unresolved || invalidCast)
18792 if(exp->destType->kind != 14)
18799 char expString[10240];
18801 expString[0] = '\0';
18802 PrintType(exp->destType, type2, 0, 1);
18805 PrintExpression(exp, expString);
18806 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18809 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
18810 else if(exp->type != 16)
18811 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
18816 char expString[10240];
18818 expString[0] = '\0';
18821 PrintExpression(exp, expString);
18822 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18825 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
18826 else if(exp->type != 16)
18827 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
18839 PrintType(exp->expType, type1, 0, 1);
18840 PrintType(exp->destType, type2, 0, 1);
18842 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)))
18846 struct Expression * nbExp = GetNonBracketsExp(exp);
18847 unsigned int skipWarning = 0;
18848 int kind = exp->destType->kind;
18850 if(nbExp->type == 12 && nbExp->destType && !nbExp->destType->casted && nbExp->destType->kind == exp->destType->kind)
18852 if((kind == 1 || kind == 2) && exp->destType->isSigned == exp->expType->signedBeforePromotion && nbExp->type == 4 && nbExp->__anon1.op.exp1 && nbExp->__anon1.op.exp2)
18854 int op = nbExp->__anon1.op.op;
18855 struct Expression * nbExp1, * nbExp2;
18862 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18863 from = nbExp1->expType->promotedFrom;
18864 if(from == 1 || (kind == 2 && from == 2))
18869 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18870 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18871 from = nbExp1->expType->promotedFrom;
18872 if(op == RIGHT_OP && (from == 1 || (kind == 2 && from == 2)))
18874 else if(nbExp2->isConstant && nbExp2->type == 2 && (nbExp->__anon1.op.op == RIGHT_OP || nbExp1->expType->bitMemberSize))
18876 int n = strtol(nbExp2->__anon1.__anon1.constant, (((void *)0)), 0);
18877 int s = from == 1 ? 8 : 16;
18879 if(nbExp1->expType->bitMemberSize && nbExp1->expType->bitMemberSize < s)
18880 s = nbExp1->expType->bitMemberSize;
18881 if(nbExp->__anon1.op.op == RIGHT_OP)
18885 if(s <= (kind == 1 ? 8 : 16))
18890 if(!exp->destType->isSigned)
18892 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18893 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18894 from = nbExp2->expType->promotedFrom;
18895 if((from == 1 || from == 2) && nbExp1->isConstant && nbExp1->type == 2)
18897 int n = strtol(nbExp1->__anon1.__anon1.constant, (((void *)0)), 0);
18899 if(n == (from == 1 ? 255 : 65535))
18908 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18909 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18910 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
18911 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
18912 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)))
18920 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
18921 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
18922 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
18923 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
18924 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)))
18932 char expString[10240];
18934 expString[0] = '\0';
18937 PrintExpression(exp, expString);
18938 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18940 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")))
18943 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
18945 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
18950 FreeType(exp->expType);
18951 exp->destType->refCount++;
18952 exp->expType = exp->destType;
18958 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))
18960 struct Expression * nbExp = GetNonBracketsExp(exp);
18962 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
18964 struct Expression * e = MoveExpContents(exp);
18966 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
18968 exp->__anon1.cast.exp->destType = exp->destType;
18970 exp->destType->refCount++;
18971 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
18975 else if(unresolved)
18977 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
18978 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);
18979 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
18980 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
18982 else if(!exp->expType && exp->type != 16)
18984 char expString[10240];
18986 expString[0] = '\0';
18989 PrintExpression(exp, expString);
18990 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18992 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
18995 ApplyAnyObjectLogic(exp);
18996 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)))
18998 exp->byReference = 1;
19000 yylloc = oldyylloc;
19003 static void ProcessFunction(struct FunctionDefinition * function)
19005 struct Identifier * id = GetDeclId(function->declarator);
19006 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
19007 struct Type * type = symbol ? symbol->type : (((void *)0));
19008 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
19009 struct Context * oldTopContext = topContext;
19011 yylloc = function->loc;
19012 if(type && type->__anon1.__anon2.thisClass)
19014 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
19015 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
19016 char className[1024];
19017 char structName[1024];
19018 struct Declarator * funcDecl;
19019 struct Symbol * thisSymbol;
19020 unsigned int typedObject = 0;
19022 if(_class && !_class->base)
19024 _class = currentClass;
19025 if(_class && !_class->symbol)
19026 _class->symbol = FindClass(_class->fullName);
19027 classSym = _class ? _class->symbol : (((void *)0));
19030 thisClass = _class;
19031 if(inCompiler && _class)
19033 if(type->kind == 11)
19035 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
19037 struct Type * param = symbol->type->__anon1.__anon2.params.first;
19039 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
19042 if(type->classObjectType != 1)
19044 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
19045 symbol->type->__anon1.__anon2.staticMethod = 1;
19046 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
19047 symbol->type->extraParam = 0;
19050 strcpy(className, "__ecereClass_");
19051 FullClassNameCat(className, _class->fullName, 1);
19053 FullClassNameCat(structName, _class->fullName, 0);
19054 funcDecl = GetFuncDecl(function->declarator);
19057 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19059 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19061 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19063 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19064 FreeTypeName(param);
19067 if(!function->propertyNoThis)
19069 struct TypeName * thisParam = (((void *)0));
19071 if(type->classObjectType != 1)
19073 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19074 if(!funcDecl->__anon1.function.parameters)
19075 funcDecl->__anon1.function.parameters = MkList();
19076 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19080 if(type->classObjectType != 1)
19082 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
19083 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
19085 thisParam = __extension__ ({
19086 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
19088 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
19090 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
19091 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19095 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19097 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19099 funcDecl = GetFuncDecl(initDecl->declarator);
19102 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19104 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19106 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19108 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19109 FreeTypeName(param);
19112 if(type->classObjectType != 1)
19114 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
19116 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19118 if(!funcDecl->__anon1.function.parameters)
19119 funcDecl->__anon1.function.parameters = MkList();
19120 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19128 if(type->classObjectType != 1)
19130 thisSymbol = __extension__ ({
19131 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
19133 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
19135 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19136 if(typedObject && thisSymbol->type)
19138 thisSymbol->type->classObjectType = 2;
19139 thisSymbol->type->byReference = type->byReference;
19140 thisSymbol->type->typedByReference = type->byReference;
19144 if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
19146 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
19149 struct __ecereNameSpace__ecere__com__Class * base;
19151 for(base = _class; base && base->type != 1000; base = base->next)
19153 for(member = base->membersAndProperties.first; member; member = member->next)
19154 if(!member->isProperty)
19160 for(member = _class->membersAndProperties.first; member; member = member->next)
19161 if(!member->isProperty)
19165 char pointerName[1024];
19166 struct Declaration * decl;
19167 struct Initializer * initializer;
19168 struct Expression * exp, * bytePtr;
19170 strcpy(pointerName, "__ecerePointer_");
19171 FullClassNameCat(pointerName, _class->fullName, 0);
19173 char className[1024];
19175 strcpy(className, "__ecereClass_");
19176 FullClassNameCat(className, classSym->string, 1);
19177 DeclareClass(curExternal, classSym, className);
19179 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
19182 struct Expression * e;
19184 if(_class->offset && _class->offset == (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize))
19186 e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
19187 ProcessExpressionType(e);
19193 sprintf(string, "%d", _class->offset);
19194 e = MkExpConstant(string);
19196 exp = QBrackets(MkExpOp(bytePtr, '+', e));
19200 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
19202 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
19203 exp->expType = __extension__ ({
19204 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19206 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
19207 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19209 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
19210 }), __ecereInstance2;
19214 yylloc = function->body->loc;
19215 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
19217 struct Context * prevContext = curContext;
19218 struct __ecereNameSpace__ecere__sys__OldList * list;
19220 curContext = function->body->__anon1.compound.context;
19221 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
19222 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
19223 curContext = prevContext;
19225 decl->symbol = (((void *)0));
19226 if(!function->body->__anon1.compound.declarations)
19227 function->body->__anon1.compound.declarations = MkList();
19228 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
19234 thisClass = (((void *)0));
19237 FreeSpecifier(id->_class);
19238 id->_class = (((void *)0));
19239 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19241 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19243 id = GetDeclId(initDecl->declarator);
19244 FreeSpecifier(id->_class);
19245 id->_class = (((void *)0));
19249 topContext = function->body->__anon1.compound.context;
19251 struct FunctionDefinition * oldFunction = curFunction;
19253 curFunction = function;
19255 ProcessStatement(function->body);
19256 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
19258 struct Statement * prevCompound = curCompound;
19259 struct Context * prevContext = curContext;
19260 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
19262 if(!function->body->__anon1.compound.statements)
19263 function->body->__anon1.compound.statements = MkList();
19264 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
19265 curCompound = function->body;
19266 curContext = function->body->__anon1.compound.context;
19267 ProcessStatement(fireWatchers);
19268 curContext = prevContext;
19269 curCompound = prevCompound;
19271 curFunction = oldFunction;
19273 if(function->declarator)
19275 ProcessDeclarator(function->declarator, 1);
19277 topContext = oldTopContext;
19278 thisClass = oldThisClass;
19281 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
19283 struct ClassDef * def;
19284 struct External * external = curExternal;
19285 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
19287 for(def = definitions->first; def; def = def->next)
19291 if(def->__anon1.function->declarator)
19292 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
19294 curExternal = external;
19295 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
19297 else if(def->type == 2)
19299 if(def->__anon1.decl->type == 2)
19301 thisClass = regClass;
19302 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
19303 thisClass = (((void *)0));
19307 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
19310 thisClass = regClass;
19311 ProcessDeclaration(def->__anon1.decl, symbol ? 1 : 0);
19312 thisClass = backThisClass;
19315 else if(def->type == 1 && def->__anon1.defProperties)
19317 struct MemberInit * defProperty;
19318 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);
19320 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19321 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
19323 thisClass = regClass;
19324 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
19325 thisClass = (((void *)0));
19327 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19328 FreeSymbol(thisSymbol);
19330 else if(def->type == 3 && def->__anon1.propertyDef)
19332 struct PropertyDef * prop = def->__anon1.propertyDef;
19334 thisClass = regClass;
19339 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19341 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19343 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
19344 ProcessStatement(prop->setStmt);
19350 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19352 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19354 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
19355 ProcessStatement(prop->getStmt);
19357 if(prop->issetStmt)
19361 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19363 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19365 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
19366 ProcessStatement(prop->issetStmt);
19368 thisClass = (((void *)0));
19370 else if(def->type == 4 && def->__anon1.propertyWatch)
19372 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
19374 thisClass = regClass;
19375 if(propertyWatch->compound)
19377 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);
19379 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19380 curExternal = (((void *)0));
19381 ProcessStatement(propertyWatch->compound);
19383 thisClass = (((void *)0));
19388 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19390 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19392 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19393 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19394 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19395 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19396 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19397 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19398 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19399 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19400 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19401 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19402 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19403 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19404 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19405 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19406 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19407 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19408 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19409 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19410 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19411 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19412 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19413 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19414 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19415 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19416 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19417 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19418 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19419 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19420 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19421 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19422 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19423 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19424 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19425 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19426 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19427 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19428 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19429 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19430 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19431 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19432 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19433 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19434 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19435 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19436 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19437 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19438 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19439 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19440 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19441 __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);
19442 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "External DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference)", DeclareStruct, module, 2);
19443 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclareStruct", "External _DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference, bool fwdDecl)", _DeclareStruct, module, 2);
19444 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(External neededBy, ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19445 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19446 __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);
19447 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19448 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareType", "void DeclareType(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareType, module, 2);
19449 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareTypeForwardDeclare", "void DeclareTypeForwardDeclare(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareTypeForwardDeclare, module, 2);
19450 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19451 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19452 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19453 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19454 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19455 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(External neededFor, ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19456 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19457 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19458 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19459 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(External neededFor, ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19460 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(External neededFor, GlobalData data)", DeclareGlobalData, module, 2);
19461 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19462 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)
19463 __ecereClass_Conversion = class;
19464 __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);
19465 __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);
19466 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19467 __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);
19468 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19469 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19470 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19471 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19472 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19473 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19474 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19475 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19476 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19477 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19478 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19479 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19480 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19481 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19482 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19483 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19484 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19485 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19486 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19487 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19488 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(External neededBy, const String s)", DeclareFunctionUtil, module, 1);
19489 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);