1 /* Code generated from eC source file: pass2.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 unsigned int internalValueCounter;
59 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_isPointerType;
61 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_specConst;
63 struct __ecereNameSpace__ecere__sys__OldList
72 struct __ecereNameSpace__ecere__sys__BTNode;
74 struct __ecereNameSpace__ecere__com__DataValue
89 } ecere_gcc_struct __anon1;
92 struct __ecereNameSpace__ecere__com__SerialBuffer
94 unsigned char * _buffer;
100 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
102 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
104 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
106 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
108 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory);
120 struct TemplateArgument;
140 extern int strcmp(const char * , const char * );
142 extern char * strcpy(char * , const char * );
144 extern void FullClassNameCat(char * output, const char * className, unsigned int includeTemplateParams);
146 extern char * strcat(char * , const char * );
148 extern char * __ecereNameSpace__ecere__sys__CopyString(const char * string);
150 extern int sprintf(char * , const char * , ...);
152 extern char * QMkString(const char * source);
154 struct __ecereNameSpace__ecere__com__LinkList
161 extern void Compiler_Error(const char * format, ...);
163 extern const char * __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char * string, const char * stringAndContext);
165 extern int printf(const char * , ...);
167 struct __ecereNameSpace__ecere__com__GlobalFunction;
169 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
171 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
173 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
175 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* CopyFunction)(void * ));
177 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* FreeFunction)(void * ));
179 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
181 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
183 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
185 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
187 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
191 struct CodePosition start;
192 struct CodePosition end;
195 extern struct Location yylloc;
199 extern struct External * curExternal;
201 extern void DeclareFunctionUtil(struct External * neededBy, const char * s);
203 extern struct External * DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference);
207 static struct Statement * curCompound;
209 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
211 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
215 extern struct Context * curContext;
217 extern struct Context * PushContext(void);
219 extern void PopContext(struct Context * ctx);
221 extern struct Context * globalContext;
223 extern void FinishTemplatesContext(struct Context * context);
225 struct __ecereNameSpace__ecere__com__Class;
227 struct __ecereNameSpace__ecere__com__Instance
230 struct __ecereNameSpace__ecere__com__Class * _class;
234 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
236 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value);
238 extern struct __ecereNameSpace__ecere__com__Class * containerClass;
240 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
242 extern struct __ecereNameSpace__ecere__com__Class * thisClass;
244 extern struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class);
246 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
248 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char * name, void * function);
250 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
252 struct __ecereNameSpace__ecere__com__Property;
254 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
256 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);
258 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void * instance, struct __ecereNameSpace__ecere__com__Property * _property, void * object, void (* callback)(void * , void * ));
260 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
262 extern void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName);
266 extern struct Expression * CopyExpression(struct Expression * exp);
268 extern void FreeExpContents(struct Expression * exp);
270 extern void FreeExpression(struct Expression * exp);
272 extern struct Expression * MkExpIndex(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * index);
274 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
276 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
278 extern struct Expression * QMkExpId(const char * id);
280 extern struct Expression * MkExpConstant(const char * string);
282 extern struct Expression * MkExpString(const char * string);
284 extern struct Expression * QBrackets(struct Expression * exp);
286 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
288 extern void ProcessExpressionType(struct Expression * exp);
290 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
292 extern struct Expression * MkExpExtensionCompound(struct Statement * compound);
294 extern void ProcessExpressionInstPass(struct Expression * exp);
296 extern struct Expression * MoveExpContents(struct Expression * exp);
300 extern struct Declarator * SpecDeclFromString(const char * string, struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * baseDecl);
302 extern struct Declarator * MkDeclaratorBrackets(struct Declarator * declarator);
304 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
306 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
308 extern struct Declarator * QMkPtrDecl(const char * id);
310 extern void FreeDeclarator(struct Declarator * decl);
312 extern char * StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
314 struct TemplateDatatype
316 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
317 struct Declarator * decl;
320 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
324 extern struct Specifier * MkSpecifierName(const char * name);
326 extern void FreeSpecifier(struct Specifier * spec);
328 extern struct Specifier * MkSpecifier(int specifier);
330 extern struct Expression * MkExpClassSize(struct Specifier * _class);
332 extern struct Specifier * CopySpecifier(struct Specifier * spec);
336 extern struct Symbol * FindClass(const char * name);
338 extern void DeclareClass(struct External * neededFor, struct Symbol * classSym, const char * className);
340 extern void FreeSymbol(struct Symbol * symbol);
346 struct Declarator * prev;
347 struct Declarator * next;
350 struct Symbol * symbol;
351 struct Declarator * declarator;
354 struct Identifier * identifier;
357 struct Expression * exp;
358 struct Expression * posExp;
359 struct Attrib * attrib;
360 } ecere_gcc_struct structDecl;
363 struct Expression * exp;
364 struct Specifier * enumClass;
365 } ecere_gcc_struct array;
368 struct __ecereNameSpace__ecere__sys__OldList * parameters;
369 } ecere_gcc_struct function;
372 struct Pointer * pointer;
373 } ecere_gcc_struct pointer;
376 struct ExtDecl * extended;
377 } ecere_gcc_struct extended;
378 } ecere_gcc_struct __anon1;
381 extern void FreeIdentifier(struct Identifier * id);
383 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
385 extern struct Expression * MkExpIdentifier(struct Identifier * id);
387 extern struct Identifier * MkIdentifier(const char * string);
391 struct Identifier * prev;
392 struct Identifier * next;
394 struct Symbol * classSym;
395 struct Specifier * _class;
397 struct Identifier * badID;
400 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
402 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
404 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
408 struct __ecereNameSpace__ecere__com__Property
410 struct __ecereNameSpace__ecere__com__Property * prev;
411 struct __ecereNameSpace__ecere__com__Property * next;
413 unsigned int isProperty;
416 struct __ecereNameSpace__ecere__com__Class * _class;
417 const char * dataTypeString;
418 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
419 struct Type * dataType;
420 void (* Set)(void * , int);
421 int (* Get)(void * );
422 unsigned int (* IsSet)(void * );
426 unsigned int conversion;
427 unsigned int watcherOffset;
428 const char * category;
429 unsigned int compiled;
430 unsigned int selfWatchable;
431 unsigned int isWatchable;
434 extern struct Type * MkClassType(const char * name);
436 extern void FreeType(struct Type * type);
438 extern struct Type * ProcessTypeString(const char * string, unsigned int staticMethod);
440 extern void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
442 extern int ComputeTypeSize(struct Type * type);
444 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
446 extern void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
448 struct Instantiation;
450 extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
454 struct Instantiation * prev;
455 struct Instantiation * next;
457 struct Specifier * _class;
458 struct Expression * exp;
459 struct __ecereNameSpace__ecere__sys__OldList * members;
460 struct Symbol * symbol;
461 unsigned int fullSet;
462 unsigned int isConstant;
463 unsigned char * data;
464 struct Location nameLoc;
465 struct Location insideLoc;
473 struct TypeName * prev;
474 struct TypeName * next;
476 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
477 struct Declarator * declarator;
479 struct Expression * bitCount;
482 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
484 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
486 extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
488 extern struct TypeName * QMkType(const char * spec, struct Declarator * decl);
490 extern void FreeTypeName(struct TypeName * typeName);
496 struct Statement * prev;
497 struct Statement * next;
502 struct __ecereNameSpace__ecere__sys__OldList * expressions;
505 struct Identifier * id;
506 struct Statement * stmt;
507 } ecere_gcc_struct labeled;
510 struct Expression * exp;
511 struct Statement * stmt;
512 } ecere_gcc_struct caseStmt;
515 struct __ecereNameSpace__ecere__sys__OldList * declarations;
516 struct __ecereNameSpace__ecere__sys__OldList * statements;
517 struct Context * context;
518 unsigned int isSwitch;
519 } ecere_gcc_struct compound;
522 struct __ecereNameSpace__ecere__sys__OldList * exp;
523 struct Statement * stmt;
524 struct Statement * elseStmt;
525 } ecere_gcc_struct ifStmt;
528 struct __ecereNameSpace__ecere__sys__OldList * exp;
529 struct Statement * stmt;
530 } ecere_gcc_struct switchStmt;
533 struct __ecereNameSpace__ecere__sys__OldList * exp;
534 struct Statement * stmt;
535 } ecere_gcc_struct whileStmt;
538 struct __ecereNameSpace__ecere__sys__OldList * exp;
539 struct Statement * stmt;
540 } ecere_gcc_struct doWhile;
543 struct Statement * init;
544 struct Statement * check;
545 struct __ecereNameSpace__ecere__sys__OldList * increment;
546 struct Statement * stmt;
547 } ecere_gcc_struct forStmt;
550 struct Identifier * id;
551 } ecere_gcc_struct gotoStmt;
554 struct Specifier * spec;
556 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
557 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
558 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
559 } ecere_gcc_struct asmStmt;
562 struct Expression * watcher;
563 struct Expression * object;
564 struct __ecereNameSpace__ecere__sys__OldList * watches;
565 } ecere_gcc_struct _watch;
568 struct Identifier * id;
569 struct __ecereNameSpace__ecere__sys__OldList * exp;
570 struct __ecereNameSpace__ecere__sys__OldList * filter;
571 struct Statement * stmt;
572 } ecere_gcc_struct forEachStmt;
573 struct Declaration * decl;
574 } ecere_gcc_struct __anon1;
577 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
579 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
583 struct Declaration * prev;
584 struct Declaration * next;
591 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
592 struct __ecereNameSpace__ecere__sys__OldList * declarators;
593 } ecere_gcc_struct __anon1;
594 struct Instantiation * inst;
597 struct Identifier * id;
598 struct Expression * exp;
599 } ecere_gcc_struct __anon2;
600 } ecere_gcc_struct __anon1;
601 struct Specifier * extStorage;
602 struct Symbol * symbol;
610 struct Expression * prev;
611 struct Expression * next;
619 struct Identifier * identifier;
620 } ecere_gcc_struct __anon1;
621 struct Statement * compound;
622 struct Instantiation * instance;
626 unsigned int intlString;
627 unsigned int wideString;
628 } ecere_gcc_struct __anon2;
629 struct __ecereNameSpace__ecere__sys__OldList * list;
632 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
633 struct Declarator * decl;
634 } ecere_gcc_struct _classExp;
637 struct Identifier * id;
638 } ecere_gcc_struct classData;
641 struct Expression * exp;
642 struct __ecereNameSpace__ecere__sys__OldList * arguments;
643 struct Location argLoc;
644 } ecere_gcc_struct call;
647 struct Expression * exp;
648 struct __ecereNameSpace__ecere__sys__OldList * index;
649 } ecere_gcc_struct index;
652 struct Expression * exp;
653 struct Identifier * member;
655 unsigned int thisPtr;
656 } ecere_gcc_struct member;
660 struct Expression * exp1;
661 struct Expression * exp2;
662 } ecere_gcc_struct op;
663 struct TypeName * typeName;
664 struct Specifier * _class;
667 struct TypeName * typeName;
668 struct Expression * exp;
669 } ecere_gcc_struct cast;
672 struct Expression * cond;
673 struct __ecereNameSpace__ecere__sys__OldList * exp;
674 struct Expression * elseExp;
675 } ecere_gcc_struct cond;
678 struct TypeName * typeName;
679 struct Expression * size;
680 } ecere_gcc_struct _new;
683 struct TypeName * typeName;
684 struct Expression * size;
685 struct Expression * exp;
686 } ecere_gcc_struct _renew;
690 struct Identifier * id;
691 } ecere_gcc_struct db;
694 struct Expression * ds;
695 struct Expression * name;
696 } ecere_gcc_struct dbopen;
699 struct TypeName * typeName;
700 struct Initializer * initializer;
701 } ecere_gcc_struct initializer;
704 struct Expression * exp;
705 struct TypeName * typeName;
706 } ecere_gcc_struct vaArg;
709 struct TypeName * typeName;
710 struct Identifier * id;
711 } ecere_gcc_struct offset;
712 } ecere_gcc_struct __anon1;
713 unsigned int debugValue;
714 struct __ecereNameSpace__ecere__com__DataValue val;
716 unsigned int hasAddress;
717 struct Type * expType;
718 struct Type * destType;
721 unsigned int byReference;
722 unsigned int isConstant;
723 unsigned int addedThis;
724 unsigned int needCast;
725 unsigned int thisPtr;
726 unsigned int opDestType;
727 unsigned int needTemplateCast;
730 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
734 struct Initializer * prev;
735 struct Initializer * next;
740 struct Expression * exp;
741 struct __ecereNameSpace__ecere__sys__OldList * list;
742 } ecere_gcc_struct __anon1;
743 unsigned int isConstant;
744 struct Identifier * id;
747 static void _FixRefExp(struct Expression ** expPtr, struct Expression ** memberExpPtr)
749 struct Expression * memberExp = *memberExpPtr;
751 if(memberExp && memberExp->type == 8 && memberExp->__anon1.member.exp && (memberExp->__anon1.member.exp->type == 5 || memberExp->__anon1.member.exp->type == 32))
753 struct Expression * bracketExp = memberExp->__anon1.member.exp;
754 struct Expression * idExp = (*bracketExp->__anon1.list).last;
756 if(idExp && idExp->type == 0)
758 struct Expression * newExp = (((void *)0));
759 struct Expression * exp = *expPtr;
761 *memberExpPtr = (((void *)0));
762 newExp = CopyExpression(exp);
763 FreeExpContents(exp);
764 *(struct Expression **)((unsigned char *)newExp + ((unsigned char *)memberExpPtr - (unsigned char *)exp)) = memberExp;
765 memberExp->__anon1.member.exp = idExp;
767 exp->__anon1.list = bracketExp->__anon1.list;
768 bracketExp->__anon1.list = (((void *)0));
769 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), idExp);
770 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*exp->__anon1.list), newExp);
771 FreeExpression(bracketExp);
775 else if(*expPtr && (*expPtr)->type == 4 && (*expPtr)->__anon1.op.op == '&' && !(*expPtr)->__anon1.op.exp1 && memberExp && (memberExp->type == 5 || memberExp->type == 32) && memberExp->__anon1.list && (*memberExp->__anon1.list).count > 1)
777 struct Expression * newExp = (((void *)0));
778 struct Expression * exp = *expPtr;
780 *memberExpPtr = (((void *)0));
781 newExp = CopyExpression(exp);
782 *(struct Expression **)((unsigned char *)newExp + ((unsigned char *)memberExpPtr - (unsigned char *)exp)) = (*memberExp->__anon1.list).last;
784 exp->__anon1.list = memberExp->__anon1.list;
785 memberExp->__anon1.list = (((void *)0));
786 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), (*exp->__anon1.list).last);
787 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*exp->__anon1.list), newExp);
788 FreeExpression(memberExp);
793 static struct Expression * GetInnerExp(struct Expression * exp)
795 struct Expression * e = exp;
797 while(e && (e->type == 5 || e->type == 11))
800 e = e->__anon1.list ? (*e->__anon1.list).last : (((void *)0));
801 else if(e->type == 11)
802 e = e->__anon1.cast.exp;
807 struct Expression * GetNonBracketsExp(struct Expression * exp)
809 struct Expression * e = exp;
811 while(e && e->type == 5)
812 e = e->__anon1.list ? (*e->__anon1.list).last : (((void *)0));
816 static struct Expression * FixRefExp(struct Expression * exp)
820 _FixRefExp(&exp, &exp->__anon1.op.exp1);
821 _FixRefExp(&exp, &exp->__anon1.op.exp2);
823 else if(exp->type == 6)
824 _FixRefExp(&exp, &exp->__anon1.index.exp);
825 else if(exp->type == 8)
826 _FixRefExp(&exp, &exp->__anon1.member.exp);
832 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
834 struct __ecereNameSpace__ecere__sys__BinaryTree;
836 struct __ecereNameSpace__ecere__sys__BinaryTree
838 struct __ecereNameSpace__ecere__sys__BTNode * root;
840 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
841 void (* FreeKey)(void * key);
844 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
846 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
848 struct __ecereNameSpace__ecere__com__Method;
850 struct __ecereNameSpace__ecere__com__Method
853 struct __ecereNameSpace__ecere__com__Method * parent;
854 struct __ecereNameSpace__ecere__com__Method * left;
855 struct __ecereNameSpace__ecere__com__Method * right;
860 struct __ecereNameSpace__ecere__com__Class * _class;
862 const char * dataTypeString;
863 struct Type * dataType;
870 struct Symbol * parent;
871 struct Symbol * left;
872 struct Symbol * right;
877 struct __ecereNameSpace__ecere__com__Method * method;
878 struct __ecereNameSpace__ecere__com__Property * _property;
879 struct __ecereNameSpace__ecere__com__Class * registered;
880 } ecere_gcc_struct __anon1;
881 unsigned int notYetDeclared;
886 struct External * pointerExternal;
887 struct External * structExternal;
888 } ecere_gcc_struct __anon1;
891 struct External * externalGet;
892 struct External * externalSet;
893 struct External * externalPtr;
894 struct External * externalIsSet;
895 } ecere_gcc_struct __anon2;
898 struct External * methodExternal;
899 struct External * methodCodeExternal;
900 } ecere_gcc_struct __anon3;
901 } ecere_gcc_struct __anon2;
902 unsigned int imported;
903 unsigned int declaredStructSym;
904 struct __ecereNameSpace__ecere__com__Class * _class;
905 unsigned int declaredStruct;
906 unsigned int needConstructor;
907 unsigned int needDestructor;
908 char * constructorName;
911 char * destructorName;
912 struct ModuleImport * module;
913 struct ClassImport * _import;
914 struct Location nameLoc;
915 unsigned int isParam;
916 unsigned int isRemote;
917 unsigned int isStruct;
918 unsigned int fireWatchersDone;
920 unsigned int classData;
921 unsigned int isStatic;
923 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
924 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
925 struct Context * ctx;
927 struct Expression * propCategory;
928 unsigned int mustRegister;
931 extern void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char * name);
933 struct PropertyWatch;
937 struct PropertyWatch * prev;
938 struct PropertyWatch * next;
940 struct Statement * compound;
941 struct __ecereNameSpace__ecere__sys__OldList * properties;
942 unsigned int deleteWatch;
945 struct __ecereNameSpace__ecere__com__ClassProperty;
947 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
949 struct __ecereNameSpace__ecere__com__ClassProperty
952 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
953 struct __ecereNameSpace__ecere__com__ClassProperty * left;
954 struct __ecereNameSpace__ecere__com__ClassProperty * right;
956 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
957 long long (* Get)(struct __ecereNameSpace__ecere__com__Class *);
958 const char * dataTypeString;
959 struct Type * dataType;
960 unsigned int constant;
963 struct __ecereNameSpace__ecere__com__Module;
965 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);
967 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
969 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);
971 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
973 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);
975 struct TemplateParameter;
984 struct Symbol * _class;
987 struct __ecereNameSpace__ecere__sys__OldList members;
989 } ecere_gcc_struct __anon1;
992 struct Type * returnType;
993 struct __ecereNameSpace__ecere__sys__OldList params;
994 struct Symbol * thisClass;
995 unsigned int staticMethod;
996 struct TemplateParameter * thisClassTemplate;
997 } ecere_gcc_struct __anon2;
1000 struct __ecereNameSpace__ecere__com__Method * method;
1001 struct __ecereNameSpace__ecere__com__Class * methodClass;
1002 struct __ecereNameSpace__ecere__com__Class * usedClass;
1003 } ecere_gcc_struct __anon3;
1006 struct Type * arrayType;
1008 struct Expression * arraySizeExp;
1009 unsigned int freeExp;
1010 struct Symbol * enumClass;
1011 } ecere_gcc_struct __anon4;
1013 struct TemplateParameter * templateParameter;
1014 } ecere_gcc_struct __anon1;
1019 struct __ecereNameSpace__ecere__com__Class * thisClassFrom;
1021 int classObjectType;
1023 unsigned int offset;
1027 unsigned int isSigned : 1;
1028 unsigned int constant : 1;
1029 unsigned int truth : 1;
1030 unsigned int byReference : 1;
1031 unsigned int extraParam : 1;
1032 unsigned int directClassAccess : 1;
1033 unsigned int computing : 1;
1034 unsigned int keepCast : 1;
1035 unsigned int passAsTemplate : 1;
1036 unsigned int dllExport : 1;
1037 unsigned int attrStdcall : 1;
1038 unsigned int declaredWithStruct : 1;
1039 unsigned int typedByReference : 1;
1040 unsigned int casted : 1;
1041 unsigned int pointerAlignment : 1;
1042 unsigned int isLong : 1;
1043 unsigned int signedBeforePromotion : 1;
1048 struct Specifier * prev;
1049 struct Specifier * next;
1050 struct Location loc;
1057 struct ExtDecl * extDecl;
1059 struct Symbol * symbol;
1060 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
1061 struct Specifier * nsSpec;
1062 } ecere_gcc_struct __anon1;
1065 struct Identifier * id;
1066 struct __ecereNameSpace__ecere__sys__OldList * list;
1067 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
1068 struct __ecereNameSpace__ecere__sys__OldList * definitions;
1069 unsigned int addNameSpace;
1070 struct Context * ctx;
1071 struct ExtDecl * extDeclStruct;
1072 } ecere_gcc_struct __anon2;
1073 struct Expression * expression;
1074 struct Specifier * _class;
1075 struct TemplateParameter * templateParameter;
1076 } ecere_gcc_struct __anon1;
1079 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
1081 extern struct Type * ProcessTemplateParameterType(struct TemplateParameter * param);
1083 struct TemplateParameter
1085 struct TemplateParameter * prev;
1086 struct TemplateParameter * next;
1087 struct Location loc;
1089 struct Identifier * identifier;
1092 struct TemplateDatatype * dataType;
1094 } ecere_gcc_struct __anon1;
1095 struct TemplateArgument * defaultArgument;
1096 const char * dataTypeString;
1097 struct Type * baseType;
1100 unsigned int __ecereProp_Type_Get_isPointerType(struct Type * this);
1102 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
1104 struct ClassDefinition;
1108 struct Context * parent;
1109 struct __ecereNameSpace__ecere__sys__BinaryTree types;
1110 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1111 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
1112 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
1115 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
1116 struct ClassDefinition * classDef;
1117 unsigned int templateTypesOnly;
1118 unsigned int hasNameSpace;
1121 struct ClassDefinition
1123 struct ClassDefinition * prev;
1124 struct ClassDefinition * next;
1125 struct Location loc;
1126 struct Specifier * _class;
1127 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
1128 struct __ecereNameSpace__ecere__sys__OldList * definitions;
1129 struct Symbol * symbol;
1130 struct Location blockStart;
1131 struct Location nameLoc;
1133 unsigned int deleteWatchable;
1140 struct AsmField * prev;
1141 struct AsmField * next;
1142 struct Location loc;
1144 struct Expression * expression;
1145 struct Identifier * symbolic;
1152 struct PropertyDef * prev;
1153 struct PropertyDef * next;
1154 struct Location loc;
1155 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1156 struct Declarator * declarator;
1157 struct Identifier * id;
1158 struct Statement * getStmt;
1159 struct Statement * setStmt;
1160 struct Statement * issetStmt;
1161 struct Symbol * symbol;
1162 struct Expression * category;
1165 unsigned int conversion : 1;
1166 unsigned int isWatchable : 1;
1167 unsigned int isDBProp : 1;
1168 } ecere_gcc_struct __anon1;
1171 struct __ecereNameSpace__ecere__com__BitMember;
1173 struct __ecereNameSpace__ecere__com__BitMember
1175 struct __ecereNameSpace__ecere__com__BitMember * prev;
1176 struct __ecereNameSpace__ecere__com__BitMember * next;
1178 unsigned int isProperty;
1181 struct __ecereNameSpace__ecere__com__Class * _class;
1182 const char * dataTypeString;
1183 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1184 struct Type * dataType;
1191 struct FunctionDefinition;
1195 struct External * prev;
1196 struct External * next;
1197 struct Location loc;
1199 struct Symbol * symbol;
1202 struct FunctionDefinition * function;
1203 struct ClassDefinition * _class;
1204 struct Declaration * declaration;
1205 char * importString;
1206 struct Identifier * id;
1207 struct DBTableDef * table;
1208 } ecere_gcc_struct __anon1;
1210 struct External * fwdDecl;
1211 struct __ecereNameSpace__ecere__com__Instance * outgoing;
1212 struct __ecereNameSpace__ecere__com__Instance * incoming;
1213 int nonBreakableIncoming;
1216 struct FunctionDefinition
1218 struct FunctionDefinition * prev;
1219 struct FunctionDefinition * next;
1220 struct Location loc;
1221 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1222 struct Declarator * declarator;
1223 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1224 struct Statement * body;
1225 struct __ecereNameSpace__ecere__com__Class * _class;
1226 struct __ecereNameSpace__ecere__sys__OldList attached;
1229 struct Symbol * propSet;
1231 unsigned int propertyNoThis;
1234 struct ClassFunction;
1238 struct MembersInit * prev;
1239 struct MembersInit * next;
1240 struct Location loc;
1244 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
1245 struct ClassFunction * function;
1246 } ecere_gcc_struct __anon1;
1249 struct ClassFunction
1251 struct ClassFunction * prev;
1252 struct ClassFunction * next;
1253 struct Location loc;
1254 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1255 struct Declarator * declarator;
1256 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1257 struct Statement * body;
1258 struct __ecereNameSpace__ecere__com__Class * _class;
1259 struct __ecereNameSpace__ecere__sys__OldList attached;
1262 struct Symbol * propSet;
1263 unsigned int isVirtual;
1264 unsigned int isConstructor;
1265 unsigned int isDestructor;
1266 unsigned int dontMangle;
1271 struct InitDeclarator;
1273 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1275 struct InitDeclarator
1277 struct InitDeclarator * prev;
1278 struct InitDeclarator * next;
1279 struct Location loc;
1280 struct Declarator * declarator;
1281 struct Initializer * initializer;
1286 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
1290 struct MemberInit * prev;
1291 struct MemberInit * next;
1292 struct Location loc;
1293 struct Location realLoc;
1294 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
1295 struct Initializer * initializer;
1297 unsigned int variable;
1298 unsigned int takeOutExp;
1301 static struct Expression * FixReference(struct Expression * e, unsigned int wantReference);
1303 static unsigned int FixMember(struct Expression * exp)
1305 unsigned int byReference = 0;
1309 if(exp->type == 5 || exp->type == 32)
1311 if((*exp->__anon1.list).count > 1)
1313 exp = (*exp->__anon1.list).last;
1315 else if(exp->type == 11)
1317 exp = exp->__anon1.cast.exp;
1322 FixReference(exp, 1);
1324 byReference = exp->byReference;
1331 struct __ecereNameSpace__ecere__com__NameSpace;
1333 struct __ecereNameSpace__ecere__com__NameSpace
1336 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1337 struct __ecereNameSpace__ecere__com__NameSpace * left;
1338 struct __ecereNameSpace__ecere__com__NameSpace * right;
1340 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1341 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1342 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1343 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1344 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1347 struct __ecereNameSpace__ecere__com__Application
1350 const char * * argv;
1352 unsigned int isGUIApp;
1353 struct __ecereNameSpace__ecere__sys__OldList allModules;
1354 char * parsedCommand;
1355 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
1358 struct __ecereNameSpace__ecere__com__Module
1360 struct __ecereNameSpace__ecere__com__Instance * application;
1361 struct __ecereNameSpace__ecere__sys__OldList classes;
1362 struct __ecereNameSpace__ecere__sys__OldList defines;
1363 struct __ecereNameSpace__ecere__sys__OldList functions;
1364 struct __ecereNameSpace__ecere__sys__OldList modules;
1365 struct __ecereNameSpace__ecere__com__Instance * prev;
1366 struct __ecereNameSpace__ecere__com__Instance * next;
1372 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1373 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1376 void __ecereUnregisterModule_pass2(struct __ecereNameSpace__ecere__com__Instance * module)
1381 struct __ecereNameSpace__ecere__com__DataMember;
1383 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1389 const char * dataTypeString;
1390 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1391 } ecere_gcc_struct __anon1;
1392 struct __ecereNameSpace__ecere__com__DataValue expression;
1395 const char * memberString;
1398 struct __ecereNameSpace__ecere__com__DataMember * member;
1399 struct __ecereNameSpace__ecere__com__Property * prop;
1400 struct __ecereNameSpace__ecere__com__Method * method;
1401 } ecere_gcc_struct __anon1;
1402 } ecere_gcc_struct __anon2;
1403 } ecere_gcc_struct __anon1;
1406 struct __ecereNameSpace__ecere__com__DataMember
1408 struct __ecereNameSpace__ecere__com__DataMember * prev;
1409 struct __ecereNameSpace__ecere__com__DataMember * next;
1411 unsigned int isProperty;
1414 struct __ecereNameSpace__ecere__com__Class * _class;
1415 const char * dataTypeString;
1416 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1417 struct Type * dataType;
1421 struct __ecereNameSpace__ecere__sys__OldList members;
1422 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
1424 short structAlignment;
1425 short pointerAlignment;
1428 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);
1430 struct __ecereNameSpace__ecere__com__Class
1432 struct __ecereNameSpace__ecere__com__Class * prev;
1433 struct __ecereNameSpace__ecere__com__Class * next;
1439 unsigned int (* Constructor)(void * );
1440 void (* Destructor)(void * );
1443 struct __ecereNameSpace__ecere__com__Class * base;
1444 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
1445 struct __ecereNameSpace__ecere__sys__BinaryTree members;
1446 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
1447 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
1448 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
1449 struct __ecereNameSpace__ecere__sys__OldList derivatives;
1453 struct __ecereNameSpace__ecere__com__Instance * module;
1454 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
1455 const char * dataTypeString;
1456 struct Type * dataType;
1458 int defaultAlignment;
1459 void (* Initialize)();
1461 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
1462 const char * designerClass;
1463 unsigned int noExpansion;
1464 const char * defaultProperty;
1465 unsigned int comRedefinition;
1468 unsigned int internalDecl;
1470 unsigned int computeSize;
1471 short structAlignment;
1472 short pointerAlignment;
1473 int destructionWatchOffset;
1475 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
1476 int inheritanceAccess;
1477 const char * fullName;
1479 struct __ecereNameSpace__ecere__sys__OldList conversions;
1480 struct __ecereNameSpace__ecere__sys__OldList templateParams;
1481 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
1482 struct __ecereNameSpace__ecere__com__Class * templateClass;
1483 struct __ecereNameSpace__ecere__sys__OldList templatized;
1485 unsigned int isInstanceClass;
1486 unsigned int byValueSystemClass;
1489 extern char * __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
1491 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
1493 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
1495 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
1497 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
1499 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_String;
1501 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_char__PTR_;
1503 static struct Expression * FixReference(struct Expression * e, unsigned int wantReference)
1505 if(e->expType && e->type != 2)
1507 struct Type * type = e->expType;
1508 unsigned int isPointer = 0;
1512 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
1514 if(_class && ((_class->type == 1 && !type->declaredWithStruct) || _class->type == 5 || (_class->type == 1000 && _class->base && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr") && strcmp(_class->fullName, "uintsize") && strcmp(_class->fullName, "intsize"))))
1516 if(wantReference != (e->byReference || isPointer))
1518 struct Expression * exp = e;
1522 if(exp->type == 5 || exp->type == 32)
1524 if(exp->__anon1.list)
1526 exp->byReference = wantReference;
1527 exp = (*exp->__anon1.list).last;
1532 else if(exp->type == 11)
1534 exp->byReference = wantReference;
1535 exp = exp->__anon1.cast.exp;
1537 else if(exp->type == 12)
1539 if((*exp->__anon1.cond.exp).last)
1540 FixReference((*exp->__anon1.cond.exp).last, wantReference);
1541 FixReference(exp->__anon1.cond.elseExp, wantReference);
1546 if(wantReference != (exp->byReference || isPointer))
1548 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
1551 newExp->prev = (((void *)0));
1552 newExp->next = (((void *)0));
1554 exp->destType->refCount++;
1556 exp->expType->refCount++;
1558 exp->__anon1.op.exp1 = (((void *)0));
1559 exp->__anon1.op.exp2 = newExp;
1561 exp->__anon1.op.op = '&';
1563 exp->__anon1.op.op = '*';
1564 e->byReference = wantReference;
1565 exp->byReference = wantReference;
1578 static void ProcessStatement(struct Statement * stmt);
1580 static void ProcessFunction(struct FunctionDefinition * function)
1583 ProcessStatement(function->body);
1588 typedef union YYSTYPE
1593 struct Identifier * id;
1594 struct Expression * exp;
1595 struct Specifier * specifier;
1596 struct __ecereNameSpace__ecere__sys__OldList * list;
1597 struct Enumerator * enumerator;
1598 struct Declarator * declarator;
1599 struct Pointer * pointer;
1600 struct Initializer * initializer;
1601 struct InitDeclarator * initDeclarator;
1602 struct TypeName * typeName;
1603 struct Declaration * declaration;
1604 struct Statement * stmt;
1605 struct FunctionDefinition * function;
1606 struct External * external;
1607 struct Context * context;
1608 struct AsmField * asmField;
1609 struct Attrib * attrib;
1610 struct ExtDecl * extDecl;
1611 struct Attribute * attribute;
1612 struct Instantiation * instance;
1613 struct MembersInit * membersInit;
1614 struct MemberInit * memberInit;
1615 struct ClassFunction * classFunction;
1616 struct ClassDefinition * _class;
1617 struct ClassDef * classDef;
1618 struct PropertyDef * prop;
1620 struct Symbol * symbol;
1621 struct PropertyWatch * propertyWatch;
1622 struct TemplateParameter * templateParameter;
1623 struct TemplateArgument * templateArgument;
1624 struct TemplateDatatype * templateDatatype;
1625 struct DBTableEntry * dbtableEntry;
1626 struct DBIndexItem * dbindexItem;
1627 struct DBTableDef * dbtableDef;
1628 } ecere_gcc_struct YYSTYPE;
1630 extern YYSTYPE yylval;
1634 struct ClassDef * prev;
1635 struct ClassDef * next;
1636 struct Location loc;
1640 struct Declaration * decl;
1641 struct ClassFunction * function;
1642 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
1643 struct PropertyDef * propertyDef;
1644 struct PropertyWatch * propertyWatch;
1646 struct Identifier * defaultProperty;
1649 struct Identifier * id;
1650 struct Initializer * initializer;
1651 } ecere_gcc_struct __anon1;
1652 } ecere_gcc_struct __anon1;
1657 static void ProcessInitializer(struct Initializer * init);
1659 static void ProcessExpression(struct Expression * exp)
1661 struct Location oldyylloc = yylloc;
1668 if(exp->expType && exp->expType->kind == 16)
1670 struct __ecereNameSpace__ecere__com__Class * _class = exp->expType->__anon1.__anon3.methodClass;
1671 struct __ecereNameSpace__ecere__com__Method * method = exp->expType->__anon1.__anon3.method;
1673 if(method->type == 1)
1676 struct TypeName * typeName;
1677 struct Declarator * decl;
1678 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1680 strcpy(name, "__ecereVMethodID_");
1681 FullClassNameCat(name, method->_class->fullName, 0);
1683 strcat(name, method->name);
1684 DeclareMethod(curExternal, method, name);
1685 decl = SpecDeclFromString(method->dataTypeString, specs, MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))));
1686 if(!method->dataType->__anon1.__anon2.staticMethod)
1688 struct Declarator * funcDecl = GetFuncDecl(decl);
1690 if(!funcDecl->__anon1.function.parameters)
1691 funcDecl->__anon1.function.parameters = MkList();
1693 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
1694 struct Specifier * firstSpec = firstParam ? (*firstParam->qualifiers).first : (((void *)0));
1696 if(firstParam && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
1697 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), (*funcDecl->__anon1.function.parameters).first);
1699 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifierName(method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->string : method->_class->fullName)), (((void *)0))));
1701 typeName = MkTypeName(specs, decl);
1704 char className[1024];
1706 strcpy(className, "__ecereClass_");
1707 FullClassNameCat(className, _class->fullName, 1);
1709 _class->symbol = FindClass(_class->fullName);
1710 DeclareClass(curExternal, _class->symbol, className);
1711 if(exp->__anon1.__anon1.identifier)
1712 FreeIdentifier(exp->__anon1.__anon1.identifier);
1714 exp->__anon1.list = MkListOne(MkExpCast(typeName, MkExpIndex(MkExpPointer(MkExpIdentifier(MkIdentifier(className)), MkIdentifier("_vTbl")), MkListOne(MkExpIdentifier(MkIdentifier(name))))));
1721 strcpy(name, "__ecereMethod_");
1722 FullClassNameCat(name, method->_class->fullName, 0);
1724 strcat(name, method->name);
1725 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.__anon1.identifier->string), exp->__anon1.__anon1.identifier->string = 0);
1726 FreeSpecifier(exp->__anon1.__anon1.identifier->_class);
1727 exp->__anon1.__anon1.identifier->_class = (((void *)0));
1728 exp->__anon1.__anon1.identifier->string = __ecereNameSpace__ecere__sys__CopyString(name);
1729 DeclareMethod(curExternal, method, name);
1743 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1745 if(exp->type == 14 || exp->type == 27)
1746 ListAdd(args, exp->__anon1._renew.exp);
1747 ListAdd(args, MkExpOp(MkExpTypeSize(exp->__anon1._new.typeName), '*', MkExpBrackets(MkListOne(exp->__anon1._new.size))));
1751 exp->__anon1.call.exp = QMkExpId("ecere::com::eSystem_New");
1752 DeclareFunctionUtil(curExternal, "eSystem_New");
1755 exp->__anon1.call.exp = QMkExpId("ecere::com::eSystem_New0");
1756 DeclareFunctionUtil(curExternal, "eSystem_New0");
1759 exp->__anon1.call.exp = QMkExpId("ecere::com::eSystem_Renew");
1760 DeclareFunctionUtil(curExternal, "eSystem_Renew");
1763 exp->__anon1.call.exp = QMkExpId("ecere::com::eSystem_Renew0");
1764 DeclareFunctionUtil(curExternal, "eSystem_Renew0");
1767 exp->__anon1.call.arguments = args;
1769 ProcessExpression(exp);
1774 struct Expression * exp1 = exp->__anon1.op.exp1;
1775 struct Expression * exp2 = exp->__anon1.op.exp2;
1777 switch(exp->__anon1.op.op)
1780 if(exp->__anon1.op.exp2)
1781 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
1793 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
1798 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2)
1800 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
1801 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
1803 else if(exp->__anon1.op.exp2)
1805 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x40) | (((unsigned int)(1)) << 6);
1811 if(exp->__anon1.op.exp1)
1813 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
1817 if(exp->__anon1.op.exp2)
1818 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
1834 if(exp->__anon1.op.exp1)
1835 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
1836 if(exp->__anon1.op.exp2)
1837 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
1840 if(exp->__anon1.op.op == '=' || exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == ADD_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == SUB_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 || exp->__anon1.op.op == XOR_ASSIGN || exp->__anon1.op.op == INC_OP || exp->__anon1.op.op == DEC_OP)
1842 struct Expression * memberExp;
1843 struct Expression * parentExp = (((void *)0));
1844 unsigned int isIndexedContainerAssignment = 0;
1846 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp1->type == 8)
1848 struct Expression * testExp, * topExp = (((void *)0));
1849 struct Expression * lastExp = exp->__anon1.op.exp1, * parentExp = (((void *)0));
1850 struct __ecereNameSpace__ecere__com__Property * lastProperty = (((void *)0));
1851 struct __ecereNameSpace__ecere__com__Class * propertyClass;
1852 char setName[1024], getName[1024];
1854 testExp = exp->__anon1.op.exp1->__anon1.member.exp;
1859 if(testExp->type == 11)
1860 testExp = testExp->__anon1.cast.exp;
1861 else if(testExp->type == 5 || testExp->type == 32)
1862 testExp = (*testExp->__anon1.list).last;
1863 else if(testExp->type == 8)
1866 testExp = (((void *)0));
1870 if(testExp->__anon1.member.memberType == 1 || testExp->__anon1.member.memberType == 4)
1872 struct Type * type = testExp->__anon1.member.exp->expType;
1878 struct __ecereNameSpace__ecere__com__Class * _class = testExp->__anon1.member.member->classSym ? testExp->__anon1.member.member->classSym->__anon1.registered : type->__anon1._class->__anon1.registered;
1879 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
1881 if(testExp->__anon1.member.memberType == 4)
1884 _class = FindClass(testExp->__anon1.member.member->string)->__anon1.registered;
1885 lastProperty = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
1889 lastProperty = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, testExp->__anon1.member.member->string, privateModule);
1891 if(lastProperty && lastProperty->Get && lastProperty->Set)
1893 DeclareProperty(curExternal, lastProperty, setName, getName);
1894 propertyClass = convertTo ? _class : ((((struct Symbol *)lastProperty->symbol)->type && ((struct Symbol *)lastProperty->symbol)->type->kind == 8) ? ((struct Symbol *)lastProperty->symbol)->type->__anon1._class->__anon1.registered : ((struct Symbol *)lastProperty->symbol)->_class);
1895 if(propertyClass && propertyClass->type == 1)
1898 parentExp = lastExp;
1900 else if(propertyClass && propertyClass->type == 2)
1903 parentExp = lastExp;
1910 testExp = testExp->__anon1.member.exp;
1914 if(propertyClass->type == 1)
1916 struct Expression * copy;
1917 struct Expression * value;
1918 char className[1024];
1919 struct Expression * tempExp;
1921 sprintf(className, "__simpleStruct%d", curContext->simpleID);
1922 tempExp = QMkExpId(className);
1923 tempExp->expType = MkClassType(propertyClass->fullName);
1924 parentExp->__anon1.member.exp = tempExp;
1925 value = MkExpBrackets(MkList());
1926 copy = CopyExpression(topExp);
1927 copy->usage = (copy->usage & ~0x1) | (((unsigned int)(1)) << 0);
1928 copy->usage = (copy->usage & ~0x20) | (((unsigned int)(1)) << 5);
1929 ListAdd(value->__anon1.list, copy);
1930 ListAdd(value->__anon1.list, MkExpOp(exp->__anon1.op.exp1, exp->__anon1.op.op, exp->__anon1.op.exp2));
1931 ListAdd(value->__anon1.list, CopyExpression(tempExp));
1932 value->expType = tempExp->expType;
1933 tempExp->expType->refCount++;
1934 exp->__anon1.op.exp1 = topExp;
1935 exp->__anon1.op.exp2 = value;
1936 exp->__anon1.op.op = '=';
1937 exp1 = exp->__anon1.op.exp1;
1938 exp2 = exp->__anon1.op.exp2;
1940 else if(propertyClass->type == 2)
1942 struct Expression * copy;
1943 struct Expression * value;
1944 char className[1024];
1945 struct Expression * tempExp;
1947 sprintf(className, "__simpleStruct%d", curContext->simpleID);
1948 tempExp = QMkExpId(className);
1949 tempExp->expType = MkClassType(propertyClass->fullName);
1950 parentExp->__anon1.member.exp = tempExp;
1951 value = MkExpBrackets(MkList());
1952 copy = CopyExpression(topExp);
1953 copy->usage = (copy->usage & ~0x1) | (((unsigned int)(1)) << 0);
1954 copy->usage = (copy->usage & ~0x20) | (((unsigned int)(1)) << 5);
1955 ListAdd(value->__anon1.list, copy);
1956 ListAdd(value->__anon1.list, MkExpOp(exp->__anon1.op.exp1, exp->__anon1.op.op, exp->__anon1.op.exp2));
1957 ListAdd(value->__anon1.list, CopyExpression(tempExp));
1958 value->expType = tempExp->expType;
1959 value->expType->refCount++;
1960 exp->__anon1.op.exp1 = topExp;
1961 exp->__anon1.op.exp2 = value;
1962 exp->__anon1.op.op = '=';
1963 exp1 = exp->__anon1.op.exp1;
1964 exp2 = exp->__anon1.op.exp2;
1968 memberExp = exp->__anon1.op.exp1;
1969 while(memberExp && ((memberExp->type == 5 && (*memberExp->__anon1.list).count == 1) || memberExp->type == 32 || memberExp->type == 23))
1971 parentExp = memberExp;
1972 if(memberExp->type == 23)
1973 memberExp = (*((struct Statement *)(*memberExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
1975 memberExp = (*memberExp->__anon1.list).last;
1977 if(memberExp && memberExp->type == 6 && memberExp->__anon1.index.exp && memberExp->__anon1.index.exp->expType && memberExp->__anon1.index.exp->expType->kind == 8 && memberExp->__anon1.index.exp->expType->__anon1._class && memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered && memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered, containerClass))
1979 struct __ecereNameSpace__ecere__com__Class * c = memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered;
1981 if(strcmp((c->templateClass ? c->templateClass : c)->name, "Array"))
1983 exp->__anon1.op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2)));
1984 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2)))));
1985 isIndexedContainerAssignment = 1;
1987 ProcessExpression(memberExp);
1988 while(memberExp && ((memberExp->type == 5 && (*memberExp->__anon1.list).count == 1) || memberExp->type == 32 || memberExp->type == 23))
1990 parentExp = memberExp;
1991 if(memberExp->type == 23)
1992 memberExp = (*((struct Statement *)(*memberExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
1994 memberExp = (*memberExp->__anon1.list).last;
1996 if(memberExp && memberExp->type == 23)
1998 parentExp = memberExp;
1999 if(memberExp->type == 23)
2001 struct Statement * stmt = memberExp->__anon1.compound->__anon1.compound.statements ? (*memberExp->__anon1.compound->__anon1.compound.statements).last : (((void *)0));
2003 if(stmt && stmt->type != 3)
2004 stmt = (((void *)0));
2005 memberExp = (stmt && stmt->__anon1.expressions) ? (*stmt->__anon1.expressions).last : (((void *)0));
2008 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*stmt->__anon1.expressions), memberExp);
2009 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*stmt->__anon1.expressions), MkExpOp(memberExp, exp->__anon1.op.op, exp->__anon1.op.exp2));
2011 exp->__anon1.list = MkListOne(parentExp);
2012 ProcessExpression(exp);
2017 memberExp = (*memberExp->__anon1.list).last;
2020 if(memberExp && memberExp->type != 8)
2021 memberExp = (((void *)0));
2022 if(memberExp && memberExp->type == 8 && memberExp->__anon1.member.member)
2024 struct Type * type = memberExp->__anon1.member.exp->expType;
2028 if(type->kind == 8 || type->kind == 19)
2030 struct __ecereNameSpace__ecere__com__Class * _class = memberExp->__anon1.member.member->classSym ? (memberExp->__anon1.member.member->classSym ? memberExp->__anon1.member.member->classSym->__anon1.registered : (((void *)0))) : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)));
2032 if(memberExp == exp1)
2033 exp1 = (((void *)0));
2036 if(parentExp->type == 23)
2037 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*((struct Statement *)(*parentExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions), memberExp);
2039 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*parentExp->__anon1.list), memberExp);
2041 if(_class && _class->type == 2 && memberExp->__anon1.member.memberType == 3)
2043 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindDataMember(_class, memberExp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
2044 char mask[32], shift[10];
2045 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
2046 struct Declarator * decl = SpecDeclFromString(_class->dataTypeString, specs, (((void *)0)));
2047 struct TypeName * type = MkTypeName(specs, decl);
2049 if(bitMember->mask > (0xffffffff))
2050 sprintf(mask, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), bitMember->mask);
2052 sprintf(mask, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), bitMember->mask);
2053 sprintf(shift, "%d", bitMember->pos);
2054 exp->__anon1.op.exp1 = memberExp->__anon1.member.exp;
2055 if(exp->__anon1.op.op == XOR_ASSIGN)
2057 exp->__anon1.op.exp2 = MkExpOp(MkExpBrackets(MkListOne(MkExpCast(type, exp->__anon1.op.exp2))), LEFT_OP, MkExpConstant(shift));
2061 exp->__anon1.op.exp2 = MkExpOp(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(memberExp->__anon1.member.exp), '&', MkExpOp((((void *)0)), '~', MkExpConstant(mask))))), '|', MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(type, MkExpBrackets(MkListOne(exp->__anon1.op.exp2))))), LEFT_OP, MkExpConstant(shift)))));
2063 memberExp->__anon1.member.exp = (((void *)0));
2064 FreeExpression(memberExp);
2065 ProcessExpression(exp);
2068 else if(_class && _class->type == 3 && memberExp->__anon1.member.memberType == 3)
2071 else if(memberExp->__anon1.member.memberType != 3)
2073 struct __ecereNameSpace__ecere__com__Property * prop;
2074 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
2075 struct __ecereNameSpace__ecere__com__ClassProperty * classProperty = (((void *)0));
2077 if(memberExp->__anon1.member.memberType == 4)
2080 _class = FindClass(memberExp->__anon1.member.member->string)->__anon1.registered;
2081 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
2084 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, memberExp->__anon1.member.member->string, privateModule);
2085 if(memberExp->__anon1.member.memberType == 5)
2086 classProperty = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, memberExp->__anon1.member.member->string);
2087 exp->tempCount = memberExp->__anon1.member.exp->tempCount;
2090 if(classProperty->Set)
2092 struct Identifier * id = memberExp->__anon1.member.member;
2093 struct Expression * classExp = memberExp->__anon1.member.exp;
2094 struct Expression * value = exp->__anon1.op.exp2;
2096 memberExp->__anon1.member.exp = (((void *)0));
2097 memberExp->__anon1.member.member = (((void *)0));
2098 exp->__anon1.op.exp2 = (((void *)0));
2099 FreeExpContents(memberExp);
2101 exp->__anon1.call.exp = MkExpIdentifier(MkIdentifier("ecere::com::eClass_SetProperty"));
2102 exp->__anon1.call.arguments = MkList();
2103 ListAdd(exp->__anon1.call.arguments, classExp);
2105 char * s = QMkString(id->string);
2107 ListAdd(exp->__anon1.call.arguments, MkExpString(s));
2108 (__ecereNameSpace__ecere__com__eSystem_Delete(s), s = 0);
2110 if(__ecereProp_Type_Get_isPointerType(value->expType))
2111 value = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("intptr")), (((void *)0))), value);
2112 ListAdd(exp->__anon1.call.arguments, MkExpCast(MkTypeName(MkListOne(MkSpecifier(INT64)), (((void *)0))), value));
2114 ProcessExpression(exp);
2120 if((!convertTo && prop->Set) || (convertTo && prop->Get))
2122 struct Expression * value = exp->__anon1.op.exp2;
2123 char setName[1024], getName[1024];
2124 char * setToUse = convertTo ? getName : setName;
2125 char * getToUse = convertTo ? setName : getName;
2126 unsigned int needAddress = 0;
2127 int operator = exp->__anon1.op.op;
2150 operator = RIGHT_OP;
2164 if(operator == INC_OP)
2165 value = MkExpOp(CopyExpression(memberExp), '+', MkExpConstant("1"));
2166 else if(operator == DEC_OP)
2167 value = MkExpOp(CopyExpression(memberExp), '-', MkExpConstant("1"));
2170 value = MkExpOp(CopyExpression(memberExp), operator, value);
2171 exp2 = (((void *)0));
2173 value->expType = memberExp->expType;
2174 memberExp->expType->refCount++;
2175 value->usage = (value->usage & ~0x4) | (((unsigned int)(1)) << 2);
2179 exp2 = (((void *)0));
2182 value->usage = (value->usage & ~0x4) | (((unsigned int)(1)) << 2);
2183 DeclareProperty(curExternal, prop, setName, getName);
2184 if(memberExp->__anon1.member.exp)
2185 ProcessExpression(memberExp->__anon1.member.exp);
2186 if(((unsigned int)((exp->usage & 0x1) >> 0)) && ((!convertTo && prop->Get) || (convertTo && prop->Set)))
2188 int __simpleStruct0, __simpleStruct1;
2189 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2190 struct __ecereNameSpace__ecere__sys__OldList * args;
2191 char ecereTemp[100];
2192 struct Context * context = PushContext();
2195 curExternal->__anon1.function->tempCount = (__simpleStruct0 = curExternal->__anon1.function->tempCount, __simpleStruct1 = exp->tempCount, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
2196 sprintf(ecereTemp, "__ecTemp%d", exp->tempCount);
2197 curContext = context;
2199 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifier(VOID)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(ecereTemp))), MkInitializerAssignment(QBrackets(memberExp->__anon1.member.exp)))))), list);
2203 ListAdd(args, value);
2204 ListAdd(args, QMkExpId(ecereTemp));
2205 ListAdd(list, MkExpressionStmt(MkListOne(MkExpCall(QMkExpId(getName), args))));
2209 ListAdd(args, QMkExpId(ecereTemp));
2210 ListAdd(args, value);
2211 ListAdd(list, MkExpressionStmt(MkListOne(MkExpCall(QMkExpId(setName), args))));
2215 ListAdd(args, QMkExpId(ecereTemp));
2217 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*args), (((void *)0)), QMkExpId(ecereTemp));
2218 ListAdd(list, MkExpressionStmt(MkListOne(MkExpCall(QMkExpId(getToUse), args))));
2219 exp->__anon1.compound->__anon1.compound.context = context;
2220 PopContext(context);
2221 curContext = context->parent;
2225 struct Expression * newExp = exp;
2227 if(parentExp && parentExp->type == 23)
2229 newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
2230 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*((struct Statement *)(*parentExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions), newExp);
2231 FreeType(exp->expType);
2232 FreeType(exp->destType);
2234 parentExp->type = 16;
2235 parentExp->expType = (((void *)0));
2236 parentExp->destType = (((void *)0));
2239 newExp->__anon1.call.exp = QMkExpId(setToUse);
2240 newExp->__anon1.call.arguments = MkList();
2243 ListAdd(newExp->__anon1.call.arguments, value);
2244 ListAdd(newExp->__anon1.call.arguments, FixReference(memberExp->__anon1.member.exp, 1));
2248 ListAdd(newExp->__anon1.call.arguments, FixReference(memberExp->__anon1.member.exp, 1));
2249 ListAdd(newExp->__anon1.call.arguments, value);
2253 memberExp->__anon1.member.exp = (((void *)0));
2256 value->tempCount = exp->tempCount;
2257 ProcessExpression(value);
2259 FixReference(isIndexedContainerAssignment ? GetInnerExp(value) : value, 1);
2261 FreeExpression(memberExp);
2265 struct __ecereNameSpace__ecere__com__DataMember * member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, memberExp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
2269 memberExp->__anon1.member.memberType = 3;
2272 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "no set defined for property %s of class %s\n", (((void *)0))), prop->name, prop->_class->fullName);
2277 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, memberExp->__anon1.member.member->string, privateModule);
2279 if(method && method->type == 1 && type->kind != 19)
2281 struct Expression * value = exp->__anon1.op.exp2;
2283 value->tempCount = exp->tempCount;
2284 ProcessExpression(value);
2285 if(memberExp->__anon1.member.exp)
2286 ProcessExpression(memberExp->__anon1.member.exp);
2287 if(((unsigned int)((exp->usage & 0x1) >> 0)))
2289 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2290 struct __ecereNameSpace__ecere__sys__OldList * args;
2293 ListAdd(args, memberExp->__anon1.member.exp);
2295 char * string = QMkString(memberExp->__anon1.member.member->string);
2297 ListAdd(args, MkExpString(string));
2298 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2300 ListAdd(args, value);
2301 ListAdd(list, MkExpCall(QMkExpId("ecere::com::eInstance_SetMethod"), args));
2302 ListAdd(list, CopyExpression(value));
2304 exp->__anon1.list = list;
2309 exp->__anon1.call.exp = QMkExpId("ecere::com::eInstance_SetMethod");
2310 exp->__anon1.call.arguments = MkList();
2311 ListAdd(exp->__anon1.call.arguments, memberExp->__anon1.member.exp);
2313 char * string = QMkString(memberExp->__anon1.member.member->string);
2315 ListAdd(exp->__anon1.call.arguments, MkExpString(string));
2316 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2318 ListAdd(exp->__anon1.call.arguments, value);
2320 memberExp->__anon1.member.exp = (((void *)0));
2321 exp2 = (((void *)0));
2322 FreeExpression(memberExp);
2326 else if(memberExp->__anon1.member.memberType == 3)
2328 if(FixMember(memberExp->__anon1.member.exp))
2330 ProcessExpression(memberExp);
2331 memberExp->type = 9;
2338 else if(exp->__anon1.op.op == _INCREF)
2340 struct Expression * object = exp->__anon1.op.exp2;
2342 exp->__anon1.op.exp2 = (((void *)0));
2343 FreeExpContents(exp);
2344 FreeType(exp->expType);
2345 FreeType(exp->destType);
2346 exp->expType = (((void *)0));
2347 exp->destType = (((void *)0));
2348 exp->__anon1.op.op = INC_OP;
2349 exp->__anon1.op.exp1 = MkExpPointer(object, MkIdentifier("_refCount"));
2351 else if(exp->__anon1.op.op == DELETE)
2353 struct Expression * object = exp->__anon1.op.exp2;
2354 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2357 exp->__anon1.list = MkList();
2358 object->usage = (object->usage & ~0x80) | (((unsigned int)(1)) << 7);
2359 ProcessExpression(object);
2360 ListAdd(args, object);
2361 if(exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 0 && strcmp(exp->expType->__anon1._class->__anon1.registered->dataTypeString, "char *"))
2363 struct Expression * decRefExp = MkExpCall(QMkExpId("ecere::com::eInstance_DecRef"), args);
2365 ProcessExpressionType(decRefExp);
2366 ListAdd(exp->__anon1.list, decRefExp);
2368 else if(exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 5)
2370 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2371 struct __ecereNameSpace__ecere__com__Class * _class;
2372 struct Expression * o;
2374 for(_class = exp->expType->__anon1._class->__anon1.registered; _class && _class->type == 5; _class = _class->base)
2376 char className[1024];
2378 if(_class->templateClass)
2379 _class = _class->templateClass;
2380 strcpy(className, "__ecereClass_");
2381 FullClassNameCat(className, _class->fullName, 0);
2383 _class->symbol = FindClass(_class->fullName);
2384 DeclareClass(curExternal, _class->symbol, className);
2385 ListAdd(list, MkExpCondition(MkExpPointer(QMkExpId(className), MkIdentifier("Destructor")), MkListOne(MkExpCall(MkExpPointer(QMkExpId(className), MkIdentifier("Destructor")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), QMkPtrDecl((((void *)0)))), CopyExpression((*args).first))))), MkExpConstant("0")));
2387 ListAdd(list, MkExpCall(QMkExpId("ecere::com::eSystem_Delete"), args));
2388 DeclareFunctionUtil(curExternal, "eSystem_Delete");
2389 o = CopyExpression(object);
2390 ProcessExpressionType(o);
2391 o->usage = (o->usage & ~0x1) | (((unsigned int)(1)) << 0);
2392 ProcessExpression(o);
2393 ListAdd(exp->__anon1.list, MkExpBrackets(MkListOne(MkExpCondition(o, MkListOne(MkExpBrackets(list)), MkExpConstant("0")))));
2395 else if(exp->expType && exp->expType->kind == 20)
2397 struct Expression * argExp = GetTemplateArgExp(exp->expType->__anon1.templateParameter, thisClass, 0);
2401 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
2402 struct TypeName * typeName;
2403 struct __ecereNameSpace__ecere__sys__OldList * qualifiers = MkList();
2404 struct Declarator * declarator = SpecDeclFromString("void (*)(void * _class, void * data)", qualifiers, (((void *)0)));
2406 typeName = MkTypeName(qualifiers, declarator);
2407 ProcessExpressionType(classExp);
2408 ProcessExpression(classExp);
2409 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*args), (((void *)0)), CopyExpression(classExp));
2410 DeclareMethod(curExternal, __ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "class"), "OnFree", privateModule), "__ecereVMethodID_class_OnFree");
2411 ListAdd(exp->__anon1.list, MkExpCall(MkExpBrackets(MkListOne(MkExpCast(typeName, MkExpIndex(MkExpPointer(classExp, MkIdentifier("_vTbl")), MkListOne(MkExpIdentifier(MkIdentifier("__ecereVMethodID_class_OnFree"))))))), args));
2416 ListAdd(exp->__anon1.list, MkExpCall(QMkExpId("ecere::com::eSystem_Delete"), args));
2417 DeclareFunctionUtil(curExternal, "eSystem_Delete");
2419 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(GetInnerExp(object)), '=', MkExpConstant("0")));
2420 exp2 = (((void *)0));
2421 ProcessExpression(exp);
2425 if(exp->__anon1.op.op == '=' && exp->__anon1.op.exp1 && exp->__anon1.op.exp1->expType && exp->__anon1.op.exp1->expType->kind == 20 && (exp->__anon1.op.exp1->type == 6 || (exp->__anon1.op.exp1->type == 4 && exp->__anon1.op.exp1->__anon1.op.op == '*' && !exp->__anon1.op.exp1->__anon1.op.exp1)))
2427 struct Expression * argExp = GetTemplateArgExp(exp->__anon1.op.exp1->expType->__anon1.templateParameter, thisClass, 0);
2431 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
2432 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2433 struct Expression * derefExp = exp->__anon1.op.exp1;
2434 struct Expression * sizeExp;
2436 ProcessExpressionType(classExp);
2437 ProcessExpression(classExp);
2438 sizeExp = MkExpMember(CopyExpression(classExp), MkIdentifier("typeSize"));
2439 if(exp->__anon1.op.exp1->type == 6)
2441 struct Expression * indexExp = derefExp->__anon1.index.exp;
2442 struct __ecereNameSpace__ecere__sys__OldList * indexExpIndex = derefExp->__anon1.index.index;
2444 derefExp->__anon1.index.index = (((void *)0));
2445 derefExp->__anon1.index.exp = (((void *)0));
2446 FreeExpression(derefExp);
2447 derefExp = MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), indexExp), '+', MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(indexExpIndex), '*', MkExpBrackets(MkListOne(CopyExpression(sizeExp)))))));
2451 struct Expression * indexExp = derefExp->__anon1.op.exp2;
2453 derefExp->__anon1.op.exp2 = (((void *)0));
2454 FreeExpression(derefExp);
2455 derefExp = indexExp;
2457 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*args), derefExp);
2458 ProcessExpressionType((*args).last);
2459 ProcessExpression((*args).last);
2460 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*args), MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpMember(classExp, MkIdentifier("type")), EQ_OP, MkExpIdentifier(MkIdentifier("structClass"))))), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2))))), MkExpOp((((void *)0)), '&', CopyExpression(exp->__anon1.op.exp2)))));
2461 thisClass = curExternal->__anon1.function ? curExternal->__anon1.function->_class : (((void *)0));
2463 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(thisClass->fullName), thisSymbol);
2465 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2466 ProcessExpressionType((*args).last);
2467 ProcessExpression((*args).last);
2468 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*args), sizeExp);
2469 ProcessExpressionType((*args).last);
2470 ProcessExpression((*args).last);
2471 DeclareFunctionUtil(curExternal, "memcpy");
2472 exp->__anon1.list = MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("memcpy")), args));
2474 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2475 FreeSymbol(thisSymbol);
2477 thisClass = (((void *)0));
2481 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && exp->__anon1.op.exp2->expType->kind == 13 && exp->__anon1.op.exp2->expType->__anon1.type && exp->__anon1.op.exp2->expType->__anon1.type->kind == 20)
2483 struct Expression * argExp = GetTemplateArgExp(exp->__anon1.op.exp2->expType->__anon1.type->__anon1.templateParameter, thisClass, 0);
2487 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
2488 struct Expression * sizeExp;
2490 ProcessExpressionType(classExp);
2491 ProcessExpression(classExp);
2492 sizeExp = MkExpMember(CopyExpression(classExp), MkIdentifier("typeSize"));
2494 exp->__anon1.list = MkListOne(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), EQ_OP, MkExpIdentifier(MkIdentifier("structClass"))))), MkListOne(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0))), MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), CopyExpression(exp->__anon1.op.exp2)))))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(sizeExp), EQ_OP, MkExpConstant("1")))), MkListOne(MkExpOp((((void *)0)), '*', MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.op.exp2)))))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(sizeExp), EQ_OP, MkExpConstant("2")))), MkListOne(MkExpOp((((void *)0)), '*', MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint16")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.op.exp2)))))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(sizeExp, EQ_OP, MkExpConstant("4")))), MkListOne(MkExpOp((((void *)0)), '*', MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint32")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.op.exp2)))))), MkExpOp((((void *)0)), '*', MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp2))))))))))))))))))));
2495 thisClass = curExternal->__anon1.function ? curExternal->__anon1.function->_class : (((void *)0));
2497 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(thisClass->fullName), thisSymbol);
2499 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2500 ProcessExpressionType((*exp->__anon1.list).first);
2501 ProcessExpression((*exp->__anon1.list).first);
2502 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2503 FreeSymbol(thisSymbol);
2505 thisClass = (((void *)0));
2511 if(exp->__anon1.op.exp1)
2513 if(exp->__anon1.op.exp2)
2514 exp->__anon1.op.exp1->tempCount = exp->__anon1.op.exp2->tempCount;
2515 ProcessExpression(exp->__anon1.op.exp1);
2516 if(exp->__anon1.op.op == '=' && exp->__anon1.op.exp2 && (!exp->__anon1.op.exp2->byReference || (exp->__anon1.op.exp2->expType && exp->__anon1.op.exp2->expType->kind == 8 && 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)) && exp->__anon1.op.exp2->expType && (exp->__anon1.op.exp2->expType->kind != 13 && exp->__anon1.op.exp2->expType->kind != 20))
2517 FixReference(exp->__anon1.op.exp1, 0);
2519 if(exp->__anon1.op.exp2)
2521 if(exp->__anon1.op.exp1)
2522 exp->__anon1.op.exp2->tempCount = exp->__anon1.op.exp1->tempCount;
2523 ProcessExpression(exp->__anon1.op.exp2);
2524 if(exp->__anon1.op.exp1 || (exp->__anon1.op.op != '*' && exp->__anon1.op.op != '&'))
2526 if((!exp->__anon1.op.exp1 && (!exp->__anon1.op.exp2 || !exp->__anon1.op.exp2->expType || exp->__anon1.op.exp2->expType->kind != 8 || !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 != 0 && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type != 1 && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type != 5))) || (exp->__anon1.op.exp1 && exp->__anon1.op.exp1->expType && exp->__anon1.op.exp1->expType->kind != 13 && exp->__anon1.op.exp1->expType->kind != 20))
2528 FixReference(exp->__anon1.op.exp2, exp->__anon1.op.exp1 ? exp->__anon1.op.exp1->byReference : 0);
2533 if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 4 && exp->__anon1.op.exp2->__anon1.op.op == '&' && !exp->__anon1.op.exp2->__anon1.op.exp1)
2535 struct Expression * next = exp->next, * prev = exp->prev;
2536 struct Expression * derefExp = exp->__anon1.op.exp2;
2537 struct Expression * refExp = exp->__anon1.op.exp2->__anon1.op.exp2;
2539 derefExp->__anon1.op.exp2 = (((void *)0));
2540 FreeExpression(derefExp);
2541 FreeType(exp->expType);
2542 FreeType(exp->destType);
2546 ((refExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)refExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(refExp)) : 0), refExp = 0);
2548 if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && exp->__anon1.op.exp2->expType->kind == 20 && !exp->__anon1.op.exp2->expType->passAsTemplate)
2550 struct Expression * exp2 = exp->__anon1.op.exp2;
2551 struct Expression * argExp = GetTemplateArgExp(exp2->expType->__anon1.templateParameter, thisClass, 0);
2555 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
2556 struct Expression * e;
2558 ProcessExpressionType(classExp);
2559 ProcessExpression(classExp);
2561 exp->__anon1.list = MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpOp((((void *)0)), '&', exp2)), '+', MkExpCall(MkExpIdentifier(MkIdentifier("__ENDIAN_PAD")), MkListOne((e = MkExpMember(classExp, MkIdentifier("typeSize")))))));
2562 thisClass = curExternal->__anon1.function ? curExternal->__anon1.function->_class : (((void *)0));
2564 ProcessExpressionType(e);
2565 ProcessExpression(e);
2567 thisClass = (((void *)0));
2574 FreeExpression(exp1);
2576 FreeExpression(exp2);
2583 if(exp->__anon1.list)
2585 struct Expression * e;
2587 for(e = (*exp->__anon1.list).first; e; e = e->next)
2591 e->usage |= (exp->usage & (((unsigned int)(1)) | (((unsigned int)(1)) << 2) | (((unsigned int)(1)) << 4)));
2593 e->tempCount = exp->tempCount;
2594 ProcessExpression(e);
2596 exp->byReference = e->byReference;
2597 exp->tempCount = e->tempCount;
2604 struct Expression * e;
2605 struct Expression * checkedExp = exp->__anon1.index.exp;
2606 unsigned int isBuiltin = 0;
2608 while(checkedExp->type == 23 || checkedExp->type == 5 || checkedExp->type == 11)
2610 if(checkedExp->type == 23)
2615 else if(checkedExp->type == 5)
2616 checkedExp = checkedExp->__anon1.list ? (*checkedExp->__anon1.list).last : (((void *)0));
2618 checkedExp = checkedExp->__anon1.cast.exp;
2620 exp->__anon1.index.exp->tempCount = exp->tempCount;
2621 exp->__anon1.index.exp->usage = (exp->__anon1.index.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
2622 ProcessExpression(exp->__anon1.index.exp);
2623 if(exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 13 && exp->__anon1.index.exp->expType->__anon1.type && exp->__anon1.index.exp->expType->__anon1.type->kind == 20)
2625 struct Expression * argExp = GetTemplateArgExp(exp->__anon1.index.exp->expType->__anon1.type->__anon1.templateParameter, thisClass, 0);
2629 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
2630 struct Expression * sizeExp;
2632 ProcessExpressionType(classExp);
2633 ProcessExpression(classExp);
2634 sizeExp = MkExpMember(CopyExpression(classExp), MkIdentifier("typeSize"));
2636 exp->__anon1.list = MkListOne(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(MkExpMember(CopyExpression(classExp), MkIdentifier("type")), EQ_OP, MkExpIdentifier(MkIdentifier("structClass"))))), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0))), MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.index.exp)))), '+', MkExpOp(MkExpBrackets(CopyList(exp->__anon1.index.index, (void *)(CopyExpression))), '*', CopyExpression(sizeExp)))))))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(sizeExp), EQ_OP, MkExpConstant("1")))), MkListOne(MkExpIndex(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.index.exp)))), CopyList(exp->__anon1.index.index, (void *)(CopyExpression)))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(sizeExp), EQ_OP, MkExpConstant("2")))), MkListOne(MkExpIndex(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint16")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.index.exp)))), CopyList(exp->__anon1.index.index, (void *)(CopyExpression)))), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(sizeExp, EQ_OP, MkExpConstant("4")))), MkListOne(MkExpIndex(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint32")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), CopyExpression(exp->__anon1.index.exp)))), CopyList(exp->__anon1.index.index, (void *)(CopyExpression)))), MkExpIndex(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.index.exp))), exp->__anon1.index.index)))))))))))))))));
2637 thisClass = curExternal->__anon1.function ? curExternal->__anon1.function->_class : (((void *)0));
2639 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(thisClass->fullName), thisSymbol);
2641 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2642 ProcessExpressionType((*exp->__anon1.list).first);
2643 ProcessExpression((*exp->__anon1.list).first);
2644 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2645 FreeSymbol(thisSymbol);
2647 thisClass = (((void *)0));
2651 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
2654 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
2655 ProcessExpression(e);
2657 exp->tempCount = exp->__anon1.index.exp->tempCount;
2658 if(exp->__anon1.index.exp->expType)
2660 struct Type * source = exp->__anon1.index.exp->expType;
2662 if(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))
2664 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
2665 unsigned int isArray = 0;
2666 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
2668 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
2670 if(isArray && _class->templateArgs)
2672 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
2673 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
2674 struct TypeName * typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
2676 exp->__anon1.index.exp = MkExpBrackets(MkListOne(MkExpCast(typeName, MkExpMember(exp->__anon1.index.exp, MkIdentifier("array")))));
2677 ProcessExpressionType(exp->__anon1.index.exp);
2678 ProcessExpression(exp);
2680 else if(isBuiltin && _class->templateArgs)
2682 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
2683 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
2684 struct TypeName * typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
2686 exp->__anon1.index.exp = MkExpBrackets(MkListOne(MkExpCast(typeName, MkExpPointer(MkExpCast(QMkType("BuiltInContainer", QMkPtrDecl((((void *)0)))), exp->__anon1.index.exp), MkIdentifier("data")))));
2687 ProcessExpressionType(exp->__anon1.index.exp);
2688 ProcessExpression(exp);
2690 else if(_class->templateArgs)
2692 char iteratorType[1024];
2693 struct __ecereNameSpace__ecere__sys__OldList * declarations = MkList();
2694 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
2695 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2696 struct __ecereNameSpace__ecere__sys__OldList * instMembers = MkList();
2697 struct Expression * expExt;
2698 struct Context * context = PushContext();
2700 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
2701 ListAdd(instMembers, MkMemberInit((((void *)0)), MkInitializerAssignment(exp->__anon1.index.exp)));
2702 ListAdd(declarations, MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName(iteratorType)), MkExpIdentifier(MkIdentifier("__internalIterator")), MkListOne(MkMembersInitList(instMembers)))));
2703 ListAdd(args, MkExpBrackets(exp->__anon1.index.index));
2704 ListAdd(args, ((unsigned int)((exp->usage & 0x2) >> 1)) ? MkExpIdentifier(MkIdentifier("true")) : MkExpIdentifier(MkIdentifier("false")));
2705 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpCall(MkExpMember(MkExpIdentifier(MkIdentifier("__internalIterator")), MkIdentifier("Index")), args))));
2706 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internalIterator")), MkIdentifier("data")))));
2708 exp->__anon1.list = MkListOne(expExt = (MkExpExtensionCompound(MkCompoundStmt(declarations, statements))));
2709 expExt->__anon1.compound->__anon1.compound.context = context;
2710 PopContext(context);
2711 expExt->usage = exp->usage;
2712 ProcessExpressionType((*exp->__anon1.list).first);
2713 ProcessExpressionInstPass((*exp->__anon1.list).first);
2714 ProcessExpression((*exp->__anon1.list).first);
2722 struct Expression * e;
2723 unsigned int typedObject = 0;
2724 struct Type * ellipsisDestType = (((void *)0));
2725 unsigned int usedEllipsis = 0;
2727 if(exp->__anon1.call.arguments)
2729 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
2731 int __simpleStruct2, __simpleStruct3;
2732 int __simpleStruct0, __simpleStruct1;
2734 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
2735 e->usage = (e->usage & ~0x4) | (((unsigned int)(1)) << 2);
2736 e->tempCount = (__simpleStruct0 = e->tempCount, __simpleStruct1 = exp->tempCount, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
2737 ProcessExpression(e);
2738 exp->tempCount = (__simpleStruct2 = exp->tempCount, __simpleStruct3 = e->tempCount, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
2741 exp->__anon1.call.exp->usage = (exp->__anon1.call.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
2742 exp->__anon1.call.exp->usage = (exp->__anon1.call.exp->usage & ~0x8) | (((unsigned int)(1)) << 3);
2743 exp->__anon1.call.exp->tempCount = exp->tempCount;
2744 ProcessExpression(exp->__anon1.call.exp);
2745 if(exp->__anon1.call.exp->expType && exp->__anon1.call.exp->expType->kind == 16)
2747 unsigned int nullMemberExp = 0;
2748 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
2749 struct __ecereNameSpace__ecere__com__Class * _class = exp->__anon1.call.exp->expType->__anon1.__anon3.methodClass;
2750 struct __ecereNameSpace__ecere__com__Class * argClass = exp->__anon1.call.exp->expType->__anon1.__anon3.methodClass;
2751 struct __ecereNameSpace__ecere__com__Method * method = exp->__anon1.call.exp->expType->__anon1.__anon3.method;
2753 if(method->type == 1)
2756 struct TypeName * typeName;
2757 struct Declarator * decl;
2758 struct Context * back;
2759 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
2761 strcpy(name, "__ecereVMethodID_");
2762 FullClassNameCat(name, method->_class->fullName, 0);
2764 strcat(name, method->name);
2765 DeclareMethod(curExternal, method, name);
2767 curContext = method->_class->symbol ? ((struct Symbol *)method->_class->symbol)->ctx : globalContext;
2769 struct Context * context = SetupTemplatesContext(method->_class);
2771 decl = SpecDeclFromString(method->dataTypeString, specs, MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))));
2772 FinishTemplatesContext(context);
2775 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
2777 struct Declarator * funcDecl = GetFuncDecl(decl);
2779 if(!funcDecl->__anon1.function.parameters)
2780 funcDecl->__anon1.function.parameters = MkList();
2782 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
2783 struct Specifier * firstSpec = firstParam ? (*firstParam->qualifiers).first : (((void *)0));
2785 if(firstParam && firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
2787 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), (*funcDecl->__anon1.function.parameters).first);
2788 FreeTypeName(firstParam);
2791 if(method->dataType->__anon1.__anon2.thisClass && !strcmp(method->dataType->__anon1.__anon2.thisClass->string, "class"))
2793 struct TypeName * param;
2796 param = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
2797 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
2798 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), param);
2799 if(!method->dataType->extraParam)
2801 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))));
2802 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
2807 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifierName(method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->string : method->_class->fullName)), (((void *)0))));
2810 typeName = MkTypeName(specs, decl);
2811 if(memberExp && memberExp->__anon1.member.exp->expType)
2813 struct Type * type = memberExp->__anon1.member.exp->expType;
2815 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
2817 struct __ecereNameSpace__ecere__com__Class * regClass = type->__anon1._class->__anon1.registered;
2818 int classType = regClass->type;
2820 if(classType != 0 || !strcmp(regClass->dataTypeString, "char *") || method->dataType->byReference)
2821 argClass = regClass;
2823 else if(type->kind == 19)
2825 argClass = FindClass("ecere::com::Class")->__anon1.registered;
2827 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
2829 argClass = FindClass("char *")->__anon1.registered;
2831 else if(type->kind == 13)
2833 argClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
2834 FreeType(memberExp->__anon1.member.exp->expType);
2835 memberExp->__anon1.member.exp->expType = ProcessTypeString("uintptr", 0);
2836 memberExp->__anon1.member.exp->byReference = 1;
2840 char string[1024] = "";
2841 struct Symbol * classSym;
2843 PrintTypeNoConst(type, string, 0, 1);
2844 classSym = FindClass(string);
2846 argClass = classSym->__anon1.registered;
2850 struct Type * type = memberExp ? memberExp->__anon1.member.exp->expType : (((void *)0));
2851 struct __ecereNameSpace__ecere__com__Class * regClass = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
2852 char className[1024];
2854 if(!exp->__anon1.call.exp->expType->__anon1.__anon3.methodClass && !_class && type && type->classObjectType)
2855 strcpy(className, "class");
2858 struct __ecereNameSpace__ecere__com__Class * cl = _class;
2860 if(!cl && argClass && strcmp(argClass->fullName, "class"))
2865 cl = __ecereClass_int;
2866 if(cl->templateClass && !_class && exp->__anon1.call.exp->expType->__anon1._class && !exp->__anon1.call.exp->expType->__anon1.__anon3.methodClass && (type->kind == 19 || (regClass && regClass->type == 0 && strcmp(regClass->dataTypeString, "char *"))))
2867 cl = cl->templateClass;
2868 strcpy(className, "__ecereClass_");
2869 FullClassNameCat(className, cl->fullName, 1);
2871 cl->symbol = FindClass(cl->fullName);
2872 DeclareClass(curExternal, cl->symbol, className);
2874 if(type && type->kind == 19 && !_class && !exp->__anon1.call.exp->expType->__anon1.__anon3.methodClass && memberExp)
2876 exp->__anon1.call.exp = MkExpBrackets(MkListOne(MkExpCast(typeName, MkExpIndex(MkExpPointer(CopyExpression(memberExp->__anon1.member.exp), MkIdentifier("_vTbl")), MkListOne(MkExpIdentifier(MkIdentifier(name)))))));
2878 else if(_class || exp->__anon1.call.exp->expType->__anon1.__anon3.methodClass || !memberExp || !regClass || regClass->type != 0 || !strcmp(regClass->dataTypeString, "char *"))
2881 FreeExpression(exp->__anon1.call.exp);
2882 exp->__anon1.call.exp = MkExpBrackets(MkListOne(MkExpCast(typeName, MkExpIndex(MkExpPointer(MkExpIdentifier(MkIdentifier(className)), MkIdentifier("_vTbl")), MkListOne(MkExpIdentifier(MkIdentifier(name)))))));
2886 struct Expression * c;
2887 struct Context * context = PushContext();
2888 struct __ecereNameSpace__ecere__sys__OldList * specs;
2890 c = MkExpExtensionCompound(MkCompoundStmt(MkListOne(MkDeclaration((specs = MkListOne(MkSpecifierName("Instance"))), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_ClassInst")), MkInitializerAssignment(CopyExpression(memberExp->__anon1.member.exp)))))), MkListOne(MkExpressionStmt(MkListOne(MkExpCondition(MkExpIdentifier(MkIdentifier("__internal_ClassInst")), MkListOne(MkExpPointer(MkExpIdentifier(MkIdentifier("__internal_ClassInst")), MkIdentifier("_vTbl"))), MkExpPointer(MkExpIdentifier(MkIdentifier(className)), MkIdentifier("_vTbl"))))))));
2891 if(__ecereProp_Type_Get_specConst(type))
2892 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specs), (((void *)0)), MkSpecifier(CONST));
2894 c->__anon1.compound->__anon1.compound.context = context;
2895 PopContext(context);
2896 exp->__anon1.call.exp = MkExpBrackets(MkListOne(MkExpCast(typeName, MkExpIndex(c, MkListOne(MkExpIdentifier(MkIdentifier(name)))))));
2904 strcpy(name, "__ecereMethod_");
2905 FullClassNameCat(name, method->_class->fullName, 0);
2907 strcat(name, method->name);
2909 FreeExpression(exp->__anon1.call.exp);
2910 exp->__anon1.call.exp = MkExpIdentifier(MkIdentifier(name));
2911 DeclareMethod(curExternal, method, name);
2912 if(memberExp && memberExp->expType && method->dataType)
2914 exp->__anon1.call.exp->expType = method->dataType;
2915 method->dataType->refCount++;
2918 if(memberExp && (!memberExp->__anon1.member.exp || !memberExp->__anon1.member.exp->expType || memberExp->__anon1.member.exp->expType->kind != 19))
2920 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod && !method->dataType->extraParam)
2922 if(!exp->__anon1.call.arguments)
2923 exp->__anon1.call.arguments = MkList();
2924 if(typedObject && memberExp->__anon1.member.exp && memberExp->__anon1.member.exp->expType)
2926 unsigned int changeReference = 0;
2927 unsigned int stillAddReferenceOp = 0;
2928 struct Expression * memberExpMemberExp = CopyExpression(memberExp->__anon1.member.exp);
2929 struct Type * expType = memberExp->__anon1.member.exp->expType;
2930 struct __ecereNameSpace__ecere__com__Class * c = expType->kind == 8 && expType->__anon1._class ? expType->__anon1._class->__anon1.registered : (((void *)0));
2932 if(argClass && (argClass->type == 4 || argClass->type == 3 || argClass->type == 2 || argClass->type == 1000) && strcmp(argClass->fullName, "class") && strcmp(argClass->fullName, "uintptr") && strcmp(argClass->fullName, "intptr"))
2933 changeReference = 1;
2934 if(!expType->classObjectType && (((expType->kind != 13 && (!c || c->type == 1))) || method->dataType->byReference))
2936 if(c && (c->type == 0 || c->type == 5))
2937 stillAddReferenceOp = 1;
2938 changeReference = 1;
2940 if(typedObject && expType->classObjectType && expType->byReference != method->dataType->byReference)
2941 changeReference = 1;
2944 if(memberExp->__anon1.member.exp->type == 5 && memberExp->__anon1.member.exp->__anon1.list && (*memberExp->__anon1.member.exp->__anon1.list).count == 1 && ((struct Expression *)(*memberExp->__anon1.member.exp->__anon1.list).first)->type == 4 && ((struct Expression *)(*memberExp->__anon1.member.exp->__anon1.list).first)->__anon1.op.op == '*' && !((struct Expression *)(*memberExp->__anon1.member.exp->__anon1.list).first)->__anon1.op.exp1)
2946 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), ((struct Expression *)(*memberExp->__anon1.member.exp->__anon1.list).first)->__anon1.op.exp2);
2947 ((struct Expression *)(*memberExp->__anon1.member.exp->__anon1.list).first)->__anon1.op.exp2 = (((void *)0));
2949 else if(memberExp->__anon1.member.exp->type == 4 && memberExp->__anon1.member.exp->__anon1.op.op == '*' && !memberExp->__anon1.member.exp->__anon1.op.exp1)
2951 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), memberExp->__anon1.member.exp->__anon1.op.exp2);
2952 memberExp->__anon1.member.exp->__anon1.op.exp2 = (((void *)0));
2954 else if(!memberExp->__anon1.member.exp->byReference || stillAddReferenceOp)
2956 struct Expression * checkedExp = memberExp->__anon1.member.exp;
2957 struct Expression * parentExp = (((void *)0));
2958 struct Expression * newExp;
2959 unsigned int disconnected = 0;
2961 while(((checkedExp->type == 5 || checkedExp->type == 32) && checkedExp->__anon1.list) || checkedExp->type == 11)
2963 parentExp = checkedExp;
2964 if(checkedExp->type == 5 || checkedExp->type == 32)
2966 checkedExp = (*checkedExp->__anon1.list).last;
2967 if(checkedExp && !disconnected)
2969 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*parentExp->__anon1.list), checkedExp);
2973 else if(checkedExp->type == 11)
2975 checkedExp = checkedExp->__anon1.cast.exp;
2976 if(checkedExp && !disconnected)
2978 checkedExp->__anon1.cast.exp = (((void *)0));
2985 if(typedObject && !expType->classObjectType && !stillAddReferenceOp)
2986 newExp = checkedExp;
2989 newExp = MkExpOp((((void *)0)), '&', checkedExp);
2990 newExp->byReference = 1;
2992 if(parentExp && (parentExp->type == 5 || parentExp->type == 32))
2994 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*parentExp->__anon1.list), checkedExp);
2995 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*parentExp->__anon1.list), newExp);
2997 else if(parentExp && parentExp->type == 11)
2999 parentExp->__anon1.cast.exp = newExp;
3000 if(newExp->expType && newExp->expType->classObjectType)
3001 parentExp->__anon1.cast.typeName->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), parentExp->__anon1.cast.typeName->declarator);
3003 if(typedObject && !expType->classObjectType)
3005 struct Type * destType = (destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), destType->refCount = 1, destType->kind = 8, destType->classObjectType = 3, destType);
3007 FreeType((parentExp ? parentExp : newExp)->expType);
3008 FreeType((parentExp ? parentExp : newExp)->destType);
3009 (parentExp ? parentExp : newExp)->expType = checkedExp->expType;
3010 (parentExp ? parentExp : newExp)->destType = destType;
3011 if(checkedExp->expType)
3012 checkedExp->expType->refCount++;
3014 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), parentExp ? parentExp : newExp);
3018 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), memberExp->__anon1.member.exp);
3024 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), memberExp->__anon1.member.exp);
3028 char className[1024];
3029 struct Type * type = memberExp->__anon1.member.exp ? memberExp->__anon1.member.exp->expType : (((void *)0));
3030 struct __ecereNameSpace__ecere__com__Class * regClass = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
3031 struct __ecereNameSpace__ecere__com__Class * cl = argClass ? argClass : regClass;
3034 if(memberExp->__anon1.member.exp && memberExp->__anon1.member.exp->expType && memberExp->__anon1.member.exp->expType->classObjectType == 2)
3035 strcpy(className, "class");
3038 strcpy(className, "__ecereClass_");
3039 FullClassNameCat(className, cl->fullName, 1);
3041 cl->symbol = FindClass(cl->fullName);
3042 DeclareClass(curExternal, cl->symbol, className);
3046 if(memberExp && cl && cl->type == 0 && (!type || type->byReference == 0) && strcmp(cl->dataTypeString, "char *"))
3048 struct Expression * c;
3049 struct Context * context = PushContext();
3050 struct __ecereNameSpace__ecere__sys__OldList * specs;
3052 c = MkExpExtensionCompound(MkCompoundStmt(MkListOne(MkDeclaration((specs = MkListOne(MkSpecifierName("Instance"))), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_ClassInst")), MkInitializerAssignment(memberExpMemberExp))))), MkListOne(MkExpressionStmt(MkListOne(MkExpCondition(MkExpIdentifier(MkIdentifier("__internal_ClassInst")), MkListOne(MkExpPointer(MkExpIdentifier(MkIdentifier("__internal_ClassInst")), MkIdentifier("_class"))), MkExpIdentifier(MkIdentifier(className))))))));
3053 c->__anon1.compound->__anon1.compound.context = context;
3054 PopContext(context);
3055 if(__ecereProp_Type_Get_specConst(type))
3056 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specs), (((void *)0)), MkSpecifier(CONST));
3057 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), c);
3058 memberExpMemberExp = (((void *)0));
3061 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), MkExpIdentifier(MkIdentifier(className)));
3064 if(memberExpMemberExp)
3065 FreeExpression(memberExpMemberExp);
3069 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (((void *)0)), memberExp->__anon1.member.exp);
3077 memberExp->__anon1.member.exp = (((void *)0));
3078 FreeExpression(memberExp);
3081 if(exp->__anon1.call.arguments)
3083 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
3085 struct Type * destType = (e->destType && e->destType->kind == 14) ? ellipsisDestType : e->destType;
3087 if(destType && (destType->classObjectType == 2 || destType->classObjectType == 3))
3089 if(e->destType && e->destType->kind == 14)
3091 ellipsisDestType = destType;
3094 struct Type * type = e->expType;
3095 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
3097 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
3099 _class = type->__anon1._class->__anon1.registered;
3101 else if(type->kind == 19)
3103 _class = FindClass("ecere::com::Class")->__anon1.registered;
3105 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
3107 _class = FindClass("char *")->__anon1.registered;
3109 else if(type->kind == 13)
3111 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
3112 FreeType(e->expType);
3113 e->expType = ProcessTypeString("uintptr", 0);
3118 char string[1024] = "";
3119 struct Symbol * classSym;
3121 PrintTypeNoConst(type, string, 0, 1);
3122 classSym = FindClass(string);
3124 _class = classSym->__anon1.registered;
3126 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 != 12 && (type->kind != 8 || !type->__anon1._class || !type->__anon1._class->__anon1.registered || type->__anon1._class->__anon1.registered->type == 1))) || destType->byReference)))
3129 struct Expression * checkedExp;
3130 struct Expression * parentExp;
3131 struct Expression * newExp;
3135 while(checkedExp && (((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11))
3137 parentExp = checkedExp;
3138 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
3140 if(checkedExp->type == 23)
3142 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
3145 checkedExp = (*checkedExp->__anon1.list).last;
3147 else if(checkedExp->type == 11)
3148 checkedExp = checkedExp->__anon1.cast.exp;
3150 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
3152 newExp = checkedExp->__anon1.op.exp2;
3153 checkedExp->__anon1.op.exp2 = (((void *)0));
3154 FreeExpContents(checkedExp);
3155 if(e->expType && e->expType->passAsTemplate)
3159 ComputeTypeSize(e->expType);
3160 sprintf(size, "%d", e->expType->size);
3161 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))))));
3163 if(parentExp->type == 7)
3165 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), e->prev, newExp);
3166 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.call.arguments), e);
3169 else if(parentExp->type == 5 || parentExp->type == 32)
3171 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*parentExp->__anon1.list), checkedExp);
3172 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*parentExp->__anon1.list), newExp);
3174 else if(parentExp->type == 11)
3176 if(parentExp->destType && parentExp->destType->kind == 14)
3178 FreeTypeName(parentExp->__anon1.cast.typeName);
3179 parentExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
3181 parentExp->__anon1.cast.exp = newExp;
3183 else if(parentExp->type == 23)
3185 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*((struct Statement *)(*parentExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions), checkedExp);
3186 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*((struct Statement *)(*parentExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions), newExp);
3189 FreeType(checkedExp->expType);
3190 FreeType(checkedExp->destType);
3191 ((checkedExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)checkedExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(checkedExp)) : 0), checkedExp = 0);
3193 else if((!e->byReference && (!e->expType || !e->expType->classObjectType)) || (_class && _class->type == 5))
3195 struct Expression * checkedExp;
3196 struct Expression * parentExp;
3197 struct Expression * newExp;
3200 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;
3202 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
3204 struct Context * context = PushContext();
3205 struct Declarator * decl;
3206 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
3207 char typeString[1024];
3208 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
3210 typeString[0] = '\0';
3213 exp->destType->refCount++;
3214 newExp->prev = (((void *)0));
3215 newExp->next = (((void *)0));
3216 newExp->expType = (((void *)0));
3217 PrintTypeNoConst(e->expType, typeString, 0, 1);
3218 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
3219 newExp->destType = ProcessType(specs, decl);
3220 curContext = context;
3225 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
3227 sprintf(name, "__internalValue%03X", internalValueCounter++);
3228 if(!curCompound->__anon1.compound.declarations)
3229 curCompound->__anon1.compound.declarations = MkList();
3230 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
3231 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
3232 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
3233 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
3236 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
3237 e->__anon1.compound->__anon1.compound.context = context;
3238 PopContext(context);
3239 curContext = context->parent;
3244 while(checkedExp && (((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11))
3246 parentExp = checkedExp;
3247 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
3249 if(checkedExp->type == 23)
3251 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
3254 checkedExp = (*checkedExp->__anon1.list).last;
3256 else if(checkedExp->type == 11)
3257 checkedExp = checkedExp->__anon1.cast.exp;
3260 struct Expression * i;
3262 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), (i = MkExpOp((((void *)0)), '&', checkedExp)));
3264 newExp->byReference = 1;
3266 if(parentExp->type == 7)
3268 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), e->prev, newExp);
3269 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.call.arguments), e);
3272 else if(parentExp->type == 5 || parentExp->type == 32)
3274 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*parentExp->__anon1.list), checkedExp);
3275 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*parentExp->__anon1.list), newExp);
3277 else if(parentExp->type == 11)
3278 parentExp->__anon1.cast.exp = newExp;
3279 else if(parentExp->type == 5 || parentExp->type == 23)
3281 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*((struct Statement *)(*parentExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions), checkedExp);
3282 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*((struct Statement *)(*parentExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions), newExp);
3287 if(destType->classObjectType == 2)
3289 char className[1024];
3291 if(!_class && type->kind == 13 && type->__anon1.type && type->__anon1.type->kind == 1)
3292 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "String");
3294 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
3295 if(!strcmp(_class->name, "class"))
3297 strcpy(className, "class");
3301 strcpy(className, "__ecereClass_");
3302 FullClassNameCat(className, _class->fullName, 1);
3304 _class->symbol = FindClass(_class->fullName);
3305 DeclareClass(curExternal, _class->symbol, className);
3307 if(_class->type == 0 && destType->byReference == 0 && strcmp(_class->dataTypeString, "char *"))
3309 struct Expression * c;
3310 struct Context * context = PushContext();
3312 if(_class->templateClass && !strcmp(_class->templateClass->name, "Container") && e->__anon1.list && (*e->__anon1.list).first && ((struct Expression *)(*e->__anon1.list).first)->type == 11 && ((struct Expression *)(*e->__anon1.list).first)->__anon1.cast.exp && ((struct Expression *)(*e->__anon1.list).first)->__anon1.cast.exp->type == 4 && ((struct Expression *)(*e->__anon1.list).first)->__anon1.cast.exp->__anon1.op.op == '&' && ((struct Expression *)(*e->__anon1.list).first)->__anon1.cast.exp->__anon1.op.exp2 && ((struct Expression *)(*e->__anon1.list).first)->__anon1.cast.exp->__anon1.op.exp2->type == 33)
3314 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), e->prev, MkExpIdentifier(MkIdentifier(className)));
3318 struct __ecereNameSpace__ecere__sys__OldList * specs;
3320 c = MkExpExtensionCompound(MkCompoundStmt(MkListOne(MkDeclaration((specs = MkListOne(MkSpecifierName("Instance"))), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_ClassInst")), MkInitializerAssignment(CopyExpression(e)))))), MkListOne(MkExpressionStmt(MkListOne(MkExpCondition(MkExpIdentifier(MkIdentifier("__internal_ClassInst")), MkListOne(MkExpPointer(MkExpIdentifier(MkIdentifier("__internal_ClassInst")), MkIdentifier("_class"))), MkExpIdentifier(MkIdentifier(className))))))));
3321 c->__anon1.compound->__anon1.compound.context = context;
3322 PopContext(context);
3323 if(__ecereProp_Type_Get_specConst(type))
3324 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specs), (((void *)0)), MkSpecifier(CONST));
3325 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), e->prev, c);
3329 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), e->prev, MkExpIdentifier(MkIdentifier(className)));
3334 FixReference(e, !destType || !destType->declaredWithStruct);
3337 if(ellipsisDestType)
3339 if(usedEllipsis || (exp->__anon1.call.exp->expType && exp->__anon1.call.exp->expType->kind == 11 && exp->__anon1.call.exp->expType->__anon1.__anon2.params.last && ((struct Type *)exp->__anon1.call.exp->expType->__anon1.__anon2.params.last)->kind == 14))
3341 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*exp->__anon1.call.arguments), (*exp->__anon1.call.arguments).last, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0")));
3349 unsigned int changeToPtr = 0;
3350 unsigned int noHead = 0;
3351 struct Type * type = exp->__anon1.member.exp ? exp->__anon1.member.exp->expType : (((void *)0));
3352 struct Specifier * memberClassSpecifier = exp->__anon1.member.member ? exp->__anon1.member.member->_class : (((void *)0));
3354 if(exp->__anon1.member.member)
3355 exp->__anon1.member.member->_class = (((void *)0));
3356 if(type && type->kind == 20)
3358 struct Type * baseType = ProcessTemplateParameterType(type->__anon1.templateParameter);
3363 if(type && exp->__anon1.member.member && !type->directClassAccess)
3365 struct __ecereNameSpace__ecere__com__Class * _class = 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)));
3366 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
3367 struct __ecereNameSpace__ecere__com__ClassProperty * classProperty = (((void *)0));
3368 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
3369 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
3370 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
3371 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
3372 int subMemberStackPos = 0;
3373 unsigned int thisPtr = exp->__anon1.member.thisPtr;
3375 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
3376 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
3379 char string[2048] = "";
3380 struct Symbol * classSym;
3382 PrintTypeNoConst(type, string, 0, 1);
3383 classSym = FindClass(string);
3384 _class = classSym ? classSym->__anon1.registered : (((void *)0));
3386 if(_class && exp->__anon1.member.memberType == 3)
3388 if(!thisPtr && !exp->__anon1.member.member->classSym)
3389 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, (((void *)0)), subMemberStack, &subMemberStackPos);
3391 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, subMemberStack, &subMemberStackPos);
3393 else if(_class && exp->__anon1.member.memberType == 1)
3395 if(!thisPtr && !exp->__anon1.member.member->classSym)
3396 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, (((void *)0)));
3398 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
3399 if(prop && (((unsigned int)((exp->usage & 0x40) >> 6)) || (((unsigned int)((exp->usage & 0x1) >> 0)) && !prop->Get && !prop->conversion) || (((unsigned int)((exp->usage & 0x80) >> 7)) && !prop->Set && !prop->conversion)))
3401 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, subMemberStack, &subMemberStackPos);
3404 exp->__anon1.member.memberType = 3;
3405 prop = (((void *)0));
3409 if(((unsigned int)((exp->usage & 0x40) >> 6)))
3410 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot obtain address of property\n", (((void *)0))));
3412 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "no get defined for property %s of class %s\n", (((void *)0))), prop->name, prop->_class->fullName);
3413 else if(((unsigned int)((exp->usage & 0x80) >> 7)))
3414 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "no get defined for property %s of class %s\n", (((void *)0))), prop->name, prop->_class->fullName);
3418 else if(_class && exp->__anon1.member.memberType == 2)
3421 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, (((void *)0)));
3423 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, privateModule);
3425 else if(_class && exp->__anon1.member.memberType == 4)
3428 _class = FindClass(exp->__anon1.member.member->string)->__anon1.registered;
3429 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
3431 else if(_class && exp->__anon1.member.memberType == 5)
3433 classProperty = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, exp->__anon1.member.member->string);
3437 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3441 char getName[1024], setName[1024];
3442 struct Expression * ptr = exp->__anon1.member.exp;
3443 struct __ecereNameSpace__ecere__com__Class * propertyClass;
3444 char * nameToUse = convertTo ? setName : getName;
3446 FreeIdentifier(exp->__anon1.member.member);
3447 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3448 ProcessExpression(exp->__anon1.member.exp);
3449 DeclareProperty(curExternal, prop, setName, getName);
3450 propertyClass = convertTo ? _class : ((((struct Symbol *)prop->symbol)->type && ((struct Symbol *)prop->symbol)->type->kind == 8) ? ((struct Symbol *)prop->symbol)->type->__anon1._class->__anon1.registered : ((struct Symbol *)prop->symbol)->_class);
3451 if(propertyClass && propertyClass->type == 2)
3453 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
3455 if(((unsigned int)((exp->usage & 0x20) >> 5)))
3457 char className[1024];
3458 struct Declaration * decl;
3459 struct Declarator * declarator;
3460 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
3461 struct Expression * tempExp;
3463 sprintf(className, "__simpleStruct%d", curContext->simpleID++);
3464 declarator = SpecDeclFromString(propertyClass->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(className)));
3465 ListAdd(decls, MkInitDeclarator(declarator, (((void *)0))));
3466 decl = MkDeclaration(specs, decls);
3467 if(!curCompound->__anon1.compound.declarations)
3468 curCompound->__anon1.compound.declarations = MkList();
3469 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
3470 tempExp = QMkExpId(className);
3471 tempExp->expType = MkClassType(propertyClass->fullName);
3472 exp->__anon1.op.exp1 = tempExp;
3473 exp->__anon1.op.exp2 = MkExpCall(QMkExpId(nameToUse), args);
3474 exp->__anon1.op.op = '=';
3480 exp->__anon1.call.exp = QMkExpId(nameToUse);
3481 exp->__anon1.call.arguments = args;
3483 ListAdd(args, FixReference(ptr, 1));
3485 else if(propertyClass && propertyClass->type == 3)
3487 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
3489 ListAdd(args, FixReference(ptr, 1));
3491 exp->__anon1.call.exp = QMkExpId(nameToUse);
3492 exp->__anon1.call.arguments = args;
3494 else if(propertyClass && propertyClass->type == 1)
3496 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
3497 char className[1024];
3498 struct Declaration * decl;
3499 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
3500 struct Expression * tempExp;
3503 FullClassNameCat(className, propertyClass->fullName, 0);
3504 DeclareStruct(curExternal, propertyClass->fullName, 0, 1);
3505 ListAdd(specs, MkStructOrUnion(3, MkIdentifier(className), (((void *)0))));
3506 sprintf(className, "__simpleStruct%d", curContext->simpleID++);
3507 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(className)), (((void *)0))));
3508 decl = MkDeclaration(specs, decls);
3511 if(!curCompound->__anon1.compound.declarations)
3512 curCompound->__anon1.compound.declarations = MkList();
3513 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
3515 tempExp = QMkExpId(className);
3516 tempExp->expType = MkClassType(propertyClass->fullName);
3519 ListAdd(args, FixReference(CopyExpression(tempExp), 1));
3520 ListAdd(args, FixReference(ptr, 1));
3524 ListAdd(args, FixReference(ptr, 1));
3525 ListAdd(args, FixReference(CopyExpression(tempExp), 1));
3527 if(((unsigned int)((exp->usage & 0x20) >> 5)))
3530 exp->__anon1.call.exp = QMkExpId(nameToUse);
3531 exp->__anon1.call.arguments = args;
3532 FreeExpression(tempExp);
3537 exp->__anon1.list = MkList();
3538 ListAdd(exp->__anon1.list, MkExpCall(QMkExpId(nameToUse), args));
3539 if(((unsigned int)((exp->usage & 0x10) >> 4)))
3541 ListAdd(exp->__anon1.list, FixReference(tempExp, 1));
3542 exp->byReference = 1;
3545 ListAdd(exp->__anon1.list, tempExp);
3551 exp->__anon1.call.exp = QMkExpId(nameToUse);
3552 exp->__anon1.call.arguments = MkList();
3553 ListAdd(exp->__anon1.call.arguments, FixReference(ptr, 1));
3556 else if(prop->conversion)
3558 void * prev = exp->prev, * next = exp->next;
3560 *exp = *exp->__anon1.member.exp;
3566 else if(classProperty)
3568 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3570 if(classProperty->Get)
3572 struct Identifier * id = exp->__anon1.member.member;
3573 struct Expression * classExp = exp->__anon1.member.exp;
3574 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
3579 char typeString[2048];
3580 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
3581 struct Declarator * decl;
3584 PrintType(exp->expType, typeString, 0, 0);
3585 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
3586 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
3589 exp->__anon1.cast.typeName = QMkType("uint64", (((void *)0)));
3590 exp->__anon1.cast.exp = MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eClass_GetProperty")), args);
3591 if(__ecereProp_Type_Get_isPointerType(exp->expType))
3592 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), exp->__anon1.cast.exp);
3593 ListAdd(args, classExp);
3595 char * s = QMkString(id->string);
3597 ListAdd(args, MkExpString(s));
3598 (__ecereNameSpace__ecere__com__eSystem_Delete(s), s = 0);
3601 ProcessExpression(exp);
3608 if((((unsigned int)((exp->usage & 0x1) >> 0)) || exp->__anon1.member.exp->expType->kind == 19) && !((unsigned int)((exp->usage & 0x8) >> 3)))
3612 FreeIdentifier(exp->__anon1.member.member);
3613 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3614 ProcessExpression(exp->__anon1.member.exp);
3615 if(method->type == 1)
3617 strcpy(name, "__ecereVMethodID_");
3618 FullClassNameCat(name, method->_class->fullName, 0);
3620 strcat(name, method->name);
3622 if(memberClassSpecifier)
3624 char className[1024];
3626 strcpy(className, "__ecereClass_");
3627 FullClassNameCat(className, _class->fullName, 1);
3629 _class->symbol = FindClass(_class->fullName);
3630 DeclareClass(curExternal, _class->symbol, className);
3631 FreeExpression(exp->__anon1.member.exp);
3632 exp->__anon1.index.exp = MkExpPointer(MkExpIdentifier(MkIdentifier(className)), MkIdentifier("_vTbl"));
3636 if(exp->thisPtr && _class->type != 0)
3638 FreeExpression(exp->__anon1.member.exp);
3639 exp->__anon1.index.exp = MkExpPointer(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("_vTbl"));
3642 exp->__anon1.index.exp = MkExpPointer(exp->__anon1.member.exp, MkIdentifier("_vTbl"));
3644 exp->__anon1.index.index = MkListOne(QMkExpId(name));
3645 DeclareMethod(curExternal, method, name);
3649 FreeExpression(exp->__anon1.member.exp);
3651 strcpy(name, "__ecereMethod_");
3652 FullClassNameCat(name, method->_class->fullName, 0);
3654 strcat(name, method->name);
3655 exp->__anon1.__anon1.identifier = MkIdentifier(name);
3656 DeclareMethod(curExternal, method, name);
3662 if(subMemberStackPos)
3665 struct __ecereNameSpace__ecere__com__DataMember * parentMember = (((void *)0));
3666 char * s, * prefix = (((void *)0));
3668 for(i = 0; i < subMemberStackPos; i++)
3670 struct __ecereNameSpace__ecere__com__DataMember * curMember = subMemberStack[i];
3671 struct __ecereNameSpace__ecere__com__DataMember * m;
3674 for(m = parentMember ? parentMember->members.first : _class->membersAndProperties.first; m; m = m->next)
3676 if(m && !m->isProperty && (m->type == 1 || m->type == 2) && !m->name)
3686 prefix = __ecereNameSpace__ecere__com__PrintString(__ecereClass_String, prefix, __ecereClass_char__PTR_, ".__anon", __ecereClass_int, (void *)&anonID, (void *)0);
3687 (__ecereNameSpace__ecere__com__eSystem_Delete(s), s = 0);
3690 prefix = __ecereNameSpace__ecere__com__PrintString(__ecereClass_char__PTR_, "__anon", __ecereClass_int, (void *)&anonID, (void *)0);
3691 parentMember = curMember;
3693 s = exp->__anon1.member.member->string;
3694 exp->__anon1.member.member->string = __ecereNameSpace__ecere__com__PrintString(__ecereClass_String, prefix, __ecereClass_char__PTR_, ".", __ecereClass_String, s, (void *)0);
3695 (__ecereNameSpace__ecere__com__eSystem_Delete(prefix), prefix = 0);
3696 (__ecereNameSpace__ecere__com__eSystem_Delete(s), s = 0);
3698 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3700 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3702 ProcessExpression(exp->__anon1.member.exp);
3703 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
3704 DeclareStruct(curExternal, type->__anon1._class->__anon1.registered->fullName, 0, 1);
3705 if(_class->type == 5)
3709 else if(_class->type == 1)
3713 else if(_class->type == 2)
3715 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
3716 char mask[32], shift[10];
3717 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
3718 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)member;
3719 struct Declarator * decl = SpecDeclFromString(bitMember->dataTypeString, specs, (((void *)0)));
3720 struct TypeName * type = MkTypeName(specs, decl);
3722 if(bitMember->mask > (0xffffffff))
3723 sprintf(mask, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), bitMember->mask);
3725 sprintf(mask, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), bitMember->mask);
3726 sprintf(shift, "%d", bitMember->pos);
3727 FreeIdentifier(exp->__anon1.member.member);
3728 ListAdd(list, MkExpCast(type, MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.member.exp, '&', MkExpConstant(mask)))), RIGHT_OP, MkExpConstant(shift))))));
3730 exp->__anon1.list = list;
3732 else if(_class->type == 3)
3737 if(exp->__anon1.member.exp->type == 0 && thisPtr && type->kind == 8 && (!exp->__anon1.member.exp->expType || !exp->__anon1.member.exp->expType->typedByReference))
3739 char pointerName[1024];
3741 strcpy(pointerName, "__ecerePointer_");
3742 FullClassNameCat(pointerName, type->__anon1._class->__anon1.registered->fullName, 0);
3743 if(exp->__anon1.member.exp->__anon1.__anon1.identifier)
3744 FreeIdentifier(exp->__anon1.member.exp->__anon1.__anon1.identifier);
3745 exp->__anon1.member.exp->__anon1.__anon1.identifier = MkIdentifier(pointerName);
3749 struct Expression * bytePtr, * e;
3750 struct Expression * checkedExp;
3751 char structName[1024];
3752 char className[1024];
3754 strcpy(className, "__ecereClass_");
3755 FullClassNameCat(className, member->_class->fullName, 1);
3756 if(!member->_class->symbol)
3757 member->_class->symbol = FindClass(member->_class->fullName);
3758 DeclareClass(curExternal, member->_class->symbol, className);
3759 DeclareStruct(curExternal, member->_class->fullName, 0, 1);
3761 FullClassNameCat(structName, member->_class->fullName, 0);
3762 checkedExp = exp->__anon1.member.exp;
3763 while(((checkedExp->type == 5 || checkedExp->type == 32) && checkedExp->__anon1.list && (*checkedExp->__anon1.list).count == 1) || checkedExp->type == 11)
3765 if(checkedExp->type == 5 || checkedExp->type == 32)
3766 checkedExp = (*checkedExp->__anon1.list).last;
3767 else if(checkedExp->type == 11)
3768 checkedExp = checkedExp->__anon1.cast.exp;
3770 if(checkedExp->type != 0 && checkedExp->type != 2 && checkedExp->type != 8 && checkedExp->type != 9)
3772 int __simpleStruct0, __simpleStruct1;
3773 char ecereTemp[100];
3774 struct Statement * compound;
3775 struct Context * context = PushContext();
3777 if(exp->__anon1.member.exp->tempCount > exp->tempCount)
3778 exp->tempCount = exp->__anon1.member.exp->tempCount;
3780 curExternal->__anon1.function->tempCount = (__simpleStruct0 = curExternal->__anon1.function->tempCount, __simpleStruct1 = exp->tempCount, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
3781 sprintf(ecereTemp, "__ecTemp%d", exp->tempCount);
3782 curContext = context;
3783 compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(ecereTemp))), MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), QBrackets(exp->__anon1.member.exp))))))), (((void *)0)));
3784 if(member->_class->fixed)
3786 struct __ecereNameSpace__ecere__com__Class * c = member->_class->templateClass ? member->_class->templateClass : member->_class;
3790 struct Expression * se;
3792 if(c->offset == c->base->structSize)
3794 se = MkExpClassSize(MkSpecifierName(c->base->fullName));
3795 ProcessExpressionType(se);
3802 sprintf(string, "%d", c->offset);
3803 se = MkExpConstant(string);
3805 e = QBrackets(MkExpOp(QMkExpId(ecereTemp), '+', se));
3808 e = QMkExpId(ecereTemp);
3812 e = QBrackets(MkExpOp(QMkExpId(ecereTemp), '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
3814 compound->__anon1.compound.context = context;
3815 compound->__anon1.compound.statements = MkListOne(MkExpressionStmt(MkListOne(QBrackets(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), e)))));
3816 exp->__anon1.member.exp = MkExpExtensionCompound(compound);
3817 PopContext(context);
3818 curContext = context->parent;
3822 bytePtr = MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), exp->__anon1.member.exp);
3823 if(member->_class->fixed)
3825 struct __ecereNameSpace__ecere__com__Class * c = member->_class->templateClass ? member->_class->templateClass : member->_class;
3829 struct Expression * se;
3831 if(c->offset == c->base->structSize)
3833 se = MkExpClassSize(MkSpecifierName(c->base->fullName));
3834 ProcessExpressionType(se);
3841 sprintf(string, "%d", c->offset);
3842 se = MkExpConstant(string);
3844 e = QBrackets(QBrackets(MkExpOp(bytePtr, '+', se)));
3850 e = QBrackets(QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset")))));
3851 exp->__anon1.member.exp = QBrackets(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), QMkPtrDecl((((void *)0)))), e));
3858 FreeSpecifier(memberClassSpecifier);
3859 if(exp->__anon1.member.exp && (exp->type == 8 || exp->type == 9))
3861 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3862 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x10) | (((unsigned int)(1)) << 4);
3863 exp->__anon1.member.exp->tempCount = exp->tempCount;
3864 ProcessExpression(exp->__anon1.member.exp);
3865 exp->tempCount = exp->__anon1.member.exp->tempCount;
3866 if((changeToPtr && exp->__anon1.member.exp->byReference) || noHead)
3873 struct Expression * e = (*((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
3876 e->usage |= exp->usage & (((unsigned int)(1)) | (((unsigned int)(1)) << 2) | (((unsigned int)(1)) << 4));
3877 ProcessStatement(exp->__anon1.compound);
3882 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3883 ProcessExpression(exp->__anon1.member.exp);
3888 struct Specifier * spec = exp->__anon1.typeName->qualifiers ? (*exp->__anon1.typeName->qualifiers).first : (((void *)0));
3890 if(spec && spec->type == 8 && !exp->__anon1.typeName->declarator)
3892 struct Expression * argExp = GetTemplateArgExp(spec->__anon1.templateParameter, thisClass, 0);
3896 struct Expression * classExp;
3898 FreeTypeName(exp->__anon1.typeName);
3899 classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
3900 ProcessExpressionType(classExp);
3901 ProcessExpression(classExp);
3903 exp->__anon1.list = MkListOne(MkExpMember(classExp, MkIdentifier("typeSize")));
3904 ProcessExpressionType(exp);
3905 ProcessExpression(exp);
3912 if(exp->__anon1.cast.exp)
3914 exp->__anon1.cast.exp->usage |= exp->usage & (((unsigned int)(1)) | (((unsigned int)(1)) << 4));
3915 ProcessExpression(exp->__anon1.cast.exp);
3916 if(exp->__anon1.cast.exp->byReference)
3917 exp->byReference = exp->__anon1.cast.exp->byReference;
3918 if(exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1 && exp->__anon1.cast.exp->expType && (exp->__anon1.cast.exp->expType->kind == 13 || exp->__anon1.cast.exp->expType->kind == 12 || (exp->__anon1.cast.exp->expType->kind == 8 && exp->__anon1.cast.exp->expType->__anon1._class && exp->__anon1.cast.exp->expType->__anon1._class->__anon1.registered && !strcmp(exp->__anon1.cast.exp->expType->__anon1._class->__anon1.registered->dataTypeString, "char *"))))
3919 exp->byReference = 1;
3925 struct Expression * e;
3927 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3928 exp->__anon1.cond.cond->usage = (exp->__anon1.cond.cond->usage & ~0x1) | (((unsigned int)(1)) << 0);
3929 ProcessExpression(exp->__anon1.cond.cond);
3930 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
3932 if(!e->next && ((unsigned int)((exp->usage & 0x1) >> 0)))
3933 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3934 ProcessExpression(e);
3936 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3937 exp->__anon1.cond.elseExp->usage = (exp->__anon1.cond.elseExp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3938 ProcessExpression(exp->__anon1.cond.elseExp);
3943 if(exp->__anon1._classExp.specifiers && (*exp->__anon1._classExp.specifiers).first && ((struct Specifier *)(*exp->__anon1._classExp.specifiers).first)->type == 8)
3945 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
3946 struct Expression * argExp = GetTemplateArgExp(spec->__anon1.templateParameter, thisClass, 1);
3950 FreeList(exp->__anon1._classExp.specifiers, (void *)(FreeSpecifier));
3951 if(exp->__anon1._classExp.decl)
3952 FreeDeclarator(exp->__anon1._classExp.decl);
3954 exp->__anon1.member.exp = argExp;
3955 exp->__anon1.member.member = MkIdentifier("dataTypeClass");
3956 exp->__anon1.member.memberType = 3;
3957 ProcessExpressionType(argExp);
3958 ProcessExpressionType(exp);
3959 ProcessExpression(exp);
3964 char className[1024];
3965 char * string = StringFromSpecDecl(exp->__anon1._classExp.specifiers, exp->__anon1._classExp.decl);
3966 struct Symbol * classSym = FindClass(string);
3968 strcpy(className, "__ecereClass_");
3969 FullClassNameCat(className, string, 1);
3970 DeclareClass(curExternal, classSym, className);
3971 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
3972 FreeList(exp->__anon1._classExp.specifiers, (void *)(FreeSpecifier));
3973 if(exp->__anon1._classExp.decl)
3974 FreeDeclarator(exp->__anon1._classExp.decl);
3976 exp->__anon1.__anon1.identifier = MkIdentifier(className);
3982 ProcessExpression(exp->__anon1.vaArg.exp);
3987 ProcessInitializer(exp->__anon1.initializer.initializer);
3992 if(exp->needTemplateCast != 2 && (exp->needTemplateCast == 1 || (exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))))
3994 struct Expression * nbExp = GetNonBracketsExp(exp);
3995 struct Expression * inner = GetInnerExp(nbExp);
3997 if((!exp->expType || exp->expType->kind != 20 || nbExp->type != 11) && !((unsigned int)((exp->usage & 0x40) >> 6)) && (!exp->destType || (!exp->destType->truth && (exp->destType->kind != 20 || (exp->destType->__anon1.templateParameter && (exp->destType->__anon1.templateParameter->dataTypeString || exp->destType->__anon1.templateParameter->__anon1.dataType))))) && (((unsigned int)((exp->usage & 0x80) >> 7)) || ((unsigned int)((exp->usage & 0x1) >> 0)) || ((unsigned int)((exp->usage & 0x4) >> 2))) && (!exp->destType || (!exp->destType->passAsTemplate && exp->expType && (exp->expType->kind != 13 || (exp->destType->kind == 13 || exp->destType->kind == 22)) && ((exp->destType->kind != 13 && exp->destType->kind != 22) || exp->expType->kind == 13))) && !inner->needCast && inner->type != 4)
3999 struct Expression * e = MoveExpContents(exp);
4000 struct Declarator * decl;
4001 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
4002 char typeString[1024];
4003 unsigned int castingToDest = 0;
4004 unsigned int pointerCastExp = 0;
4006 typeString[0] = '\0';
4007 e->needTemplateCast = 2;
4008 inner->needTemplateCast = 2;
4009 nbExp->needTemplateCast = 2;
4010 if(((unsigned int)((exp->usage & 0x80) >> 7)))
4011 strcpy(typeString, "void *");
4014 if(exp->expType->kind == 20 && exp->expType->__anon1.templateParameter && exp->expType->__anon1.templateParameter->dataTypeString)
4015 strcpy(typeString, exp->expType->__anon1.templateParameter->dataTypeString);
4017 PrintType(exp->expType, typeString, 0, 0);
4019 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
4020 if(specs && (*specs).first && ((struct Specifier *)(*specs).first)->type == 8 && exp->destType && !exp->destType->passAsTemplate && exp->destType->kind == 20 && exp->destType->__anon1.templateParameter && (exp->destType->__anon1.templateParameter->dataTypeString || exp->destType->__anon1.templateParameter->__anon1.dataType) && !((unsigned int)((exp->usage & 0x4) >> 2)))
4023 FreeDeclarator(decl);
4024 FreeList(specs, (void *)(FreeSpecifier));
4025 if(exp->destType->__anon1.templateParameter->dataTypeString)
4028 strcpy(typeString, exp->destType->__anon1.templateParameter->dataTypeString);
4029 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
4033 specs = CopyList(exp->destType->__anon1.templateParameter->__anon1.dataType->specifiers, (void *)(CopySpecifier));
4034 decl = CopyDeclarator(exp->destType->__anon1.templateParameter->__anon1.dataType->decl);
4038 e->destType = exp->destType;
4040 exp->destType->refCount++;
4043 struct Specifier * spec = specs ? (*specs).first : (((void *)0));
4044 struct TemplateParameter * tp = (spec && spec->type == 8) ? spec->__anon1.templateParameter : (((void *)0));
4045 struct Type * type = castingToDest ? exp->destType : exp->expType;
4046 unsigned int specsDeclPointer = (spec->type == 1 && strcmp(spec->__anon1.__anon1.name, "uint64")) || (decl && decl->type == 5) || (tp && tp->__anon1.dataType && ((tp->__anon1.dataType->decl && tp->__anon1.dataType->decl->type == 5) || (tp->__anon1.dataType->specifiers && ((struct Specifier *)(*tp->__anon1.dataType->specifiers).first)->type == 1 && strcmp(((struct Specifier *)(*tp->__anon1.dataType->specifiers).first)->__anon1.__anon1.name, "uint64"))));
4048 pointerCastExp = type ? ((type->kind == 20 && specsDeclPointer) || __ecereProp_Type_Get_isPointerType(type)) : specsDeclPointer;
4052 e = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(e)));
4053 e->needTemplateCast = 2;
4055 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(e))));
4056 if(exp->destType && pointerCastExp == (exp->destType->passAsTemplate || (!__ecereProp_Type_Get_isPointerType(exp->destType) || (exp->destType->kind == 20 && (!exp->destType->__anon1.templateParameter || (!exp->destType->__anon1.templateParameter->__anon1.dataType && !exp->destType->__anon1.templateParameter->dataTypeString))))))
4057 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), decl), MkExpBrackets(exp->__anon1.list)));
4058 exp->needTemplateCast = 2;
4064 static void ProcessDeclaration(struct Declaration * decl)
4070 if(decl->__anon1.__anon1.declarators)
4072 struct InitDeclarator * d;
4074 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
4077 ProcessInitializer(d->initializer);
4085 static void ProcessMemberInitData(struct MemberInit * member)
4087 if(member->initializer)
4088 ProcessInitializer(member->initializer);
4091 static void ProcessInitializer(struct Initializer * init)
4096 if(init->__anon1.exp)
4098 init->__anon1.exp->usage = (init->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
4099 ProcessExpression(init->__anon1.exp);
4100 if(init->__anon1.exp->destType && init->__anon1.exp->destType->kind == 8 && init->__anon1.exp->destType->__anon1._class && init->__anon1.exp->destType->__anon1._class->__anon1.registered && init->__anon1.exp->destType->__anon1._class->__anon1.registered->type == 5)
4102 FixReference(init->__anon1.exp, 1);
4104 else if(init->__anon1.exp->destType && init->__anon1.exp->destType->kind == 8)
4105 FixReference(init->__anon1.exp, 0);
4110 if(init->__anon1.list)
4112 struct Initializer * i;
4114 for(i = (*init->__anon1.list).first; i; i = i->next)
4115 ProcessInitializer(i);
4122 static void ProcessStatement(struct Statement * stmt)
4127 ProcessStatement(stmt->__anon1.labeled.stmt);
4130 if(stmt->__anon1.caseStmt.exp)
4132 stmt->__anon1.caseStmt.exp->usage = (stmt->__anon1.caseStmt.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
4133 ProcessExpression(stmt->__anon1.caseStmt.exp);
4135 if(stmt->__anon1.caseStmt.stmt)
4136 ProcessStatement(stmt->__anon1.caseStmt.stmt);
4140 if(stmt->__anon1.compound.context)
4142 struct Declaration * decl;
4143 struct Statement * s;
4144 struct Statement * prevCompound = curCompound;
4145 struct Context * prevContext = curContext;
4147 if(!stmt->__anon1.compound.isSwitch)
4150 curContext = stmt->__anon1.compound.context;
4152 if(stmt->__anon1.compound.declarations)
4154 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
4155 ProcessDeclaration(decl);
4157 if(stmt->__anon1.compound.statements)
4159 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
4160 ProcessStatement(s);
4162 curContext = prevContext;
4163 curCompound = prevCompound;
4169 struct Expression * exp;
4171 if(stmt->__anon1.expressions)
4173 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
4175 ProcessExpression(exp);
4182 if(stmt->__anon1.ifStmt.exp)
4184 struct Expression * exp;
4186 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
4187 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
4189 ProcessExpression(exp);
4192 if(stmt->__anon1.ifStmt.stmt)
4193 ProcessStatement(stmt->__anon1.ifStmt.stmt);
4194 if(stmt->__anon1.ifStmt.elseStmt)
4195 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
4200 struct Expression * exp;
4202 if(stmt->__anon1.switchStmt.exp && (*stmt->__anon1.switchStmt.exp).last)
4204 ((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
4205 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
4207 ProcessExpression(exp);
4210 ProcessStatement(stmt->__anon1.switchStmt.stmt);
4215 struct Expression * exp;
4217 if(stmt->__anon1.whileStmt.exp && (*stmt->__anon1.whileStmt.exp).last)
4219 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
4220 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
4222 ProcessExpression(exp);
4225 ProcessStatement(stmt->__anon1.whileStmt.stmt);
4230 struct Expression * exp;
4232 if(stmt->__anon1.doWhile.exp && (*stmt->__anon1.doWhile.exp).last)
4234 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
4235 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
4237 ProcessExpression(exp);
4240 if(stmt->__anon1.doWhile.stmt)
4241 ProcessStatement(stmt->__anon1.doWhile.stmt);
4246 struct Expression * exp;
4248 if(stmt->__anon1.forStmt.init)
4249 ProcessStatement(stmt->__anon1.forStmt.init);
4250 if(stmt->__anon1.forStmt.check)
4252 if(stmt->__anon1.forStmt.check->__anon1.expressions)
4254 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
4256 ProcessStatement(stmt->__anon1.forStmt.check);
4258 if(stmt->__anon1.forStmt.increment)
4260 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
4262 ProcessExpression(exp);
4265 if(stmt->__anon1.forStmt.stmt)
4266 ProcessStatement(stmt->__anon1.forStmt.stmt);
4277 struct Expression * exp;
4279 if(stmt->__anon1.expressions)
4281 ((struct Expression *)(*stmt->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
4282 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
4284 ProcessExpression(exp);
4285 if(!exp->next && exp->destType && exp->destType->byReference)
4286 FixReference(exp, 1);
4293 ProcessDeclaration(stmt->__anon1.decl);
4298 struct AsmField * field;
4300 if(stmt->__anon1.asmStmt.inputFields)
4302 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
4303 if(field->expression)
4304 ProcessExpression(field->expression);
4306 if(stmt->__anon1.asmStmt.outputFields)
4308 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
4309 if(field->expression)
4310 ProcessExpression(field->expression);
4312 if(stmt->__anon1.asmStmt.clobberedFields)
4314 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
4315 if(field->expression)
4316 ProcessExpression(field->expression);
4323 static void ProcessInstantiation(struct Instantiation * inst)
4327 struct MembersInit * members;
4329 for(members = (*inst->members).first; members; members = members->next)
4331 if(members->type == 0)
4333 if(members->__anon1.dataMembers)
4335 struct MemberInit * member;
4337 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
4338 ProcessMemberInitData(member);
4341 else if(members->type == 1)
4343 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
4349 void ProcessMemberAccess()
4351 struct External * external;
4353 for(external = (*ast).first; external; external = external->next)
4355 curExternal = external;
4356 if(external->type == 1)
4358 if(external->__anon1.declaration)
4359 ProcessDeclaration(external->__anon1.declaration);
4362 for(external = (*ast).first; external; external = external->next)
4364 curExternal = external;
4365 if(external->type == 0)
4367 ProcessFunction(external->__anon1.function);
4369 else if(external->type == 1)
4371 if(external->__anon1.declaration)
4372 ProcessDeclaration(external->__anon1.declaration);
4374 else if(external->type == 2)
4376 struct ClassDefinition * _class = external->__anon1._class;
4378 if(_class->definitions)
4380 struct ClassDef * def;
4381 struct __ecereNameSpace__ecere__com__Class * regClass = _class->symbol->__anon1.registered;
4383 for(def = (*_class->definitions).first; def; def = def->next)
4387 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
4388 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
4390 else if(def->type == 2 && def->__anon1.decl->type == 2)
4392 ProcessInstantiation(def->__anon1.decl->__anon1.inst);
4394 else if(def->type == 1 && def->__anon1.defProperties)
4396 struct MemberInit * defProperty;
4397 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
4399 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4400 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
4402 ProcessMemberInitData(defProperty);
4404 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4405 FreeSymbol(thisSymbol);
4407 else if(def->type == 3 && def->__anon1.propertyDef)
4409 struct PropertyDef * prop = def->__anon1.propertyDef;
4410 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
4412 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4415 curExternal = prop->symbol->__anon2.__anon2.externalSet;
4416 ProcessStatement(prop->setStmt);
4420 curExternal = prop->symbol->__anon2.__anon2.externalGet;
4421 ProcessStatement(prop->getStmt);
4425 curExternal = prop->symbol->__anon2.__anon2.externalIsSet;
4426 ProcessStatement(prop->issetStmt);
4428 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4429 FreeSymbol(thisSymbol);
4431 else if(def->type == 10 && def->__anon1.propertyDef)
4433 struct PropertyDef * prop = def->__anon1.propertyDef;
4437 curExternal = prop->symbol->__anon2.__anon2.externalSet;
4438 ProcessStatement(prop->setStmt);
4442 curExternal = prop->symbol->__anon2.__anon2.externalGet;
4443 ProcessStatement(prop->getStmt);
4446 else if(def->type == 4 && def->__anon1.propertyWatch)
4448 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
4449 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
4451 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4452 if(propertyWatch->compound)
4454 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
4456 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4457 curExternal = (((void *)0));
4458 ProcessStatement(propertyWatch->compound);
4460 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
4461 FreeSymbol(thisSymbol);
4469 void __ecereRegisterModule_pass2(struct __ecereNameSpace__ecere__com__Instance * module)
4471 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
4473 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetNonBracketsExp", "Expression GetNonBracketsExp(Expression exp)", GetNonBracketsExp, module, 2);
4474 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMemberAccess", "void ProcessMemberAccess(void)", ProcessMemberAccess, module, 1);