1 /* Code generated from eC source file: pass16.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__))
42 # define ecere_stdcall __stdcall
45 # define ecere_stdcall
48 #include <sys/types.h>
51 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
54 extern unsigned int inCompiler;
56 extern const char * outputFile;
58 static int declTempCount;
60 struct __ecereNameSpace__ecere__sys__OldList
67 } __attribute__ ((gcc_struct));
69 struct __ecereNameSpace__ecere__sys__BTNode;
71 struct __ecereNameSpace__ecere__com__DataValue
86 } __attribute__ ((gcc_struct)) __anon1;
87 } __attribute__ ((gcc_struct));
89 struct __ecereNameSpace__ecere__com__SerialBuffer
91 unsigned char * _buffer;
95 } __attribute__ ((gcc_struct));
97 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
99 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
101 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
103 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
105 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory);
117 struct TemplateParameter;
119 struct TemplateArgument;
121 struct TemplateDatatype;
135 } __attribute__ ((gcc_struct));
137 extern char * __ecereNameSpace__ecere__sys__GetLastDirectory(const char * string, char * output);
139 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string);
141 extern void FixModuleName(char * moduleName);
143 extern int sprintf(char * , const char * , ...);
145 extern void * memcpy(void * , const void * , size_t size);
147 extern char * __ecereNameSpace__ecere__sys__CopyString(const char * string);
149 extern char * strcpy(char * , const char * );
151 extern void FullClassNameCat(char * output, const char * className, unsigned int includeTemplateParams);
153 struct __ecereNameSpace__ecere__com__LinkList
158 } __attribute__ ((gcc_struct));
160 extern int strcmp(const char * , const char * );
162 extern void Compiler_Error(const char * format, ...);
164 extern const char * __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char * string, const char * stringAndContext);
166 struct __ecereNameSpace__ecere__com__LinkElement
170 } __attribute__ ((gcc_struct));
172 struct __ecereNameSpace__ecere__com__GlobalFunction;
174 struct __ecereNameSpace__ecere__com__IteratorPointer;
176 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
178 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
180 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
182 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
184 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* FreeFunction)(void * ));
186 extern void ListAddFront(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
188 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
190 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
192 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
194 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
196 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (* freeFn)(void * ));
198 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
202 struct CodePosition start;
203 struct CodePosition end;
204 } __attribute__ ((gcc_struct));
206 extern struct Location yylloc;
210 extern struct External * curExternal;
212 static struct External * createInstancesExternal;
214 static struct External * destroyInstancesExternal;
216 extern struct External * DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference);
220 struct __ecereNameSpace__ecere__com__LinkElement in;
221 struct __ecereNameSpace__ecere__com__LinkElement out;
222 struct External * from;
223 struct External * to;
224 unsigned int breakable;
225 } __attribute__ ((gcc_struct));
229 static struct Statement * curCompound;
231 static struct Statement * createInstancesBody;
233 static struct Statement * destroyInstancesBody;
235 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
237 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
241 extern struct Context * globalContext;
243 extern struct Context * curContext;
245 extern struct Context * PushContext(void);
247 extern void PopContext(struct Context * ctx);
251 extern struct ModuleImport * mainModule;
255 struct ModuleImport * prev;
256 struct ModuleImport * next;
258 struct __ecereNameSpace__ecere__sys__OldList classes;
259 struct __ecereNameSpace__ecere__sys__OldList functions;
262 } __attribute__ ((gcc_struct));
266 extern struct Expression * CopyExpression(struct Expression * exp);
268 extern struct Expression * MkExpConstant(const char * string);
270 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
272 extern void ProcessExpressionType(struct Expression * exp);
274 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
276 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
278 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
280 extern void FreeExpression(struct Expression * exp);
282 extern struct Expression * QMkExpId(const char * id);
284 extern void CheckTemplateTypes(struct Expression * exp);
286 static void ProcessExpression(struct Expression * exp);
288 void ProcessExpressionInstPass(struct Expression * exp)
290 ProcessExpression(exp);
295 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
297 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
299 static struct Declaration * curDecl;
301 struct __ecereNameSpace__ecere__com__Class;
303 struct __ecereNameSpace__ecere__com__Instance
306 struct __ecereNameSpace__ecere__com__Class * _class;
308 } __attribute__ ((gcc_struct));
310 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
312 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value);
314 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
316 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
318 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char * name, void * function);
320 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
322 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove;
324 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext;
326 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Add;
328 struct __ecereNameSpace__ecere__com__Property;
330 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
332 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);
334 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void * instance, struct __ecereNameSpace__ecere__com__Property * _property, void * object, void (* callback)(void * , void * ));
336 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
338 extern void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName);
342 extern struct Specifier * MkSpecifier(int specifier);
344 extern struct Specifier * MkSpecifierName(const char * name);
346 extern struct Specifier * CopySpecifier(struct Specifier * spec);
348 extern struct Expression * MkExpClassSize(struct Specifier * _class);
354 struct Statement * prev;
355 struct Statement * next;
360 struct __ecereNameSpace__ecere__sys__OldList * expressions;
363 struct Identifier * id;
364 struct Statement * stmt;
365 } __attribute__ ((gcc_struct)) labeled;
368 struct Expression * exp;
369 struct Statement * stmt;
370 } __attribute__ ((gcc_struct)) caseStmt;
373 struct __ecereNameSpace__ecere__sys__OldList * declarations;
374 struct __ecereNameSpace__ecere__sys__OldList * statements;
375 struct Context * context;
376 unsigned int isSwitch;
377 } __attribute__ ((gcc_struct)) compound;
380 struct __ecereNameSpace__ecere__sys__OldList * exp;
381 struct Statement * stmt;
382 struct Statement * elseStmt;
383 } __attribute__ ((gcc_struct)) ifStmt;
386 struct __ecereNameSpace__ecere__sys__OldList * exp;
387 struct Statement * stmt;
388 } __attribute__ ((gcc_struct)) switchStmt;
391 struct __ecereNameSpace__ecere__sys__OldList * exp;
392 struct Statement * stmt;
393 } __attribute__ ((gcc_struct)) whileStmt;
396 struct __ecereNameSpace__ecere__sys__OldList * exp;
397 struct Statement * stmt;
398 } __attribute__ ((gcc_struct)) doWhile;
401 struct Statement * init;
402 struct Statement * check;
403 struct __ecereNameSpace__ecere__sys__OldList * increment;
404 struct Statement * stmt;
405 } __attribute__ ((gcc_struct)) forStmt;
408 struct Identifier * id;
409 } __attribute__ ((gcc_struct)) gotoStmt;
412 struct Specifier * spec;
414 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
415 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
416 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
417 } __attribute__ ((gcc_struct)) asmStmt;
420 struct Expression * watcher;
421 struct Expression * object;
422 struct __ecereNameSpace__ecere__sys__OldList * watches;
423 } __attribute__ ((gcc_struct)) _watch;
426 struct Identifier * id;
427 struct __ecereNameSpace__ecere__sys__OldList * exp;
428 struct __ecereNameSpace__ecere__sys__OldList * filter;
429 struct Statement * stmt;
430 } __attribute__ ((gcc_struct)) forEachStmt;
431 struct Declaration * decl;
432 } __attribute__ ((gcc_struct)) __anon1;
433 } __attribute__ ((gcc_struct));
435 extern struct Identifier * MkIdentifier(const char * string);
437 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
439 extern struct Expression * MkExpIdentifier(struct Identifier * id);
441 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
443 extern struct Identifier * CopyIdentifier(struct Identifier * id);
445 extern void FreeIdentifier(struct Identifier * id);
449 struct __ecereNameSpace__ecere__com__Property
451 struct __ecereNameSpace__ecere__com__Property * prev;
452 struct __ecereNameSpace__ecere__com__Property * next;
454 unsigned int isProperty;
457 struct __ecereNameSpace__ecere__com__Class * _class;
458 const char * dataTypeString;
459 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
460 struct Type * dataType;
461 void (* Set)(void * , int);
462 int (* Get)(void * );
463 unsigned int (* IsSet)(void * );
467 unsigned int conversion;
468 unsigned int watcherOffset;
469 const char * category;
470 unsigned int compiled;
471 unsigned int selfWatchable;
472 unsigned int isWatchable;
473 } __attribute__ ((gcc_struct));
475 extern void FreeType(struct Type * type);
477 extern struct Type * MkClassType(const char * name);
479 extern void CopyTypeInto(struct Type * type, struct Type * src);
481 extern struct Type * ProcessTypeString(const char * string, unsigned int staticMethod);
487 struct Initializer * prev;
488 struct Initializer * next;
493 struct Expression * exp;
494 struct __ecereNameSpace__ecere__sys__OldList * list;
495 } __attribute__ ((gcc_struct)) __anon1;
496 unsigned int isConstant;
497 struct Identifier * id;
498 } __attribute__ ((gcc_struct));
500 extern void FreeInitializer(struct Initializer * initializer);
502 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
504 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
510 struct Specifier * prev;
511 struct Specifier * next;
519 struct ExtDecl * extDecl;
521 struct Symbol * symbol;
522 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
523 struct Specifier * nsSpec;
524 } __attribute__ ((gcc_struct)) __anon1;
527 struct Identifier * id;
528 struct __ecereNameSpace__ecere__sys__OldList * list;
529 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
530 struct __ecereNameSpace__ecere__sys__OldList * definitions;
531 unsigned int addNameSpace;
532 struct Context * ctx;
533 struct ExtDecl * extDeclStruct;
534 } __attribute__ ((gcc_struct)) __anon2;
535 struct Expression * expression;
536 struct Specifier * _class;
537 struct TemplateParameter * templateParameter;
538 } __attribute__ ((gcc_struct)) __anon1;
539 } __attribute__ ((gcc_struct));
543 struct Identifier * prev;
544 struct Identifier * next;
546 struct Symbol * classSym;
547 struct Specifier * _class;
549 struct Identifier * badID;
550 } __attribute__ ((gcc_struct));
552 extern struct Symbol * FindClass(const char * name);
554 extern struct Specifier * _MkSpecifierName(const char * name, struct Symbol * symbol, struct __ecereNameSpace__ecere__sys__OldList * templateArgs);
556 extern struct Type * MkClassTypeSymbol(struct Symbol * symbol);
558 extern void FreeSymbol(struct Symbol * symbol);
560 struct Instantiation;
564 struct Instantiation * prev;
565 struct Instantiation * next;
567 struct Specifier * _class;
568 struct Expression * exp;
569 struct __ecereNameSpace__ecere__sys__OldList * members;
570 struct Symbol * symbol;
571 unsigned int fullSet;
572 unsigned int isConstant;
573 unsigned char * data;
574 struct Location nameLoc;
575 struct Location insideLoc;
577 } __attribute__ ((gcc_struct));
581 struct Declaration * prev;
582 struct Declaration * next;
589 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
590 struct __ecereNameSpace__ecere__sys__OldList * declarators;
591 } __attribute__ ((gcc_struct)) __anon1;
592 struct Instantiation * inst;
595 struct Identifier * id;
596 struct Expression * exp;
597 } __attribute__ ((gcc_struct)) __anon2;
598 } __attribute__ ((gcc_struct)) __anon1;
599 struct Specifier * extStorage;
600 struct Symbol * symbol;
602 } __attribute__ ((gcc_struct));
604 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
606 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
608 extern void FreeInstance(struct Instantiation * inst);
610 extern struct Expression * MkExpInstance(struct Instantiation * inst);
612 struct __ecereNameSpace__ecere__com__Method;
614 struct __ecereNameSpace__ecere__com__Method
617 struct __ecereNameSpace__ecere__com__Method * parent;
618 struct __ecereNameSpace__ecere__com__Method * left;
619 struct __ecereNameSpace__ecere__com__Method * right;
624 struct __ecereNameSpace__ecere__com__Class * _class;
626 const char * dataTypeString;
627 struct Type * dataType;
629 } __attribute__ ((gcc_struct));
638 struct Symbol * _class;
641 struct __ecereNameSpace__ecere__sys__OldList members;
643 } __attribute__ ((gcc_struct)) __anon1;
646 struct Type * returnType;
647 struct __ecereNameSpace__ecere__sys__OldList params;
648 struct Symbol * thisClass;
649 unsigned int staticMethod;
650 struct TemplateParameter * thisClassTemplate;
651 } __attribute__ ((gcc_struct)) __anon2;
654 struct __ecereNameSpace__ecere__com__Method * method;
655 struct __ecereNameSpace__ecere__com__Class * methodClass;
656 struct __ecereNameSpace__ecere__com__Class * usedClass;
657 } __attribute__ ((gcc_struct)) __anon3;
660 struct Type * arrayType;
662 struct Expression * arraySizeExp;
663 unsigned int freeExp;
664 struct Symbol * enumClass;
665 } __attribute__ ((gcc_struct)) __anon4;
667 struct TemplateParameter * templateParameter;
668 } __attribute__ ((gcc_struct)) __anon1;
673 struct __ecereNameSpace__ecere__com__Class * thisClassFrom;
679 unsigned int isSigned : 1;
680 unsigned int constant : 1;
681 unsigned int truth : 1;
682 unsigned int byReference : 1;
683 unsigned int extraParam : 1;
684 unsigned int directClassAccess : 1;
685 unsigned int computing : 1;
686 unsigned int keepCast : 1;
687 unsigned int passAsTemplate : 1;
688 unsigned int dllExport : 1;
689 unsigned int attrStdcall : 1;
690 unsigned int declaredWithStruct : 1;
691 unsigned int typedByReference : 1;
692 unsigned int casted : 1;
693 unsigned int pointerAlignment : 1;
694 unsigned int isLong : 1;
695 } __attribute__ ((gcc_struct));
697 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
701 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
703 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
707 struct Expression * prev;
708 struct Expression * next;
716 struct Identifier * identifier;
717 } __attribute__ ((gcc_struct)) __anon1;
718 struct Statement * compound;
719 struct Instantiation * instance;
723 unsigned int intlString;
724 unsigned int wideString;
725 } __attribute__ ((gcc_struct)) __anon2;
726 struct __ecereNameSpace__ecere__sys__OldList * list;
729 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
730 struct Declarator * decl;
731 } __attribute__ ((gcc_struct)) _classExp;
734 struct Identifier * id;
735 } __attribute__ ((gcc_struct)) classData;
738 struct Expression * exp;
739 struct __ecereNameSpace__ecere__sys__OldList * arguments;
740 struct Location argLoc;
741 } __attribute__ ((gcc_struct)) call;
744 struct Expression * exp;
745 struct __ecereNameSpace__ecere__sys__OldList * index;
746 } __attribute__ ((gcc_struct)) index;
749 struct Expression * exp;
750 struct Identifier * member;
752 unsigned int thisPtr;
753 } __attribute__ ((gcc_struct)) member;
757 struct Expression * exp1;
758 struct Expression * exp2;
759 } __attribute__ ((gcc_struct)) op;
760 struct TypeName * typeName;
761 struct Specifier * _class;
764 struct TypeName * typeName;
765 struct Expression * exp;
766 } __attribute__ ((gcc_struct)) cast;
769 struct Expression * cond;
770 struct __ecereNameSpace__ecere__sys__OldList * exp;
771 struct Expression * elseExp;
772 } __attribute__ ((gcc_struct)) cond;
775 struct TypeName * typeName;
776 struct Expression * size;
777 } __attribute__ ((gcc_struct)) _new;
780 struct TypeName * typeName;
781 struct Expression * size;
782 struct Expression * exp;
783 } __attribute__ ((gcc_struct)) _renew;
787 struct Identifier * id;
788 } __attribute__ ((gcc_struct)) db;
791 struct Expression * ds;
792 struct Expression * name;
793 } __attribute__ ((gcc_struct)) dbopen;
796 struct TypeName * typeName;
797 struct Initializer * initializer;
798 } __attribute__ ((gcc_struct)) initializer;
801 struct Expression * exp;
802 struct TypeName * typeName;
803 } __attribute__ ((gcc_struct)) vaArg;
804 } __attribute__ ((gcc_struct)) __anon1;
805 unsigned int debugValue;
806 struct __ecereNameSpace__ecere__com__DataValue val;
808 unsigned int hasAddress;
809 struct Type * expType;
810 struct Type * destType;
813 unsigned int byReference;
814 unsigned int isConstant;
815 unsigned int addedThis;
816 unsigned int needCast;
817 unsigned int thisPtr;
818 unsigned int opDestType;
819 unsigned int needTemplateCast;
820 } __attribute__ ((gcc_struct));
822 extern struct Declarator * SpecDeclFromString(const char * string, struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * baseDecl);
824 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
826 extern struct TypeName * QMkClass(const char * spec, struct Declarator * decl);
828 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
832 struct Declarator * prev;
833 struct Declarator * next;
836 struct Symbol * symbol;
837 struct Declarator * declarator;
840 struct Identifier * identifier;
843 struct Expression * exp;
844 struct Expression * posExp;
845 struct Attrib * attrib;
846 } __attribute__ ((gcc_struct)) structDecl;
849 struct Expression * exp;
850 struct Specifier * enumClass;
851 } __attribute__ ((gcc_struct)) array;
854 struct __ecereNameSpace__ecere__sys__OldList * parameters;
855 } __attribute__ ((gcc_struct)) function;
858 struct Pointer * pointer;
859 } __attribute__ ((gcc_struct)) pointer;
862 struct ExtDecl * extended;
863 } __attribute__ ((gcc_struct)) extended;
864 } __attribute__ ((gcc_struct)) __anon1;
865 } __attribute__ ((gcc_struct));
867 static void ProcessInitializer(struct Initializer * init)
872 init->__anon1.exp->usage = (init->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
873 ProcessExpression(init->__anon1.exp);
877 struct Initializer * i;
879 for(i = (*init->__anon1.list).first; i; i = i->next)
880 ProcessInitializer(i);
891 struct Symbol * parent;
892 struct Symbol * left;
893 struct Symbol * right;
898 struct __ecereNameSpace__ecere__com__Method * method;
899 struct __ecereNameSpace__ecere__com__Property * _property;
900 struct __ecereNameSpace__ecere__com__Class * registered;
901 } __attribute__ ((gcc_struct)) __anon1;
902 unsigned int notYetDeclared;
907 struct External * pointerExternal;
908 struct External * structExternal;
909 } __attribute__ ((gcc_struct)) __anon1;
912 struct External * externalGet;
913 struct External * externalSet;
914 struct External * externalPtr;
915 struct External * externalIsSet;
916 } __attribute__ ((gcc_struct)) __anon2;
919 struct External * methodExternal;
920 struct External * methodCodeExternal;
921 } __attribute__ ((gcc_struct)) __anon3;
922 } __attribute__ ((gcc_struct)) __anon2;
923 unsigned int imported;
924 unsigned int declaredStructSym;
925 struct __ecereNameSpace__ecere__com__Class * _class;
926 unsigned int declaredStruct;
927 unsigned int needConstructor;
928 unsigned int needDestructor;
929 char * constructorName;
932 char * destructorName;
933 struct ModuleImport * module;
934 struct ClassImport * _import;
935 struct Location nameLoc;
936 unsigned int isParam;
937 unsigned int isRemote;
938 unsigned int isStruct;
939 unsigned int fireWatchersDone;
941 unsigned int classData;
942 unsigned int isStatic;
944 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
945 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
946 struct Context * ctx;
948 struct Expression * propCategory;
949 unsigned int mustRegister;
950 } __attribute__ ((gcc_struct));
954 struct ClassImport * prev;
955 struct ClassImport * next;
957 struct __ecereNameSpace__ecere__sys__OldList methods;
958 struct __ecereNameSpace__ecere__sys__OldList properties;
961 } __attribute__ ((gcc_struct));
965 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
967 struct __ecereNameSpace__ecere__sys__BinaryTree;
969 struct __ecereNameSpace__ecere__sys__BinaryTree
971 struct __ecereNameSpace__ecere__sys__BTNode * root;
973 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
974 void (* FreeKey)(void * key);
975 } __attribute__ ((gcc_struct));
977 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
979 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
981 struct FunctionDefinition;
983 extern struct FunctionDefinition * _MkFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * declarationList, unsigned int errorOnOmit);
985 extern void ProcessFunctionBody(struct FunctionDefinition * func, struct Statement * body);
987 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
989 struct FunctionDefinition
991 struct FunctionDefinition * prev;
992 struct FunctionDefinition * next;
994 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
995 struct Declarator * declarator;
996 struct __ecereNameSpace__ecere__sys__OldList * declarations;
997 struct Statement * body;
998 struct __ecereNameSpace__ecere__com__Class * _class;
999 struct __ecereNameSpace__ecere__sys__OldList attached;
1002 struct Symbol * propSet;
1004 unsigned int propertyNoThis;
1005 } __attribute__ ((gcc_struct));
1007 struct PropertyWatch;
1009 struct PropertyWatch
1011 struct PropertyWatch * prev;
1012 struct PropertyWatch * next;
1013 struct Location loc;
1014 struct Statement * compound;
1015 struct __ecereNameSpace__ecere__sys__OldList * properties;
1016 unsigned int deleteWatch;
1017 } __attribute__ ((gcc_struct));
1019 struct InitDeclarator;
1021 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1023 extern struct Declaration * QMkDeclaration(const char * name, struct InitDeclarator * initDecl);
1025 struct InitDeclarator
1027 struct InitDeclarator * prev;
1028 struct InitDeclarator * next;
1029 struct Location loc;
1030 struct Declarator * declarator;
1031 struct Initializer * initializer;
1032 } __attribute__ ((gcc_struct));
1034 struct __ecereNameSpace__ecere__com__DataMember;
1036 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1042 const char * dataTypeString;
1043 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1044 } __attribute__ ((gcc_struct)) __anon1;
1045 struct __ecereNameSpace__ecere__com__DataValue expression;
1048 const char * memberString;
1051 struct __ecereNameSpace__ecere__com__DataMember * member;
1052 struct __ecereNameSpace__ecere__com__Property * prop;
1053 struct __ecereNameSpace__ecere__com__Method * method;
1054 } __attribute__ ((gcc_struct)) __anon1;
1055 } __attribute__ ((gcc_struct)) __anon2;
1056 } __attribute__ ((gcc_struct)) __anon1;
1057 } __attribute__ ((gcc_struct));
1059 struct __ecereNameSpace__ecere__com__DataMember
1061 struct __ecereNameSpace__ecere__com__DataMember * prev;
1062 struct __ecereNameSpace__ecere__com__DataMember * next;
1064 unsigned int isProperty;
1067 struct __ecereNameSpace__ecere__com__Class * _class;
1068 const char * dataTypeString;
1069 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1070 struct Type * dataType;
1074 struct __ecereNameSpace__ecere__sys__OldList members;
1075 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
1077 short structAlignment;
1078 short pointerAlignment;
1079 } __attribute__ ((gcc_struct));
1081 extern void __ecereNameSpace__ecere__com__eClass_FindNextMember(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class ** curClass, struct __ecereNameSpace__ecere__com__DataMember ** curMember, struct __ecereNameSpace__ecere__com__DataMember ** subMemberStack, int * subMemberStackPos);
1083 struct __ecereNameSpace__ecere__com__Module;
1085 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);
1087 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
1089 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);
1091 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);
1093 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);
1099 struct Enumerator * prev;
1100 struct Enumerator * next;
1101 struct Location loc;
1102 struct Identifier * id;
1103 struct Expression * exp;
1104 } __attribute__ ((gcc_struct));
1110 struct AsmField * prev;
1111 struct AsmField * next;
1112 struct Location loc;
1114 struct Expression * expression;
1115 struct Identifier * symbolic;
1116 } __attribute__ ((gcc_struct));
1118 struct __ecereNameSpace__ecere__com__BitMember;
1120 struct __ecereNameSpace__ecere__com__BitMember
1122 struct __ecereNameSpace__ecere__com__BitMember * prev;
1123 struct __ecereNameSpace__ecere__com__BitMember * next;
1125 unsigned int isProperty;
1128 struct __ecereNameSpace__ecere__com__Class * _class;
1129 const char * dataTypeString;
1130 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1131 struct Type * dataType;
1136 } __attribute__ ((gcc_struct));
1142 struct MemberInit * prev;
1143 struct MemberInit * next;
1144 struct Location loc;
1145 struct Location realLoc;
1146 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
1147 struct Initializer * initializer;
1149 unsigned int variable;
1150 unsigned int takeOutExp;
1151 } __attribute__ ((gcc_struct));
1153 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
1155 static void ProcessMemberInitData(struct MemberInit * member)
1157 if(member->initializer)
1158 ProcessInitializer(member->initializer);
1161 struct ClassDefinition;
1165 struct Context * parent;
1166 struct __ecereNameSpace__ecere__sys__BinaryTree types;
1167 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1168 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
1169 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
1172 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
1173 struct ClassDefinition * classDef;
1174 unsigned int templateTypesOnly;
1175 unsigned int hasNameSpace;
1176 } __attribute__ ((gcc_struct));
1180 struct External * prev;
1181 struct External * next;
1182 struct Location loc;
1184 struct Symbol * symbol;
1187 struct FunctionDefinition * function;
1188 struct ClassDefinition * _class;
1189 struct Declaration * declaration;
1190 char * importString;
1191 struct Identifier * id;
1192 struct DBTableDef * table;
1193 } __attribute__ ((gcc_struct)) __anon1;
1195 struct External * fwdDecl;
1196 struct __ecereNameSpace__ecere__com__Instance * outgoing;
1197 struct __ecereNameSpace__ecere__com__Instance * incoming;
1198 int nonBreakableIncoming;
1199 } __attribute__ ((gcc_struct));
1201 struct ClassDefinition
1203 struct ClassDefinition * prev;
1204 struct ClassDefinition * next;
1205 struct Location loc;
1206 struct Specifier * _class;
1207 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
1208 struct __ecereNameSpace__ecere__sys__OldList * definitions;
1209 struct Symbol * symbol;
1210 struct Location blockStart;
1211 struct Location nameLoc;
1213 unsigned int deleteWatchable;
1214 } __attribute__ ((gcc_struct));
1216 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
1218 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
1220 struct ClassFunction;
1224 struct MembersInit * prev;
1225 struct MembersInit * next;
1226 struct Location loc;
1230 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
1231 struct ClassFunction * function;
1232 } __attribute__ ((gcc_struct)) __anon1;
1233 } __attribute__ ((gcc_struct));
1235 struct ClassFunction
1237 struct ClassFunction * prev;
1238 struct ClassFunction * next;
1239 struct Location loc;
1240 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1241 struct Declarator * declarator;
1242 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1243 struct Statement * body;
1244 struct __ecereNameSpace__ecere__com__Class * _class;
1245 struct __ecereNameSpace__ecere__sys__OldList attached;
1248 struct Symbol * propSet;
1249 unsigned int isVirtual;
1250 unsigned int isConstructor;
1251 unsigned int isDestructor;
1252 unsigned int dontMangle;
1255 } __attribute__ ((gcc_struct));
1257 static unsigned int ProcessInstMembers_SimpleMemberEnsure(struct __ecereNameSpace__ecere__com__DataMember * parentMember, struct Instantiation * inst, struct Expression * instExp, struct __ecereNameSpace__ecere__sys__OldList * list, unsigned int zeroOut)
1259 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
1260 unsigned int fullSet = 1;
1261 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1263 for(dataMember = parentMember->members.first; dataMember; dataMember = dataMember->next)
1265 if(!dataMember->isProperty)
1267 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
1269 if(!ProcessInstMembers_SimpleMemberEnsure(dataMember, inst, instExp, list, zeroOut))
1274 unsigned int memberFilled = 0;
1276 if(inst->members && (*inst->members).first)
1278 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1279 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1280 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1281 int subMemberStackPos = 0;
1282 struct MembersInit * members;
1284 for(members = (*inst->members).first; members; members = members->next)
1286 if(members->type == 0)
1288 struct MemberInit * member = (((void *)0));
1290 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1292 if(member->identifiers)
1294 struct Identifier * firstID = (*member->identifiers).first;
1295 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1296 int _subMemberStackPos = 0;
1297 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1300 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1303 if(thisMember && thisMember->memberAccess == 1)
1305 curMember = thisMember;
1306 curClass = curMember->_class;
1307 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1308 subMemberStackPos = _subMemberStackPos;
1310 if(!firstID->next && thisMember == dataMember)
1319 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1320 if(curMember == dataMember)
1338 struct Expression * instExpCopy = CopyExpression(instExp);
1339 struct Expression * memberExp;
1340 struct Expression * setExp;
1341 struct Expression * value = MkExpConstant("0");
1343 memberExp = MkExpMember(instExpCopy, MkIdentifier(dataMember->name));
1344 memberExp->__anon1.member.memberType = 3;
1345 value->usage = (value->usage & ~0x1) | (((unsigned int)(1)) << 0);
1346 setExp = MkExpOp(memberExp, '=', value);
1347 value->loc = inst->loc;
1348 setExp->loc = inst->loc;
1349 FreeType(instExpCopy->expType);
1350 instExpCopy->expType = instExp->expType;
1351 if(instExp->expType)
1352 instExp->expType->refCount++;
1353 ProcessExpressionType(setExp);
1354 ProcessExpression(setExp);
1355 ListAdd(list, setExp);
1369 struct PropertyDef * prev;
1370 struct PropertyDef * next;
1371 struct Location loc;
1372 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1373 struct Declarator * declarator;
1374 struct Identifier * id;
1375 struct Statement * getStmt;
1376 struct Statement * setStmt;
1377 struct Statement * issetStmt;
1378 struct Symbol * symbol;
1379 struct Expression * category;
1382 unsigned int conversion : 1;
1383 unsigned int isWatchable : 1;
1384 unsigned int isDBProp : 1;
1385 } __attribute__ ((gcc_struct)) __anon1;
1386 } __attribute__ ((gcc_struct));
1388 struct __ecereNameSpace__ecere__com__NameSpace;
1390 struct __ecereNameSpace__ecere__com__NameSpace
1393 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1394 struct __ecereNameSpace__ecere__com__NameSpace * left;
1395 struct __ecereNameSpace__ecere__com__NameSpace * right;
1397 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1398 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1399 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1400 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1401 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1402 } __attribute__ ((gcc_struct));
1404 struct __ecereNameSpace__ecere__com__Class
1406 struct __ecereNameSpace__ecere__com__Class * prev;
1407 struct __ecereNameSpace__ecere__com__Class * next;
1413 unsigned int (* Constructor)(void * );
1414 void (* Destructor)(void * );
1417 struct __ecereNameSpace__ecere__com__Class * base;
1418 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
1419 struct __ecereNameSpace__ecere__sys__BinaryTree members;
1420 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
1421 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
1422 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
1423 struct __ecereNameSpace__ecere__sys__OldList derivatives;
1427 struct __ecereNameSpace__ecere__com__Instance * module;
1428 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
1429 const char * dataTypeString;
1430 struct Type * dataType;
1432 int defaultAlignment;
1433 void (* Initialize)();
1435 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
1436 const char * designerClass;
1437 unsigned int noExpansion;
1438 const char * defaultProperty;
1439 unsigned int comRedefinition;
1442 unsigned int internalDecl;
1444 unsigned int computeSize;
1445 short structAlignment;
1446 short pointerAlignment;
1447 int destructionWatchOffset;
1449 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
1450 int inheritanceAccess;
1451 const char * fullName;
1453 struct __ecereNameSpace__ecere__sys__OldList conversions;
1454 struct __ecereNameSpace__ecere__sys__OldList templateParams;
1455 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
1456 struct __ecereNameSpace__ecere__com__Class * templateClass;
1457 struct __ecereNameSpace__ecere__sys__OldList templatized;
1459 unsigned int isInstanceClass;
1460 unsigned int byValueSystemClass;
1461 } __attribute__ ((gcc_struct));
1463 struct __ecereNameSpace__ecere__com__Application
1466 const char * * argv;
1468 unsigned int isGUIApp;
1469 struct __ecereNameSpace__ecere__sys__OldList allModules;
1470 char * parsedCommand;
1471 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
1472 } __attribute__ ((gcc_struct));
1474 static unsigned int ProcessInstMembers(struct Instantiation * inst, struct Expression * instExp, struct __ecereNameSpace__ecere__sys__OldList * list, unsigned int zeroOut)
1476 struct MembersInit * members;
1477 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
1478 unsigned int fullSet = 1, convert = 0;
1480 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
1482 struct Expression * exp = (((void *)0));
1484 if(inst->members && (*inst->members).first)
1486 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
1488 while(_class != classSym->__anon1.registered)
1490 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (((void *)0));
1491 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
1493 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
1495 for(bitMember = _class->membersAndProperties.first; bitMember; bitMember = bitMember->next)
1497 struct __ecereNameSpace__ecere__com__BitMember * curMember = (((void *)0));
1498 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1499 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1500 int subMemberStackPos = 0;
1501 struct MemberInit * member = (((void *)0));
1502 unsigned int found = 0;
1504 for(members = (*inst->members).first; members; members = members->next)
1506 if(members->type == 0)
1508 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1510 if(member->identifiers)
1512 struct Identifier * firstID = (*member->identifiers).first;
1513 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1514 int _subMemberStackPos = 0;
1515 struct __ecereNameSpace__ecere__com__BitMember * thisMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindDataMember(_class, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1519 thisMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, firstID->string, privateModule);
1521 if(thisMember && thisMember->memberAccess == 1)
1523 curMember = thisMember;
1524 curClass = curMember->_class;
1525 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1526 subMemberStackPos = _subMemberStackPos;
1528 if(thisMember == bitMember)
1536 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, (struct __ecereNameSpace__ecere__com__DataMember **)&curMember, subMemberStack, &subMemberStackPos);
1537 if(curMember == bitMember)
1550 if(!bitMember->isProperty)
1552 struct Expression * part = (((void *)0));
1553 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1554 struct Declarator * decl;
1556 decl = SpecDeclFromString(_class->dataTypeString, specs, (((void *)0)));
1557 ProcessInitializer(member->initializer);
1558 if(member->initializer && member->initializer->type == 0)
1564 sprintf(pos, "%d", bitMember->pos);
1565 part = MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(member->initializer->__anon1.exp))))), LEFT_OP, MkExpConstant(pos))));
1568 part = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(member->initializer->__anon1.exp)))));
1569 member->initializer->__anon1.exp = (((void *)0));
1570 FreeInitializer(member->initializer);
1571 member->initializer = (((void *)0));
1574 exp = MkExpOp(exp, '|', part);
1580 char setName[1024], getName[1024];
1582 DeclareProperty(curExternal, (struct __ecereNameSpace__ecere__com__Property *)bitMember, setName, getName);
1583 if(member->initializer && member->initializer->type == 0)
1585 exp = MkExpCall(MkExpIdentifier(MkIdentifier(setName)), MkListOne(member->initializer->__anon1.exp));
1586 member->initializer->__anon1.exp = (((void *)0));
1587 FreeInitializer(member->initializer);
1588 member->initializer = (((void *)0));
1596 exp = MkExpBrackets(MkListOne(exp));
1598 exp = MkExpConstant("0");
1599 exp->expType = MkClassType(classSym->string);
1600 ProcessExpression(exp);
1603 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 3)
1605 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
1606 struct Expression * exp = (((void *)0));
1608 if(inst->members && (*inst->members).first)
1610 struct MemberInit * member = (((void *)0));
1611 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
1612 unsigned int found = 0;
1614 for(members = (*inst->members).first; members; members = members->next)
1616 if(members->type == 0)
1618 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1620 if(member->identifiers)
1622 struct Identifier * firstID = (*member->identifiers).first;
1624 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, firstID->string, privateModule);
1630 prop = (((void *)0));
1646 char setName[1024], getName[1024];
1648 DeclareProperty(curExternal, prop, setName, getName);
1649 if(member->initializer && member->initializer->type == 0)
1651 exp = MkExpCall(MkExpIdentifier(MkIdentifier(setName)), MkListOne(member->initializer->__anon1.exp));
1652 member->initializer->__anon1.exp = (((void *)0));
1653 FreeInitializer(member->initializer);
1654 member->initializer = (((void *)0));
1659 ProcessInitializer(member->initializer);
1660 if(member->initializer && member->initializer->type == 0)
1662 exp = MkExpCast(QMkClass(_class->fullName, (((void *)0))), MkExpBrackets(MkListOne(member->initializer->__anon1.exp)));
1663 member->initializer->__anon1.exp = (((void *)0));
1664 FreeInitializer(member->initializer);
1665 member->initializer = (((void *)0));
1671 exp = MkExpBrackets(MkListOne(exp));
1673 exp = MkExpConstant("0");
1674 ProcessExpression(exp);
1677 else if(classSym && classSym->__anon1.registered)
1679 if(classSym->__anon1.registered->type == 1)
1681 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
1683 while(_class != classSym->__anon1.registered)
1685 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1686 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
1688 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
1690 if(_class->structSize != _class->memberOffset)
1692 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
1694 if(!dataMember->isProperty)
1696 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
1698 if(!ProcessInstMembers_SimpleMemberEnsure(dataMember, inst, instExp, list, zeroOut))
1703 unsigned int memberFilled = 0;
1705 if(inst->members && (*inst->members).first)
1707 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1708 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1709 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1710 int subMemberStackPos = 0;
1712 for(members = (*inst->members).first; members; members = members->next)
1714 if(members->type == 0 && members->__anon1.dataMembers)
1716 struct MemberInit * member = (((void *)0));
1718 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1720 if(member->identifiers)
1722 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1723 int _subMemberStackPos = 0;
1724 struct Identifier * firstID = (*member->identifiers).first;
1725 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1728 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1731 if(thisMember->memberAccess == 1)
1733 curMember = thisMember;
1734 curClass = curMember->_class;
1735 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1736 subMemberStackPos = _subMemberStackPos;
1738 if(!firstID->next && curMember == dataMember)
1747 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1748 if(curMember == dataMember)
1766 struct Expression * instExpCopy = CopyExpression(instExp);
1767 struct Expression * memberExp;
1768 struct Expression * setExp;
1769 struct Expression * value = MkExpConstant("0");
1771 memberExp = MkExpMember(instExpCopy, MkIdentifier(dataMember->name));
1772 memberExp->__anon1.member.memberType = 3;
1773 value->usage = (value->usage & ~0x1) | (((unsigned int)(1)) << 0);
1774 setExp = MkExpOp(memberExp, '=', value);
1775 value->loc = inst->loc;
1776 setExp->loc = inst->loc;
1777 FreeType(instExpCopy->expType);
1778 instExpCopy->expType = instExp->expType;
1779 if(instExp->expType)
1780 instExp->expType->refCount++;
1781 ProcessExpressionType(setExp);
1782 ProcessExpression(setExp);
1783 ListAdd(list, setExp);
1792 if(inst->members && (*inst->members).first)
1794 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1795 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1796 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1797 int subMemberStackPos = 0;
1799 for(members = (*inst->members).first; members; members = members->next)
1801 if(members->type == 0 && members->__anon1.dataMembers)
1803 struct MemberInit * member = (((void *)0));
1804 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
1806 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1808 struct Identifier * ident = (((void *)0));
1809 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (((void *)0));
1811 if(member->identifiers)
1813 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1814 int _subMemberStackPos = 0;
1815 struct Identifier * firstID = (*member->identifiers).first;
1817 thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1819 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1823 if(thisMember->memberAccess == 1)
1825 curMember = thisMember;
1826 curClass = curMember->_class;
1827 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1828 subMemberStackPos = _subMemberStackPos;
1831 else if(classSym->__anon1.registered->type != 1)
1833 method = __ecereNameSpace__ecere__com__eClass_FindMethod(classSym->__anon1.registered, ident->string, privateModule);
1834 if(!method || method->type != 1)
1835 method = (((void *)0));
1840 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1841 thisMember = curMember;
1843 if(instExp && (thisMember || method))
1845 struct Expression * instExpCopy = CopyExpression(instExp);
1846 struct Expression * setExp = (((void *)0));
1848 instExpCopy->tempCount = instExp->tempCount;
1850 ident = MkIdentifier(thisMember->name);
1853 struct Expression * memberExp;
1854 unsigned int freeMemberExp = 0;
1856 if(thisMember && thisMember->isProperty && ((struct __ecereNameSpace__ecere__com__Property *)thisMember)->conversion)
1858 if(member->identifiers && (*member->identifiers).count > 1)
1860 struct Identifier * id = (*member->identifiers).first;
1862 memberExp = MkExpMember(instExpCopy, id);
1863 for(id = id->next; id; id = id->next)
1864 memberExp = MkExpMember(memberExp, id);
1867 memberExp = MkExpMember(instExpCopy, ident);
1868 if(member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
1870 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
1871 setExp = MkExpOp(memberExp, '=', member->initializer->__anon1.exp);
1872 member->initializer->__anon1.exp = (((void *)0));
1873 FreeInitializer(member->initializer);
1874 member->initializer = (((void *)0));
1880 memberExp->loc = inst->loc;
1881 if(member->identifiers)
1882 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*member->identifiers));
1884 setExp->loc = inst->loc;
1885 FreeType(instExpCopy->expType);
1886 instExpCopy->expType = instExp->expType;
1887 if(instExp->expType)
1888 instExp->expType->refCount++;
1891 ProcessExpressionType(setExp);
1892 ProcessExpression(setExp);
1893 ListAdd(list, setExp);
1896 FreeExpression(memberExp);
1904 return fullSet || convert;
1907 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
1909 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
1911 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
1913 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
1915 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
1917 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
1919 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
1921 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
1923 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TopoEdge;
1925 struct __ecereNameSpace__ecere__com__Module
1927 struct __ecereNameSpace__ecere__com__Instance * application;
1928 struct __ecereNameSpace__ecere__sys__OldList classes;
1929 struct __ecereNameSpace__ecere__sys__OldList defines;
1930 struct __ecereNameSpace__ecere__sys__OldList functions;
1931 struct __ecereNameSpace__ecere__sys__OldList modules;
1932 struct __ecereNameSpace__ecere__com__Instance * prev;
1933 struct __ecereNameSpace__ecere__com__Instance * next;
1939 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1940 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1941 } __attribute__ ((gcc_struct));
1943 static void CreateInstancesBody()
1945 if(inCompiler && !createInstancesBody)
1947 char registerName[1024], moduleName[274];
1948 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1949 struct Declarator * declarator;
1951 createInstancesBody = MkCompoundStmt((((void *)0)), MkList());
1952 createInstancesBody->__anon1.compound.context = __extension__ ({
1953 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1955 __ecereInstance1->parent = globalContext, __ecereInstance1;
1957 specifiers = MkList();
1958 ListAdd(specifiers, MkSpecifier(VOID));
1959 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1960 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1961 FixModuleName(moduleName);
1962 sprintf(registerName, "__ecereCreateModuleInstances_%s", moduleName);
1963 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), (((void *)0)));
1965 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0);
1967 ProcessFunctionBody(function, createInstancesBody);
1968 ListAdd(ast, createInstancesExternal = MkExternalFunction(function));
1970 destroyInstancesBody = MkCompoundStmt((((void *)0)), MkList());
1971 destroyInstancesBody->__anon1.compound.context = __extension__ ({
1972 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1974 __ecereInstance1->parent = globalContext, __ecereInstance1;
1976 specifiers = MkList();
1977 ListAdd(specifiers, MkSpecifier(VOID));
1978 sprintf(registerName, "__ecereDestroyModuleInstances_%s", moduleName);
1979 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), (((void *)0)));
1981 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0);
1983 ProcessFunctionBody(function, destroyInstancesBody);
1984 ListAdd(ast, destroyInstancesExternal = MkExternalFunction(function));
1989 void DeclareClass(struct External * neededFor, struct Symbol * classSym, const char * className)
1991 if(classSym && classSym->notYetDeclared)
1993 if(!classSym->mustRegister)
1995 if(!classSym->_import)
1997 if(!classSym->module)
1998 classSym->module = mainModule;
1999 if(!classSym->module)
2001 classSym->_import = __extension__ ({
2002 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
2004 __ecereInstance1->isRemote = classSym->__anon1.registered ? classSym->__anon1.registered->isRemote : 0, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(classSym->string), __ecereInstance1;
2006 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->module->classes, classSym->_import);
2008 classSym->_import->itself = 1;
2010 classSym->notYetDeclared = 0;
2011 if(!classSym->__anon2.__anon1.pointerExternal && inCompiler)
2013 struct Declaration * decl;
2014 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
2015 struct Declarator * d;
2017 specifiers = MkList();
2018 declarators = MkList();
2019 ListAdd(specifiers, MkSpecifier(EXTERN));
2020 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
2021 d = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(className)));
2022 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
2023 decl = MkDeclaration(specifiers, declarators);
2024 classSym->__anon2.__anon1.pointerExternal = MkExternalDeclaration(decl);
2025 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), classSym->__anon2.__anon1.pointerExternal);
2026 DeclareStruct(classSym->__anon2.__anon1.pointerExternal, "ecere::com::Class", 0, 1);
2029 if(inCompiler && classSym && classSym->__anon2.__anon1.pointerExternal && neededFor)
2030 __ecereMethod_External_CreateUniqueEdge(neededFor, classSym->__anon2.__anon1.pointerExternal, 0);
2033 void __ecereUnregisterModule_pass16(struct __ecereNameSpace__ecere__com__Instance * module)
2038 static void ProcessStatement(struct Statement * stmt);
2040 static void ProcessFunction(struct FunctionDefinition * function)
2044 yylloc = function->loc;
2045 ProcessStatement(function->body);
2049 static void ProcessInstantiation(struct Instantiation * inst)
2051 if(inst->members && (*inst->members).first)
2053 struct MembersInit * members;
2055 for(members = (*inst->members).first; members; members = members->next)
2057 if(members->type == 0)
2059 if(members->__anon1.dataMembers)
2061 struct MemberInit * member;
2063 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2064 ProcessMemberInitData(member);
2067 else if(members->type == 1)
2069 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
2075 static void ProcessDeclaration(struct Declaration * decl);
2077 static void ProcessStatement(struct Statement * stmt)
2083 if(stmt->__anon1.labeled.stmt)
2084 ProcessStatement(stmt->__anon1.labeled.stmt);
2087 if(stmt->__anon1.caseStmt.exp)
2088 ProcessExpression(stmt->__anon1.caseStmt.exp);
2089 if(stmt->__anon1.caseStmt.stmt)
2090 ProcessStatement(stmt->__anon1.caseStmt.stmt);
2094 if(stmt->__anon1.compound.context)
2096 struct Declaration * decl;
2097 struct Statement * s;
2098 struct Statement * prevCompound = curCompound;
2099 struct Context * prevContext = curContext;
2101 if(!stmt->__anon1.compound.isSwitch)
2104 curContext = stmt->__anon1.compound.context;
2106 if(stmt->__anon1.compound.declarations)
2108 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
2109 ProcessDeclaration(decl);
2111 if(stmt->__anon1.compound.statements)
2113 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
2115 ProcessStatement(s);
2118 curCompound = prevCompound;
2119 curContext = prevContext;
2125 struct Expression * exp;
2127 if(stmt->__anon1.expressions)
2129 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
2131 ProcessExpression(exp);
2138 struct Expression * exp;
2140 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2141 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
2143 ProcessExpression(exp);
2145 if(stmt->__anon1.ifStmt.stmt)
2146 ProcessStatement(stmt->__anon1.ifStmt.stmt);
2147 if(stmt->__anon1.ifStmt.elseStmt)
2148 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
2153 struct Expression * exp;
2155 ((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2156 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
2157 ProcessExpression(exp);
2158 ProcessStatement(stmt->__anon1.switchStmt.stmt);
2163 if(stmt->__anon1.whileStmt.exp)
2165 struct Expression * exp;
2167 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2168 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
2170 ProcessExpression(exp);
2173 if(stmt->__anon1.whileStmt.stmt)
2174 ProcessStatement(stmt->__anon1.whileStmt.stmt);
2179 if(stmt->__anon1.doWhile.exp)
2181 struct Expression * exp;
2183 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2184 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
2186 ProcessExpression(exp);
2189 if(stmt->__anon1.doWhile.stmt)
2190 ProcessStatement(stmt->__anon1.doWhile.stmt);
2195 struct Expression * exp;
2197 if(stmt->__anon1.forStmt.init)
2198 ProcessStatement(stmt->__anon1.forStmt.init);
2199 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
2201 ((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);
2203 if(stmt->__anon1.forStmt.check)
2204 ProcessStatement(stmt->__anon1.forStmt.check);
2205 if(stmt->__anon1.forStmt.increment)
2207 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
2208 ProcessExpression(exp);
2210 if(stmt->__anon1.forStmt.stmt)
2211 ProcessStatement(stmt->__anon1.forStmt.stmt);
2222 struct Expression * exp;
2224 if(stmt->__anon1.expressions && (*stmt->__anon1.expressions).last)
2226 ((struct Expression *)(*stmt->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2227 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
2229 ProcessExpression(exp);
2236 ProcessDeclaration(stmt->__anon1.decl);
2241 struct AsmField * field;
2243 if(stmt->__anon1.asmStmt.inputFields)
2245 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
2246 if(field->expression)
2247 ProcessExpression(field->expression);
2249 if(stmt->__anon1.asmStmt.outputFields)
2251 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
2252 if(field->expression)
2253 ProcessExpression(field->expression);
2255 if(stmt->__anon1.asmStmt.clobberedFields)
2257 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
2258 if(field->expression)
2259 ProcessExpression(field->expression);
2268 typedef union YYSTYPE
2273 struct Identifier * id;
2274 struct Expression * exp;
2275 struct Specifier * specifier;
2276 struct __ecereNameSpace__ecere__sys__OldList * list;
2277 struct Enumerator * enumerator;
2278 struct Declarator * declarator;
2279 struct Pointer * pointer;
2280 struct Initializer * initializer;
2281 struct InitDeclarator * initDeclarator;
2282 struct TypeName * typeName;
2283 struct Declaration * declaration;
2284 struct Statement * stmt;
2285 struct FunctionDefinition * function;
2286 struct External * external;
2287 struct Context * context;
2288 struct AsmField * asmField;
2289 struct Attrib * attrib;
2290 struct ExtDecl * extDecl;
2291 struct Attribute * attribute;
2292 struct Instantiation * instance;
2293 struct MembersInit * membersInit;
2294 struct MemberInit * memberInit;
2295 struct ClassFunction * classFunction;
2296 struct ClassDefinition * _class;
2297 struct ClassDef * classDef;
2298 struct PropertyDef * prop;
2300 struct Symbol * symbol;
2301 struct PropertyWatch * propertyWatch;
2302 struct TemplateParameter * templateParameter;
2303 struct TemplateArgument * templateArgument;
2304 struct TemplateDatatype * templateDatatype;
2305 struct DBTableEntry * dbtableEntry;
2306 struct DBIndexItem * dbindexItem;
2307 struct DBTableDef * dbtableDef;
2308 } __attribute__ ((gcc_struct)) YYSTYPE;
2310 extern YYSTYPE yylval;
2314 struct ClassDef * prev;
2315 struct ClassDef * next;
2316 struct Location loc;
2320 struct Declaration * decl;
2321 struct ClassFunction * function;
2322 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
2323 struct PropertyDef * propertyDef;
2324 struct PropertyWatch * propertyWatch;
2326 struct Identifier * defaultProperty;
2329 struct Identifier * id;
2330 struct Initializer * initializer;
2331 } __attribute__ ((gcc_struct)) __anon1;
2332 } __attribute__ ((gcc_struct)) __anon1;
2335 } __attribute__ ((gcc_struct));
2337 static void ProcessSpecifier(struct Specifier * spec)
2349 struct Enumerator * e;
2351 if(spec->__anon1.__anon2.list)
2353 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
2356 ProcessExpression(e->exp);
2364 if(spec->__anon1.__anon2.definitions)
2366 struct ClassDef * def;
2368 for(def = (*spec->__anon1.__anon2.definitions).first; def; def = def->next)
2370 if(def->type == 2 && def->__anon1.decl && def->__anon1.decl->type == 0)
2371 ProcessDeclaration(def->__anon1.decl);
2379 void ProcessInstantiations()
2381 struct External * external;
2383 for(external = (*ast).first; external; external = external->next)
2385 curExternal = external;
2386 if(external->type == 1)
2388 if(external->__anon1.declaration)
2390 unsigned int isInstance = external->__anon1.declaration->type == 2;
2391 struct Symbol * sym = isInstance ? FindClass(external->__anon1.declaration->__anon1.inst->_class->__anon1.__anon1.name) : (((void *)0));
2393 ProcessDeclaration(external->__anon1.declaration);
2396 struct TopoEdge * e, * next;
2398 for(e = ((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)external->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->first; e; e = next)
2400 struct External * from = e->from;
2403 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)from->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
2405 unsigned int reroute = 1;
2407 if(sym && sym->__anon1.registered && sym->__anon1.registered->type == 1)
2409 else if(from->type == 1 && from->__anon1.declaration && (!from->__anon1.declaration->__anon1.__anon1.declarators || !(*from->__anon1.declaration->__anon1.__anon1.declarators).count) && from->__anon1.declaration->__anon1.__anon1.specifiers)
2411 struct Specifier * spec = (((void *)0));
2413 for(spec = (*from->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
2415 if(spec->type == 3 || spec->type == 4)
2418 if(sym->__anon1.registered && spec && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
2420 char className[1024];
2421 struct __ecereNameSpace__ecere__com__Class * c = sym->__anon1.registered;
2423 strcpy(className, "__ecereClass_");
2424 if(c->type == 5 && c->templateClass)
2425 FullClassNameCat(className, c->templateClass->name, 1);
2427 FullClassNameCat(className, c->name, 1);
2428 if(!strcmp(c->name, spec->__anon1.__anon2.id->string))
2434 unsigned int skip = 0;
2436 e->to = createInstancesExternal;
2437 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
2438 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = external->incoming;
2440 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2441 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(external->incoming, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
2443 struct TopoEdge * i;
2444 struct __ecereNameSpace__ecere__com__Instance * __internalLinkList = createInstancesExternal->incoming;
2446 for(i = ((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)__internalLinkList + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->first; i; i = (struct TopoEdge *)((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
2447 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = __internalLinkList;
2449 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2450 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext])(__internalLinkList, (struct __ecereNameSpace__ecere__com__IteratorPointer *)i))
2455 if(i->breakable && !e->breakable)
2458 createInstancesExternal->nonBreakableIncoming++;
2466 external->nonBreakableIncoming--;
2467 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
2468 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = e->from->outgoing;
2470 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2471 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(e->from->outgoing, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
2472 ((e ? (__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
2476 ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))__extension__ ({
2477 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = createInstancesExternal->incoming;
2479 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2480 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(createInstancesExternal->incoming, (uint64)(uintptr_t)(e));
2483 external->nonBreakableIncoming--;
2484 createInstancesExternal->nonBreakableIncoming++;
2493 else if(external->type == 0)
2495 ProcessFunction(external->__anon1.function);
2497 else if(external->type == 2)
2499 struct ClassDefinition * _class = external->__anon1._class;
2501 if(_class->definitions)
2503 struct ClassDef * def;
2505 for(def = (*_class->definitions).first; def; def = def->next)
2509 curExternal = def->__anon1.function->declarator ? def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal : external;
2510 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
2512 else if(def->type == 2 && def->__anon1.decl->type == 2)
2514 ProcessInstantiation(def->__anon1.decl->__anon1.inst);
2516 else if(def->type == 1 && def->__anon1.defProperties)
2518 struct MemberInit * defProperty;
2519 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
2521 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2522 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
2524 ProcessMemberInitData(defProperty);
2526 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2527 FreeSymbol(thisSymbol);
2529 else if(def->type == 3 && def->__anon1.propertyDef)
2531 struct PropertyDef * prop = def->__anon1.propertyDef;
2532 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
2534 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2537 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
2538 ProcessStatement(prop->setStmt);
2542 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
2543 ProcessStatement(prop->getStmt);
2547 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
2548 ProcessStatement(prop->issetStmt);
2550 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2551 FreeSymbol(thisSymbol);
2553 else if(def->type == 4 && def->__anon1.propertyWatch)
2555 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
2556 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
2558 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2559 if(propertyWatch->compound)
2561 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2562 curExternal = (((void *)0));
2563 ProcessStatement(propertyWatch->compound);
2565 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2566 FreeSymbol(thisSymbol);
2574 void __ecereRegisterModule_pass16(struct __ecereNameSpace__ecere__com__Instance * module)
2576 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
2578 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareClass", "void DeclareClass(External neededFor, Symbol classSym, const char * className)", DeclareClass, module, 1);
2579 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionInstPass", "void ProcessExpressionInstPass(Expression exp)", ProcessExpressionInstPass, module, 2);
2580 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiations", "void ProcessInstantiations(void)", ProcessInstantiations, module, 1);
2583 static unsigned int ProcessBracketInst_DataMember(struct __ecereNameSpace__ecere__com__DataMember * parentMember, struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list, struct __ecereNameSpace__ecere__com__DataMember * namedParentMember, unsigned int parentMemberSet);
2585 static unsigned int ProcessBracketInst(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list)
2587 static int recursionCount = 0;
2588 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2589 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
2592 if(recursionCount > 500)
2595 while(_class != classSym->__anon1.registered)
2597 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
2598 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
2600 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
2602 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
2604 if(!dataMember->isProperty && !dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
2606 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2608 if(!ProcessBracketInst_DataMember(dataMember, inst, subList ? subList : list, dataMember, 0))
2611 FreeList(subList, (void *)(FreeInitializer));
2615 if(dataMember->type == 2 || (subList && (*subList).count))
2617 struct Initializer * init = MkInitializerList(subList);
2620 sprintf(id, "__anon%d", anonID);
2621 init->id = MkIdentifier(id);
2622 ListAdd(list, init);
2625 (__ecereNameSpace__ecere__com__eSystem_Delete(subList), subList = 0);
2630 struct MembersInit * members;
2631 struct MemberInit * member = (((void *)0));
2632 unsigned int found = 0;
2634 if(inst->members && (*inst->members).first)
2636 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
2637 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
2638 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
2639 int subMemberStackPos = 0;
2641 for(members = (*inst->members).first; members; members = members->next)
2643 if(members->type == 0)
2645 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2647 struct Identifier * firstID = member->identifiers ? (*member->identifiers).first : (((void *)0));
2651 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
2652 int _subMemberStackPos = 0;
2653 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
2656 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
2659 curMember = thisMember;
2660 curClass = curMember->_class;
2661 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
2662 subMemberStackPos = _subMemberStackPos;
2664 if(curMember == dataMember)
2666 if(dataMember->isProperty)
2668 if(!((struct __ecereNameSpace__ecere__com__Property *)dataMember)->Set)
2670 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No set defined for property %s\n", (((void *)0))), dataMember->name);
2676 if((*member->identifiers).count > 1 && member->initializer && member->initializer->type == 0)
2678 struct __ecereNameSpace__ecere__sys__OldList * partList = MkList();
2679 struct Specifier * spec;
2680 struct MembersInit * nextMembers;
2681 struct MemberInit * next = member->next;
2682 struct Symbol * symbol;
2684 if(!dataMember->dataType)
2685 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
2686 symbol = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2687 spec = _MkSpecifierName(dataMember->dataTypeString, symbol, (((void *)0)));
2688 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*member->identifiers), firstID);
2689 ListAdd(partList, MkMemberInit(member->identifiers, MkInitializerAssignment(member->initializer->__anon1.exp)));
2690 for(nextMembers = members; nextMembers; nextMembers = nextMembers->next)
2692 if(!nextMembers->__anon1.dataMembers)
2694 if(members != nextMembers)
2695 next = (*nextMembers->__anon1.dataMembers).first;
2696 if(nextMembers->type == 0)
2698 struct MemberInit * nextMember;
2700 for(nextMember = next; nextMember; nextMember = next, next = nextMember ? nextMember->next : (((void *)0)))
2702 struct Identifier * nextID = (*nextMember->identifiers).first;
2704 if(nextMember->identifiers && (*nextMember->identifiers).count > 1 && !strcmp(firstID->string, nextID->string))
2706 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMembers->__anon1.dataMembers), nextMember);
2707 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMember->identifiers), nextID);
2708 ListAdd(partList, nextMember);
2709 FreeIdentifier(nextID);
2714 member->initializer->__anon1.exp = MkExpInstance(MkInstantiation(spec, (((void *)0)), MkListOne(MkMembersInitList(partList))));
2715 FreeIdentifier(firstID);
2716 member->identifiers = (((void *)0));
2724 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
2725 if(curMember == dataMember)
2727 if(dataMember->isProperty)
2729 if(!((struct __ecereNameSpace__ecere__com__Property *)dataMember)->Set)
2731 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No set defined for property %s\n", (((void *)0))), dataMember->name);
2747 if(dataMember->isProperty)
2749 if(member && member->initializer && member->initializer->type == 0)
2751 if(member->initializer->__anon1.exp->type == 1 && member->initializer->__anon1.exp->expType && member->initializer->__anon1.exp->expType->__anon1._class && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered->type == 1)
2753 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2755 ProcessBracketInst(member->initializer->__anon1.exp->__anon1.instance, subList);
2756 FreeExpression(member->initializer->__anon1.exp);
2757 member->initializer->__anon1.exp = (((void *)0));
2758 ListAdd(list, MkInitializerList(subList));
2762 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
2763 ProcessExpression(member->initializer->__anon1.exp);
2764 ListAdd(list, MkInitializerAssignment(CopyExpression(member->initializer->__anon1.exp)));
2766 member->takeOutExp = 1;
2768 else if(member && member->initializer && member->initializer->type == 1)
2770 ListAdd(list, member->initializer);
2771 member->initializer = (((void *)0));
2773 else if(dataMember && dataMember->dataTypeString)
2775 struct Symbol * classSym;
2777 if(!dataMember->dataType)
2778 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
2779 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2780 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2782 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2783 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
2784 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
2786 ProcessBracketInst(inst, subList);
2788 ListAdd(list, MkInitializerList(subList));
2790 else if(dataMember->dataType->kind == 12)
2792 struct Type * t = dataMember->dataType->__anon1.type;
2793 struct Initializer * inner = MkInitializerAssignment((((void *)0))), * i = inner;
2795 while(t && t->kind == 12)
2797 i = MkInitializerList(MkListOne(i));
2798 t = t->__anon1.type;
2800 if(t && t->kind == 8 && t->__anon1._class && t->__anon1._class->__anon1.registered && t->__anon1._class->__anon1.registered->type == 1)
2802 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2803 struct Specifier * spec = _MkSpecifierName(t->__anon1._class->__anon1.registered->name, classSym, (((void *)0)));
2804 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
2806 ProcessBracketInst(inst, subList);
2809 inner->__anon1.list = subList;
2812 inner->__anon1.exp = MkExpConstant("0");
2813 ListAdd(list, MkInitializerList(MkListOne(i)));
2816 ListAdd(list, MkInitializerAssignment(MkExpConstant("0")));
2821 if(inst->members && (*inst->members).first)
2823 struct MembersInit * members;
2824 struct MemberInit * member = (((void *)0));
2826 for(members = (*inst->members).first; members; members = members->next)
2828 if(members->type == 0)
2830 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2832 if(member->takeOutExp)
2834 FreeInitializer(member->initializer);
2835 member->initializer = (((void *)0));
2845 static void ProcessExpression(struct Expression * exp)
2853 struct Instantiation * inst = exp->__anon1.instance;
2855 if(inCompiler && inst->_class)
2857 char className[1024];
2858 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2859 struct Expression * instExp;
2861 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
2865 struct __ecereNameSpace__ecere__sys__OldList list =
2870 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2871 ProcessExpression(inst->exp);
2873 exp->__anon1.op.op = '=';
2874 exp->__anon1.op.exp1 = inst->exp;
2875 exp->__anon1.op.exp2 = list.first;
2876 inst->exp = (((void *)0));
2880 struct Type * expType = exp->expType;
2881 struct Expression * prev = exp->prev, * next = exp->next;
2882 struct __ecereNameSpace__ecere__sys__OldList list =
2887 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2888 FreeType(exp->destType);
2889 *exp = *(struct Expression *)list.first;
2891 struct Expression * firstExp = list.first;
2893 ((firstExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)firstExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(firstExp)) : 0), firstExp = 0);
2895 FreeType(exp->destType);
2896 exp->destType = expType;
2901 else if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
2905 struct __ecereNameSpace__ecere__sys__OldList list =
2909 struct Expression * e;
2911 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2912 ProcessExpression(inst->exp);
2914 exp->__anon1.op.op = '=';
2915 exp->__anon1.op.exp1 = inst->exp;
2916 exp->__anon1.op.exp2 = list.first;
2917 inst->exp = (((void *)0));
2918 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, list.first);
2919 while((e = list.first))
2921 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2927 struct Expression * prev = exp->prev, * next = exp->next;
2928 struct Type * expType = exp->expType;
2929 struct __ecereNameSpace__ecere__sys__OldList list =
2934 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2937 struct Expression * e = list.first;
2939 FreeType(exp->destType);
2941 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2942 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
2943 exp->expType = expType;
2946 while((e = list.first))
2948 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2955 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString("0");
2959 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2964 exp->__anon1.list = MkList();
2965 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0);
2966 ProcessExpression(inst->exp);
2967 if(!(*exp->__anon1.list).count)
2970 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
2975 struct Declaration * decl;
2976 struct Declaration * dummyDecl;
2979 dummyDecl = MkDeclaration((((void *)0)), (((void *)0)));
2980 if(!curCompound->__anon1.compound.declarations)
2981 curCompound->__anon1.compound.declarations = MkList();
2982 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), dummyDecl);
2983 sprintf(className, "__simpleStruct%d", curContext->simpleID++);
2985 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2987 if(inst->isConstant && ProcessBracketInst(inst, list))
2989 decl = MkDeclaration(MkList(), MkList());
2990 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
2991 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(className)), MkInitializerList(list)));
2993 exp->__anon1.__anon1.identifier = MkIdentifier(className);
2997 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free((&*list), (((void *)0)));
2998 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
2999 decl = MkDeclarationInst(MkInstantiation(CopySpecifier(inst->_class), MkExpIdentifier(MkIdentifier(className)), (((void *)0))));
3001 exp->__anon1.list = MkList();
3002 instExp = QMkExpId(className);
3003 instExp->loc = exp->loc;
3004 instExp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
3005 decl->__anon1.inst->fullSet = ProcessInstMembers(inst, instExp, exp->__anon1.list, 0);
3006 ListAdd(exp->__anon1.list, instExp);
3009 FreeType(exp->expType);
3010 exp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
3012 void * prev = dummyDecl->prev, * next = dummyDecl->next;
3015 dummyDecl->prev = prev;
3016 dummyDecl->next = next;
3017 ((decl ? (__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
3020 ProcessDeclaration(decl);
3026 struct Expression * newCall;
3028 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && (classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->fixed : classSym->__anon1.registered->fixed))
3031 struct __ecereNameSpace__ecere__com__Class * c = classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass : classSym->__anon1.registered;
3032 struct Expression * e = MkExpClassSize(MkSpecifierName(c->name));
3034 ProcessExpressionType(e);
3035 sprintf(size, "%d", c->structSize);
3036 newCall = MkExpCall(QMkExpId("ecere::com::eSystem_New0"), MkListOne(e));
3037 newCall->byReference = 1;
3041 strcpy(className, "__ecereClass_");
3042 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && classSym->__anon1.registered->templateClass)
3044 classSym = FindClass(classSym->__anon1.registered->templateClass->fullName);
3045 FullClassNameCat(className, classSym->string, 1);
3048 FullClassNameCat(className, inst->_class->__anon1.__anon1.name, 1);
3049 DeclareClass(curExternal, classSym, className);
3050 newCall = MkExpCall(QMkExpId("ecere::com::eInstance_New"), MkListOne(QMkExpId(className)));
3051 newCall->usage = exp->usage;
3052 ProcessExpressionType(newCall);
3053 if(newCall->expType && exp->expType)
3054 newCall->expType->passAsTemplate = exp->expType->passAsTemplate;
3055 newCall->byReference = 1;
3059 if(inst->members && (*inst->members).first)
3062 exp->__anon1.list = MkList();
3065 ListAdd(exp->__anon1.list, MkExpOp(inst->exp, '=', newCall));
3068 FreeExpression(newCall);
3069 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0);
3071 FreeExpression(inst->exp);
3076 exp->__anon1.op.op = '=';
3077 exp->__anon1.op.exp1 = inst->exp;
3078 exp->__anon1.op.exp2 = newCall;
3079 ProcessExpression(inst->exp);
3081 inst->exp = (((void *)0));
3085 if(inst->members && (*inst->members).first)
3087 int __simpleStruct0;
3088 char ecereTemp[100];
3089 struct MembersInit * members;
3090 int tempCount = exp->tempCount;
3091 struct __ecereNameSpace__ecere__sys__OldList * expList;
3093 for(members = (*inst->members).first; members; members = members->next)
3095 if(members->type == 0 && members->__anon1.dataMembers)
3097 struct MemberInit * member;
3099 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
3101 if(member->initializer && member->initializer->type == 0)
3103 int __simpleStruct0;
3105 ProcessMemberInitData(member);
3106 tempCount = (__simpleStruct0 = member->initializer->__anon1.exp->tempCount, (tempCount > __simpleStruct0) ? tempCount : __simpleStruct0);
3112 tempCount = ((tempCount > declTempCount) ? tempCount : declTempCount);
3114 curExternal->__anon1.function->tempCount = (__simpleStruct0 = curExternal->__anon1.function->tempCount, (__simpleStruct0 > tempCount) ? __simpleStruct0 : tempCount);
3115 sprintf(ecereTemp, "__ecereInstance%d", tempCount);
3117 exp->__anon1.compound = MkCompoundStmt((((void *)0)), (((void *)0)));
3118 exp->__anon1.compound->__anon1.compound.context = PushContext();
3119 exp->__anon1.compound->__anon1.compound.context->simpleID = exp->__anon1.compound->__anon1.compound.context->parent->simpleID;
3120 exp->__anon1.compound->__anon1.compound.declarations = MkListOne(QMkDeclaration(inst->_class->__anon1.__anon1.name, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(ecereTemp)), MkInitializerAssignment(newCall))));
3121 exp->__anon1.compound->__anon1.compound.statements = MkListOne(MkExpressionStmt((expList = MkList())));
3122 instExp = QMkExpId(ecereTemp);
3123 instExp->tempCount = tempCount;
3124 instExp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
3125 instExp->byReference = 1;
3126 ProcessInstMembers(inst, instExp, expList, 0);
3127 FreeExpression(instExp);
3130 struct Expression * tmpExp = QMkExpId(ecereTemp);
3132 tmpExp->byReference = 1;
3133 ListAdd(expList, tmpExp);
3135 exp->tempCount = tempCount;
3137 declTempCount = ((declTempCount > tempCount) ? declTempCount : tempCount);
3138 PopContext(exp->__anon1.compound->__anon1.compound.context);
3142 struct Expression * prev = exp->prev, * next = exp->next;
3144 FreeType(newCall->destType);
3145 FreeType(newCall->expType);
3146 newCall->destType = exp->destType;
3147 newCall->expType = exp->expType;
3151 ((newCall ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newCall) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newCall)) : 0), newCall = 0);
3159 ProcessInstantiation(inst);
3168 ProcessExpression(exp->__anon1._new.size);
3172 ProcessExpression(exp->__anon1._renew.size);
3173 ProcessExpression(exp->__anon1._renew.exp);
3177 switch(exp->__anon1.op.op)
3180 if(exp->__anon1.op.exp2)
3181 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3182 if(exp->__anon1.op.exp1)
3183 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(1)) << 1);
3195 if(exp->__anon1.op.exp2)
3196 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3197 if(exp->__anon1.op.exp1)
3198 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(1)) << 1);
3202 if(exp->__anon1.op.exp1)
3203 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(1)) << 1);
3205 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2)
3207 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
3208 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3214 if(exp->__anon1.op.exp1)
3216 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
3220 if(exp->__anon1.op.exp2)
3221 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3237 if(exp->__anon1.op.exp1)
3238 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
3239 if(exp->__anon1.op.exp2)
3240 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3243 if(exp->__anon1.op.exp1)
3245 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp1->destType && exp->__anon1.op.exp1->destType->passAsTemplate && exp->__anon1.op.exp1->expType && !exp->__anon1.op.exp1->expType->passAsTemplate && !((unsigned int)((exp->__anon1.op.exp1->usage & 0x2) >> 1)))
3247 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
3249 CopyTypeInto(type, exp->__anon1.op.exp1->destType);
3250 type->passAsTemplate = 0;
3251 FreeType(exp->__anon1.op.exp1->destType);
3252 exp->__anon1.op.exp1->destType = type;
3254 ProcessExpression(exp->__anon1.op.exp1);
3256 if(exp->__anon1.op.exp2)
3258 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->destType && exp->__anon1.op.exp2->destType->passAsTemplate && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->passAsTemplate && !((unsigned int)((exp->__anon1.op.exp1->usage & 0x2) >> 1)))
3260 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
3262 CopyTypeInto(type, exp->__anon1.op.exp2->destType);
3263 type->passAsTemplate = 0;
3264 FreeType(exp->__anon1.op.exp2->destType);
3265 exp->__anon1.op.exp2->destType = type;
3267 if(exp->__anon1.op.exp1)
3268 exp->__anon1.op.exp2->tempCount = exp->__anon1.op.exp1->tempCount;
3269 ProcessExpression(exp->__anon1.op.exp2);
3276 struct Expression * e;
3278 for(e = (*exp->__anon1.list).first; e; e = e->next)
3280 int __simpleStruct2, __simpleStruct3;
3281 int __simpleStruct0, __simpleStruct1;
3283 e->tempCount = (__simpleStruct0 = e->tempCount, __simpleStruct1 = exp->tempCount, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
3286 e->usage |= (exp->usage & ((((unsigned int)(1)) | (((unsigned int)(1)) << 2))));
3288 ProcessExpression(e);
3289 exp->tempCount = (__simpleStruct2 = exp->tempCount, __simpleStruct3 = e->tempCount, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
3295 struct Expression * e;
3297 exp->__anon1.index.exp->usage = (exp->__anon1.index.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3298 ProcessExpression(exp->__anon1.index.exp);
3299 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
3302 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3303 ProcessExpression(e);
3305 exp->tempCount = exp->__anon1.index.exp->tempCount;
3310 struct Expression * e;
3312 ProcessExpression(exp->__anon1.call.exp);
3313 if(exp->__anon1.call.arguments)
3315 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
3317 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3318 e->usage = (e->usage & ~0x4) | (((unsigned int)(1)) << 2);
3319 ProcessExpression(e);
3326 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3327 if(exp->__anon1.member.memberType == 3 && exp->__anon1.member.exp->expType && exp->__anon1.member.exp->expType->thisClassFrom && exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && !__ecereNameSpace__ecere__com__eClass_IsDerived(exp->__anon1.member.exp->expType->thisClassFrom, exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered))
3328 exp->__anon1.member.exp->expType->passAsTemplate = 1;
3329 ProcessExpression(exp->__anon1.member.exp);
3330 if(!exp->__anon1.member.memberType)
3332 struct Type * type = exp->__anon1.member.exp->expType;
3334 if((type && type->kind == 8 && exp->__anon1.member.member))
3336 struct __ecereNameSpace__ecere__com__Class * _class = (exp->__anon1.member.member->_class && exp->__anon1.member.member->classSym) ? exp->__anon1.member.member->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)));
3337 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
3338 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
3339 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
3340 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
3342 if(exp->__anon1.member.thisPtr)
3344 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
3346 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
3350 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, (((void *)0)));
3352 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, (((void *)0)), (((void *)0)), (((void *)0)));
3353 if(!prop && !member)
3355 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, (((void *)0)));
3358 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
3360 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
3364 if(!prop && !member && !method)
3365 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, privateModule);
3366 if(!prop && !member && !method)
3368 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
3372 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
3375 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
3380 exp->__anon1.member.memberType = 1;
3382 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
3383 FreeType(exp->expType);
3384 exp->expType = prop->dataType;
3386 prop->dataType->refCount++;
3390 exp->__anon1.member.memberType = 2;
3391 if(!method->dataType)
3392 ProcessMethodType(method);
3393 FreeType(exp->expType);
3394 exp->expType = method->dataType;
3395 if(method->dataType)
3396 method->dataType->refCount++;
3400 exp->__anon1.member.memberType = 3;
3401 DeclareStruct(curExternal, _class->fullName, 0, 1);
3402 if(!member->dataType)
3403 member->dataType = ProcessTypeString(member->dataTypeString, 0);
3404 FreeType(exp->expType);
3405 exp->expType = member->dataType;
3406 if(member->dataType)
3407 member->dataType->refCount++;
3411 exp->__anon1.member.memberType = 4;
3412 FreeType(exp->expType);
3413 exp->expType = MkClassType(revConvert->_class->fullName);
3423 exp->__anon1.cast.exp->usage |= exp->usage;
3424 ProcessExpression(exp->__anon1.cast.exp);
3429 struct Expression * e;
3431 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3432 exp->__anon1.cond.cond->usage = (exp->__anon1.cond.cond->usage & ~0x1) | (((unsigned int)(1)) << 0);
3433 ProcessExpression(exp->__anon1.cond.cond);
3434 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
3436 if(!e->next && ((unsigned int)((exp->usage & 0x1) >> 0)))
3437 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3438 ProcessExpression(e);
3440 if(exp->__anon1.cond.elseExp)
3442 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3443 exp->__anon1.cond.elseExp->usage = (exp->__anon1.cond.elseExp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3444 ProcessExpression(exp->__anon1.cond.elseExp);
3450 if(exp->__anon1.compound->__anon1.compound.statements && ((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->type == 3 && ((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions && (*((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last)
3452 ((struct Expression *)(*((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last)->usage = exp->usage;
3454 ProcessStatement(exp->__anon1.compound);
3459 ProcessExpression(exp->__anon1.vaArg.exp);
3464 ProcessInitializer(exp->__anon1.initializer.initializer);
3468 CheckTemplateTypes(exp);
3471 static unsigned int ProcessBracketInst_DataMember(struct __ecereNameSpace__ecere__com__DataMember * parentMember, struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list, struct __ecereNameSpace__ecere__com__DataMember * namedParentMember, unsigned int parentMemberSet)
3473 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
3474 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
3475 unsigned int someMemberSet = 0;
3478 for(dataMember = parentMember->members.first; dataMember; dataMember = dataMember->next)
3480 struct MembersInit * members;
3481 struct MemberInit * member = (((void *)0));
3483 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
3485 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3487 if(!ProcessBracketInst_DataMember(dataMember, inst, subList ? subList : list, dataMember->name ? dataMember : namedParentMember, someMemberSet || parentMemberSet || dataMember->prev))
3490 FreeList(subList, (void *)(FreeInitializer));
3493 if(subList && (*subList).count)
3495 struct Initializer * init = MkInitializerList(subList);
3498 sprintf(id, "__anon%d", anonID);
3499 init->id = MkIdentifier(id);
3500 ListAdd(list, init);
3507 (__ecereNameSpace__ecere__com__eSystem_Delete(subList), subList = 0);
3513 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
3514 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
3515 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
3516 int subMemberStackPos = 0;
3517 unsigned int found = 0;
3519 if(inst->members && (*inst->members).first)
3521 for(members = (*inst->members).first; members; members = members->next)
3523 if(members->type == 0)
3525 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
3527 if(member->identifiers)
3529 struct Identifier * firstID = (*member->identifiers).first;
3530 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
3531 int _subMemberStackPos = 0;
3532 struct __ecereNameSpace__ecere__com__DataMember * thisMember;
3534 thisMember = firstID ? (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule) : (((void *)0));
3535 if(!thisMember && firstID)
3536 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
3537 if(thisMember && thisMember->memberAccess == 1)
3539 curMember = thisMember;
3540 curClass = curMember->_class;
3541 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
3542 subMemberStackPos = _subMemberStackPos;
3544 if(dataMember == thisMember)
3546 if((*member->identifiers).count > 1 && member->initializer && member->initializer->type == 0)
3548 struct __ecereNameSpace__ecere__sys__OldList * partList = MkList();
3549 struct Symbol * symbol;
3550 struct Specifier * spec;
3551 struct MembersInit * nextMembers;
3552 struct MemberInit * next = member->next;
3554 if(!dataMember->dataType)
3555 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3556 symbol = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3557 spec = _MkSpecifierName(dataMember->dataTypeString, symbol, (((void *)0)));
3559 struct __ecereNameSpace__ecere__sys__OldList * identifiers = MkList();
3560 struct Identifier * id;
3562 for(id = ((struct Identifier *)(*member->identifiers).first)->next; id; id = id->next)
3563 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*identifiers), CopyIdentifier(id));
3564 ListAdd(partList, MkMemberInit(identifiers, MkInitializerAssignment(member->initializer->__anon1.exp)));
3566 for(nextMembers = members; nextMembers; nextMembers = nextMembers->next)
3568 if(!nextMembers->__anon1.dataMembers)
3570 if(members != nextMembers)
3571 next = (*nextMembers->__anon1.dataMembers).first;
3572 if(nextMembers->type == 0)
3574 struct MemberInit * nextMember;
3576 for(nextMember = next; nextMember; nextMember = next, next = nextMember ? nextMember->next : (((void *)0)))
3578 struct Identifier * nextID = (*nextMember->identifiers).first;
3580 if(nextMember->identifiers && (*nextMember->identifiers).count > 1 && !strcmp(firstID->string, nextID->string))
3582 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMembers->__anon1.dataMembers), nextMember);
3583 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMember->identifiers), nextID);
3584 ListAdd(partList, nextMember);
3585 FreeIdentifier(nextID);
3590 member->initializer->__anon1.exp = MkExpInstance(MkInstantiation(spec, (((void *)0)), MkListOne(MkMembersInitList(partList))));
3598 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
3599 if(curMember == dataMember)
3611 if(member && member->initializer && member->initializer->type == 0)
3613 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
3615 if(namedParentMember->type == 1 && dataMember->name)
3616 init->id = MkIdentifier(dataMember->name);
3617 if(member->initializer->__anon1.exp->type == 1 && member->initializer->__anon1.exp->expType && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered->type == 1)
3619 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3621 ProcessBracketInst(member->initializer->__anon1.exp->__anon1.instance, subList);
3622 FreeExpression(member->initializer->__anon1.exp);
3623 if((*subList).count)
3626 init->__anon1.list = subList;
3630 FreeInitializer(init);
3631 init = (((void *)0));
3636 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3637 ProcessExpression(member->initializer->__anon1.exp);
3639 init->__anon1.exp = member->initializer->__anon1.exp;
3642 ListAdd(list, init);
3643 member->initializer->__anon1.exp = (((void *)0));
3644 FreeInitializer(member->initializer);
3645 member->initializer = (((void *)0));
3648 else if(member && member->initializer && member->initializer->type == 1)
3650 if(namedParentMember->type == 1 && dataMember->name)
3651 member->initializer->id = MkIdentifier(dataMember->name);
3652 ListAdd(list, member->initializer);
3653 member->initializer = (((void *)0));
3656 else if(dataMember && dataMember->dataTypeString && parentMember->type != 1 && namedParentMember->type != 1)
3658 struct Symbol * classSym;
3659 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
3661 if(namedParentMember->type == 1 && dataMember->name)
3662 init->id = MkIdentifier(dataMember->name);
3663 if(!dataMember->dataType)
3664 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3665 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3666 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3668 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3669 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
3670 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
3672 ProcessBracketInst(inst, subList);
3674 if((*subList).count)
3677 init->__anon1.list = subList;
3681 FreeInitializer(init);
3682 init = (((void *)0));
3688 init->__anon1.exp = MkExpConstant("0");
3692 ListAdd(list, init);
3696 if(!someMemberSet && !parentMemberSet)
3698 struct Symbol * classSym;
3699 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
3701 dataMember = parentMember->members.first;
3702 if(namedParentMember->type == 1 && dataMember->name)
3703 init->id = MkIdentifier(dataMember->name);
3704 if(!dataMember->dataType && dataMember->dataTypeString)
3705 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3706 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3707 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3709 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3710 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
3711 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
3713 ProcessBracketInst(inst, subList);
3716 init->__anon1.list = subList;
3718 else if(dataMember->dataType && (dataMember->dataType->kind == 12 || dataMember->dataType->kind == 9))
3720 struct Type * t = dataMember->dataType->kind == 12 ? dataMember->dataType->__anon1.type : dataMember->dataType->__anon1.__anon1.members.first;
3721 struct Initializer * i = MkInitializerAssignment(MkExpConstant("0"));
3723 while(t && (t->kind == 12 || t->kind == 9))
3725 i = MkInitializerList(MkListOne(i));
3727 t = t->__anon1.type;
3728 else if(t->kind == 9)
3729 t = t->__anon1.__anon1.members.first;
3732 init->__anon1.list = MkListOne(i);
3737 init->__anon1.exp = MkExpConstant("0");
3739 ListAdd(list, init);
3744 static void ProcessDeclaration(struct Declaration * decl)
3756 if(decl->__anon1.__anon1.specifiers)
3758 struct Specifier * s;
3760 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
3762 ProcessSpecifier(s);
3765 if(decl->__anon1.__anon1.declarators)
3767 struct InitDeclarator * d;
3769 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
3772 ProcessInitializer(d->initializer);
3777 curDecl = (((void *)0));
3784 struct Instantiation * inst = decl->__anon1.inst;
3788 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
3792 struct Statement * stmt;
3794 if(!inst->isConstant || (classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 0 || classSym->__anon1.registered->type == 5)))
3797 decl->__anon1.__anon1.specifiers = MkListOne(MkSpecifierName(inst->_class->__anon1.__anon1.name));
3798 if(decl->declMode == 3)
3800 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.__anon1.specifiers), (((void *)0)), MkSpecifier(STATIC));
3802 decl->__anon1.__anon1.declarators = MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(inst->exp->__anon1.__anon1.identifier->string)), (((void *)0))));
3803 ProcessDeclaration(decl);
3804 CreateInstancesBody();
3806 struct Expression * exp = MkExpInstance(inst);
3808 stmt = MkExpressionStmt(MkListOne(exp));
3809 ListAdd(createInstancesBody->__anon1.compound.statements, stmt);
3810 ProcessExpressionType(exp);
3812 if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 0))
3814 ListAdd(createInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_IncRef")), MkListOne(CopyExpression(inst->exp))))));
3816 struct Expression * exp = MkExpOp((((void *)0)), DELETE, CopyExpression(inst->exp));
3818 ListAddFront(destroyInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(exp)));
3819 ProcessExpressionType(exp);
3822 else if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 5))
3824 struct Expression * exp = MkExpOp((((void *)0)), DELETE, CopyExpression(inst->exp));
3826 ListAddFront(destroyInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(exp)));
3827 ProcessExpressionType(exp);
3829 __ecereMethod_External_CreateEdge(createInstancesExternal, curExternal, 0);
3830 __ecereMethod_External_CreateEdge(destroyInstancesExternal, curExternal, 0);
3835 CreateInstancesBody();
3839 char className[1024];
3841 className[0] = (char)0;
3843 decl->__anon1.__anon1.specifiers = MkList();
3844 decl->__anon1.__anon1.declarators = MkList();
3845 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
3847 struct __ecereNameSpace__ecere__sys__OldList list =
3852 ProcessInstMembers(inst, inst->exp, &list, 0);
3853 ProcessExpression(inst->exp);
3854 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3855 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(list.first)));
3856 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3858 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 3)
3860 struct __ecereNameSpace__ecere__sys__OldList list =
3865 ProcessInstMembers(inst, inst->exp, &list, 0);
3866 ProcessExpression(inst->exp);
3867 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3868 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(list.first)));
3869 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3871 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3873 struct Expression * exp;
3875 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
3876 ProcessExpression(inst->exp);
3880 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3881 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), (((void *)0))));
3882 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3886 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
3888 if(ProcessBracketInst(inst, list))
3890 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3891 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerList(list)));
3892 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3896 FreeList(list, (void *)(FreeInitializer));
3897 exp = MkExpBrackets(MkList());
3898 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 1);
3899 ListAdd(exp->__anon1.list, CopyExpression(inst->exp));
3900 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3901 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(exp)));
3902 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3909 struct Expression * newCall;
3911 strcpy(className, "__ecereClass_");
3912 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && classSym->__anon1.registered->templateClass)
3914 classSym = FindClass(classSym->__anon1.registered->templateClass->fullName);
3915 FullClassNameCat(className, classSym->string, 1);
3918 FullClassNameCat(className, inst->_class->__anon1.__anon1.name, 1);
3920 DeclareClass(curExternal, classSym, className);
3921 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && (classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->fixed : classSym->__anon1.registered->fixed))
3924 struct __ecereNameSpace__ecere__com__Class * c = classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass : classSym->__anon1.registered;
3925 struct Expression * e = MkExpClassSize(MkSpecifierName(c->name));
3927 ProcessExpressionType(e);
3928 sprintf(size, "%d", c->structSize);
3929 newCall = MkExpCall(QMkExpId("ecere::com::eSystem_New0"), MkListOne(e));
3933 newCall = MkExpCall(QMkExpId("ecere::com::eInstance_New"), MkListOne(QMkExpId(className)));
3934 ProcessExpressionType(newCall);
3935 newCall->byReference = 1;
3939 struct Expression * exp, * newExp;
3940 struct Identifier * id = CopyIdentifier(inst->exp->__anon1.__anon1.identifier);
3942 if(inst->members && (*inst->members).first)
3944 newExp = MkExpOp(CopyExpression(inst->exp), '=', newCall);
3945 exp = MkExpBrackets(MkList());
3946 ListAdd(exp->__anon1.list, newExp);
3947 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0);
3948 ListAdd(exp->__anon1.list, inst->exp);
3949 ProcessExpression(inst->exp);
3950 inst->exp = (((void *)0));
3954 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3955 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(id), MkInitializerAssignment(exp)));
3958 FreeExpression(newCall);
3964 ProcessInstantiation(inst);
3969 if(decl->__anon1.__anon1.specifiers)
3971 struct Specifier * spec;
3973 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
3974 ProcessSpecifier(spec);