1 /* Code generated from eC source file: pass16.ec */
3 typedef long long int64;
4 typedef unsigned long long uint64;
8 #elif defined(__TINYC__)
10 #define __builtin_va_list va_list
11 #define __builtin_va_start va_start
12 #define __builtin_va_end va_end
14 #define strcasecmp stricmp
15 #define strncasecmp strnicmp
16 #define __declspec(x) __attribute__((x))
20 typedef long long int64;
21 typedef unsigned long long uint64;
23 typedef __int64 int64;
24 typedef unsigned __int64 uint64;
27 #define __ENDIAN_PAD(x) (8 - (x))
29 #define __ENDIAN_PAD(x) 0
32 #include <sys/types.h>
33 struct __ecereNameSpace__ecere__com__Instance;
35 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
37 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
39 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
41 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
43 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory);
45 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
47 struct __ecereNameSpace__ecere__sys__BTNode;
49 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
51 struct __ecereNameSpace__ecere__sys__BinaryTree
53 struct __ecereNameSpace__ecere__sys__BTNode * root;
55 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
56 void (* FreeKey)(void * key);
57 } __attribute__ ((gcc_struct));
59 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
61 struct __ecereNameSpace__ecere__sys__OldList
68 } __attribute__ ((gcc_struct));
70 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
72 struct __ecereNameSpace__ecere__com__Method
75 struct __ecereNameSpace__ecere__com__Method * parent;
76 struct __ecereNameSpace__ecere__com__Method * left;
77 struct __ecereNameSpace__ecere__com__Method * right;
82 struct __ecereNameSpace__ecere__com__Class * _class;
84 const char * dataTypeString;
85 struct Type * dataType;
87 } __attribute__ ((gcc_struct));
89 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
91 struct __ecereNameSpace__ecere__com__Property
93 struct __ecereNameSpace__ecere__com__Property * prev;
94 struct __ecereNameSpace__ecere__com__Property * next;
96 unsigned int isProperty;
99 struct __ecereNameSpace__ecere__com__Class * _class;
100 const char * dataTypeString;
101 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
102 struct Type * dataType;
103 void (* Set)(void * , int);
104 int (* Get)(void * );
105 unsigned int (* IsSet)(void * );
109 unsigned int conversion;
110 unsigned int watcherOffset;
111 const char * category;
112 unsigned int compiled;
113 unsigned int selfWatchable;
114 unsigned int isWatchable;
115 } __attribute__ ((gcc_struct));
117 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
125 } __attribute__ ((gcc_struct));
127 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
131 struct CodePosition start;
132 struct CodePosition end;
133 } __attribute__ ((gcc_struct));
135 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
139 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
143 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
145 struct ClassDefinition
147 struct ClassDefinition * prev;
148 struct ClassDefinition * next;
150 struct Specifier * _class;
151 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
152 struct __ecereNameSpace__ecere__sys__OldList * definitions;
153 struct Symbol * symbol;
154 struct Location blockStart;
155 struct Location nameLoc;
158 unsigned int deleteWatchable;
159 } __attribute__ ((gcc_struct));
161 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
165 struct Context * parent;
166 struct __ecereNameSpace__ecere__sys__BinaryTree types;
167 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
168 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
169 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
172 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
173 struct ClassDefinition * classDef;
174 unsigned int templateTypesOnly;
175 unsigned int hasNameSpace;
176 } __attribute__ ((gcc_struct));
178 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
182 struct Instantiation * prev;
183 struct Instantiation * next;
185 struct Specifier * _class;
186 struct Expression * exp;
187 struct __ecereNameSpace__ecere__sys__OldList * members;
188 struct Symbol * symbol;
189 unsigned int fullSet;
190 unsigned int isConstant;
191 unsigned char * data;
192 struct Location nameLoc;
193 struct Location insideLoc;
195 } __attribute__ ((gcc_struct));
197 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
201 struct Declaration * prev;
202 struct Declaration * next;
209 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
210 struct __ecereNameSpace__ecere__sys__OldList * declarators;
211 } __attribute__ ((gcc_struct)) __anon1;
212 struct Instantiation * inst;
215 struct Identifier * id;
216 struct Expression * exp;
217 } __attribute__ ((gcc_struct)) __anon2;
218 } __attribute__ ((gcc_struct)) __anon1;
219 struct Specifier * extStorage;
220 struct Symbol * symbol;
222 } __attribute__ ((gcc_struct));
224 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
228 struct Statement * prev;
229 struct Statement * next;
234 struct __ecereNameSpace__ecere__sys__OldList * expressions;
237 struct Identifier * id;
238 struct Statement * stmt;
239 } __attribute__ ((gcc_struct)) labeled;
242 struct Expression * exp;
243 struct Statement * stmt;
244 } __attribute__ ((gcc_struct)) caseStmt;
247 struct __ecereNameSpace__ecere__sys__OldList * declarations;
248 struct __ecereNameSpace__ecere__sys__OldList * statements;
249 struct Context * context;
250 unsigned int isSwitch;
251 } __attribute__ ((gcc_struct)) compound;
254 struct __ecereNameSpace__ecere__sys__OldList * exp;
255 struct Statement * stmt;
256 struct Statement * elseStmt;
257 } __attribute__ ((gcc_struct)) ifStmt;
260 struct __ecereNameSpace__ecere__sys__OldList * exp;
261 struct Statement * stmt;
262 } __attribute__ ((gcc_struct)) switchStmt;
265 struct __ecereNameSpace__ecere__sys__OldList * exp;
266 struct Statement * stmt;
267 } __attribute__ ((gcc_struct)) whileStmt;
270 struct __ecereNameSpace__ecere__sys__OldList * exp;
271 struct Statement * stmt;
272 } __attribute__ ((gcc_struct)) doWhile;
275 struct Statement * init;
276 struct Statement * check;
277 struct __ecereNameSpace__ecere__sys__OldList * increment;
278 struct Statement * stmt;
279 } __attribute__ ((gcc_struct)) forStmt;
282 struct Identifier * id;
283 } __attribute__ ((gcc_struct)) gotoStmt;
286 struct Specifier * spec;
288 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
289 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
290 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
291 } __attribute__ ((gcc_struct)) asmStmt;
294 struct Expression * watcher;
295 struct Expression * object;
296 struct __ecereNameSpace__ecere__sys__OldList * watches;
297 } __attribute__ ((gcc_struct)) _watch;
300 struct Identifier * id;
301 struct __ecereNameSpace__ecere__sys__OldList * exp;
302 struct __ecereNameSpace__ecere__sys__OldList * filter;
303 struct Statement * stmt;
304 } __attribute__ ((gcc_struct)) forEachStmt;
305 struct Declaration * decl;
306 } __attribute__ ((gcc_struct)) __anon1;
307 } __attribute__ ((gcc_struct));
309 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
313 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
317 struct Initializer * prev;
318 struct Initializer * next;
323 struct Expression * exp;
324 struct __ecereNameSpace__ecere__sys__OldList * list;
325 } __attribute__ ((gcc_struct)) __anon1;
326 unsigned int isConstant;
327 struct Identifier * id;
328 } __attribute__ ((gcc_struct));
330 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
332 struct __ecereNameSpace__ecere__com__DataValue
347 } __attribute__ ((gcc_struct)) __anon1;
348 } __attribute__ ((gcc_struct));
350 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
354 struct Expression * prev;
355 struct Expression * next;
363 struct Identifier * identifier;
364 } __attribute__ ((gcc_struct)) __anon1;
365 struct Statement * compound;
366 struct Instantiation * instance;
370 unsigned int intlString;
371 } __attribute__ ((gcc_struct)) __anon2;
372 struct __ecereNameSpace__ecere__sys__OldList * list;
375 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
376 struct Declarator * decl;
377 } __attribute__ ((gcc_struct)) _classExp;
380 struct Identifier * id;
381 } __attribute__ ((gcc_struct)) classData;
384 struct Expression * exp;
385 struct __ecereNameSpace__ecere__sys__OldList * arguments;
386 struct Location argLoc;
387 } __attribute__ ((gcc_struct)) call;
390 struct Expression * exp;
391 struct __ecereNameSpace__ecere__sys__OldList * index;
392 } __attribute__ ((gcc_struct)) index;
395 struct Expression * exp;
396 struct Identifier * member;
398 unsigned int thisPtr;
399 } __attribute__ ((gcc_struct)) member;
403 struct Expression * exp1;
404 struct Expression * exp2;
405 } __attribute__ ((gcc_struct)) op;
406 struct TypeName * typeName;
407 struct Specifier * _class;
410 struct TypeName * typeName;
411 struct Expression * exp;
412 } __attribute__ ((gcc_struct)) cast;
415 struct Expression * cond;
416 struct __ecereNameSpace__ecere__sys__OldList * exp;
417 struct Expression * elseExp;
418 } __attribute__ ((gcc_struct)) cond;
421 struct TypeName * typeName;
422 struct Expression * size;
423 } __attribute__ ((gcc_struct)) _new;
426 struct TypeName * typeName;
427 struct Expression * size;
428 struct Expression * exp;
429 } __attribute__ ((gcc_struct)) _renew;
433 struct Identifier * id;
434 } __attribute__ ((gcc_struct)) db;
437 struct Expression * ds;
438 struct Expression * name;
439 } __attribute__ ((gcc_struct)) dbopen;
442 struct TypeName * typeName;
443 struct Initializer * initializer;
444 } __attribute__ ((gcc_struct)) initializer;
447 struct Expression * exp;
448 struct TypeName * typeName;
449 } __attribute__ ((gcc_struct)) vaArg;
450 } __attribute__ ((gcc_struct)) __anon1;
451 unsigned int debugValue;
452 struct __ecereNameSpace__ecere__com__DataValue val;
454 unsigned int hasAddress;
455 struct Type * expType;
456 struct Type * destType;
459 unsigned int byReference;
460 unsigned int isConstant;
461 unsigned int addedThis;
462 unsigned int needCast;
463 unsigned int thisPtr;
464 unsigned int opDestType;
465 unsigned int needTemplateCast;
466 } __attribute__ ((gcc_struct));
468 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
470 struct TemplateDatatype;
472 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
474 struct TemplateArgument;
476 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
478 struct TemplateParameter;
480 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
484 struct Specifier * prev;
485 struct Specifier * next;
493 struct ExtDecl * extDecl;
495 struct Symbol * symbol;
496 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
497 } __attribute__ ((gcc_struct)) __anon1;
500 struct Identifier * id;
501 struct __ecereNameSpace__ecere__sys__OldList * list;
502 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
503 struct __ecereNameSpace__ecere__sys__OldList * definitions;
504 unsigned int addNameSpace;
505 struct Context * ctx;
506 struct ExtDecl * extDeclStruct;
507 } __attribute__ ((gcc_struct)) __anon2;
508 struct Expression * expression;
509 struct Specifier * _class;
510 struct TemplateParameter * templateParameter;
511 } __attribute__ ((gcc_struct)) __anon1;
512 } __attribute__ ((gcc_struct));
514 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
518 struct Identifier * prev;
519 struct Identifier * next;
521 struct Symbol * classSym;
522 struct Specifier * _class;
524 struct Identifier * badID;
525 } __attribute__ ((gcc_struct));
527 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
531 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
535 struct Declarator * prev;
536 struct Declarator * next;
539 struct Symbol * symbol;
540 struct Declarator * declarator;
543 struct Identifier * identifier;
546 struct Expression * exp;
547 struct Expression * posExp;
548 struct Attrib * attrib;
549 } __attribute__ ((gcc_struct)) structDecl;
552 struct Expression * exp;
553 struct Specifier * enumClass;
554 } __attribute__ ((gcc_struct)) array;
557 struct __ecereNameSpace__ecere__sys__OldList * parameters;
558 } __attribute__ ((gcc_struct)) function;
561 struct Pointer * pointer;
562 } __attribute__ ((gcc_struct)) pointer;
565 struct ExtDecl * extended;
566 } __attribute__ ((gcc_struct)) extended;
567 } __attribute__ ((gcc_struct)) __anon1;
568 } __attribute__ ((gcc_struct));
570 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
572 struct FunctionDefinition
574 struct FunctionDefinition * prev;
575 struct FunctionDefinition * next;
577 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
578 struct Declarator * declarator;
579 struct __ecereNameSpace__ecere__sys__OldList * declarations;
580 struct Statement * body;
581 struct __ecereNameSpace__ecere__com__Class * _class;
582 struct __ecereNameSpace__ecere__sys__OldList attached;
585 struct Symbol * propSet;
587 unsigned int propertyNoThis;
588 } __attribute__ ((gcc_struct));
590 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
594 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
598 struct External * prev;
599 struct External * next;
602 struct Symbol * symbol;
605 struct FunctionDefinition * function;
606 struct ClassDefinition * _class;
607 struct Declaration * declaration;
609 struct Identifier * id;
610 struct DBTableDef * table;
611 } __attribute__ ((gcc_struct)) __anon1;
613 } __attribute__ ((gcc_struct));
615 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
619 struct ModuleImport * prev;
620 struct ModuleImport * next;
622 struct __ecereNameSpace__ecere__sys__OldList classes;
623 struct __ecereNameSpace__ecere__sys__OldList functions;
626 } __attribute__ ((gcc_struct));
628 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
632 struct ClassImport * prev;
633 struct ClassImport * next;
635 struct __ecereNameSpace__ecere__sys__OldList methods;
636 struct __ecereNameSpace__ecere__sys__OldList properties;
639 } __attribute__ ((gcc_struct));
641 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
646 struct Symbol * parent;
647 struct Symbol * left;
648 struct Symbol * right;
653 struct __ecereNameSpace__ecere__com__Method * method;
654 struct __ecereNameSpace__ecere__com__Property * _property;
655 struct __ecereNameSpace__ecere__com__Class * registered;
656 } __attribute__ ((gcc_struct)) __anon1;
663 struct External * pointerExternal;
664 struct External * structExternal;
665 } __attribute__ ((gcc_struct)) __anon1;
668 struct External * externalGet;
669 struct External * externalSet;
670 struct External * externalPtr;
671 struct External * externalIsSet;
672 } __attribute__ ((gcc_struct)) __anon2;
675 struct External * methodExternal;
676 struct External * methodCodeExternal;
677 } __attribute__ ((gcc_struct)) __anon3;
678 } __attribute__ ((gcc_struct)) __anon2;
679 unsigned int imported;
680 unsigned int declaredStructSym;
681 struct __ecereNameSpace__ecere__com__Class * _class;
682 unsigned int declaredStruct;
683 unsigned int needConstructor;
684 unsigned int needDestructor;
685 char * constructorName;
688 char * destructorName;
689 struct ModuleImport * module;
690 struct ClassImport * _import;
691 struct Location nameLoc;
692 unsigned int isParam;
693 unsigned int isRemote;
694 unsigned int isStruct;
695 unsigned int fireWatchersDone;
697 unsigned int classData;
698 unsigned int isStatic;
700 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
701 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
702 struct Context * ctx;
704 struct Expression * propCategory;
705 } __attribute__ ((gcc_struct));
707 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
716 struct Symbol * _class;
719 struct __ecereNameSpace__ecere__sys__OldList members;
721 } __attribute__ ((gcc_struct)) __anon1;
724 struct Type * returnType;
725 struct __ecereNameSpace__ecere__sys__OldList params;
726 struct Symbol * thisClass;
727 unsigned int staticMethod;
728 struct TemplateParameter * thisClassTemplate;
729 } __attribute__ ((gcc_struct)) __anon2;
732 struct __ecereNameSpace__ecere__com__Method * method;
733 struct __ecereNameSpace__ecere__com__Class * methodClass;
734 struct __ecereNameSpace__ecere__com__Class * usedClass;
735 } __attribute__ ((gcc_struct)) __anon3;
738 struct Type * arrayType;
740 struct Expression * arraySizeExp;
741 unsigned int freeExp;
742 struct Symbol * enumClass;
743 } __attribute__ ((gcc_struct)) __anon4;
745 struct TemplateParameter * templateParameter;
746 } __attribute__ ((gcc_struct)) __anon1;
756 unsigned int isSigned : 1;
757 unsigned int constant : 1;
758 unsigned int truth : 1;
759 unsigned int byReference : 1;
760 unsigned int extraParam : 1;
761 unsigned int directClassAccess : 1;
762 unsigned int computing : 1;
763 unsigned int keepCast : 1;
764 unsigned int passAsTemplate : 1;
765 unsigned int dllExport : 1;
766 unsigned int attrStdcall : 1;
767 unsigned int declaredWithStruct : 1;
768 unsigned int typedByReference : 1;
769 unsigned int casted : 1;
770 } __attribute__ ((gcc_struct));
772 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
774 struct __ecereNameSpace__ecere__com__Class
776 struct __ecereNameSpace__ecere__com__Class * prev;
777 struct __ecereNameSpace__ecere__com__Class * next;
783 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
784 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
787 struct __ecereNameSpace__ecere__com__Class * base;
788 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
789 struct __ecereNameSpace__ecere__sys__BinaryTree members;
790 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
791 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
792 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
793 struct __ecereNameSpace__ecere__sys__OldList derivatives;
797 struct __ecereNameSpace__ecere__com__Instance * module;
798 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
799 const char * dataTypeString;
800 struct Type * dataType;
802 int defaultAlignment;
803 void (* Initialize)();
805 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
806 const char * designerClass;
807 unsigned int noExpansion;
808 const char * defaultProperty;
809 unsigned int comRedefinition;
812 unsigned int internalDecl;
814 unsigned int computeSize;
816 int destructionWatchOffset;
818 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
819 int inheritanceAccess;
820 const char * fullName;
822 struct __ecereNameSpace__ecere__sys__OldList conversions;
823 struct __ecereNameSpace__ecere__sys__OldList templateParams;
824 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
825 struct __ecereNameSpace__ecere__com__Class * templateClass;
826 struct __ecereNameSpace__ecere__sys__OldList templatized;
828 unsigned int isInstanceClass;
829 unsigned int byValueSystemClass;
830 } __attribute__ ((gcc_struct));
832 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
834 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value);
836 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
838 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char * name, void * function);
840 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
842 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);
844 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void * instance, struct __ecereNameSpace__ecere__com__Property * _property, void * object, void (* callback)(void * , void * ));
846 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
848 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
850 struct __ecereNameSpace__ecere__com__Instance
853 struct __ecereNameSpace__ecere__com__Class * _class;
855 } __attribute__ ((gcc_struct));
857 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
859 struct __ecereNameSpace__ecere__com__DataMember
861 struct __ecereNameSpace__ecere__com__DataMember * prev;
862 struct __ecereNameSpace__ecere__com__DataMember * next;
864 unsigned int isProperty;
867 struct __ecereNameSpace__ecere__com__Class * _class;
868 const char * dataTypeString;
869 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
870 struct Type * dataType;
874 struct __ecereNameSpace__ecere__sys__OldList members;
875 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
878 } __attribute__ ((gcc_struct));
880 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
882 struct __ecereNameSpace__ecere__com__SerialBuffer
884 unsigned char * _buffer;
888 } __attribute__ ((gcc_struct));
890 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
892 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
898 const char * dataTypeString;
899 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
900 } __attribute__ ((gcc_struct)) __anon1;
901 struct __ecereNameSpace__ecere__com__DataValue expression;
904 const char * memberString;
907 struct __ecereNameSpace__ecere__com__DataMember * member;
908 struct __ecereNameSpace__ecere__com__Property * prop;
909 struct __ecereNameSpace__ecere__com__Method * method;
910 } __attribute__ ((gcc_struct)) __anon1;
911 } __attribute__ ((gcc_struct)) __anon2;
912 } __attribute__ ((gcc_struct)) __anon1;
913 } __attribute__ ((gcc_struct));
917 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
920 typedef union YYSTYPE
925 struct Identifier * id;
926 struct Expression * exp;
927 struct Specifier * specifier;
928 struct __ecereNameSpace__ecere__sys__OldList * list;
929 struct Enumerator * enumerator;
930 struct Declarator * declarator;
931 struct Pointer * pointer;
932 struct Initializer * initializer;
933 struct InitDeclarator * initDeclarator;
934 struct TypeName * typeName;
935 struct Declaration * declaration;
936 struct Statement * stmt;
937 struct FunctionDefinition * function;
938 struct External * external;
939 struct Context * context;
940 struct AsmField * asmField;
941 struct Attrib * attrib;
942 struct ExtDecl * extDecl;
943 struct Attribute * attribute;
944 struct Instantiation * instance;
945 struct MembersInit * membersInit;
946 struct MemberInit * memberInit;
947 struct ClassFunction * classFunction;
948 struct ClassDefinition * _class;
949 struct ClassDef * classDef;
950 struct PropertyDef * prop;
952 struct Symbol * symbol;
953 struct PropertyWatch * propertyWatch;
954 struct TemplateParameter * templateParameter;
955 struct TemplateArgument * templateArgument;
956 struct TemplateDatatype * templateDatatype;
957 struct DBTableEntry * dbtableEntry;
958 struct DBIndexItem * dbindexItem;
959 struct DBTableDef * dbtableDef;
960 } __attribute__ ((gcc_struct)) YYSTYPE;
962 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
966 struct Enumerator * prev;
967 struct Enumerator * next;
969 struct Identifier * id;
970 struct Expression * exp;
971 } __attribute__ ((gcc_struct));
973 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
975 struct InitDeclarator
977 struct InitDeclarator * prev;
978 struct InitDeclarator * next;
980 struct Declarator * declarator;
981 struct Initializer * initializer;
982 } __attribute__ ((gcc_struct));
984 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
988 struct AsmField * prev;
989 struct AsmField * next;
992 struct Expression * expression;
993 struct Identifier * symbolic;
994 } __attribute__ ((gcc_struct));
996 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
1000 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
1002 struct ClassFunction
1004 struct ClassFunction * prev;
1005 struct ClassFunction * next;
1006 struct Location loc;
1007 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1008 struct Declarator * declarator;
1009 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1010 struct Statement * body;
1011 struct __ecereNameSpace__ecere__com__Class * _class;
1012 struct __ecereNameSpace__ecere__sys__OldList attached;
1015 struct Symbol * propSet;
1016 unsigned int isVirtual;
1017 unsigned int isConstructor;
1018 unsigned int isDestructor;
1019 unsigned int dontMangle;
1022 } __attribute__ ((gcc_struct));
1024 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
1028 struct MembersInit * prev;
1029 struct MembersInit * next;
1030 struct Location loc;
1034 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
1035 struct ClassFunction * function;
1036 } __attribute__ ((gcc_struct)) __anon1;
1037 } __attribute__ ((gcc_struct));
1039 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
1043 struct MemberInit * prev;
1044 struct MemberInit * next;
1045 struct Location loc;
1046 struct Location realLoc;
1047 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
1048 struct Initializer * initializer;
1050 unsigned int variable;
1051 unsigned int takeOutExp;
1052 } __attribute__ ((gcc_struct));
1054 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
1058 struct PropertyDef * prev;
1059 struct PropertyDef * next;
1060 struct Location loc;
1061 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1062 struct Declarator * declarator;
1063 struct Identifier * id;
1064 struct Statement * getStmt;
1065 struct Statement * setStmt;
1066 struct Statement * issetStmt;
1067 struct Symbol * symbol;
1068 struct Expression * category;
1071 unsigned int conversion : 1;
1072 unsigned int isWatchable : 1;
1073 unsigned int isDBProp : 1;
1074 } __attribute__ ((gcc_struct)) __anon1;
1075 } __attribute__ ((gcc_struct));
1077 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
1079 struct PropertyWatch
1081 struct PropertyWatch * prev;
1082 struct PropertyWatch * next;
1083 struct Location loc;
1084 struct Statement * compound;
1085 struct __ecereNameSpace__ecere__sys__OldList * properties;
1086 unsigned int deleteWatch;
1087 } __attribute__ ((gcc_struct));
1089 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
1093 struct ClassDef * prev;
1094 struct ClassDef * next;
1095 struct Location loc;
1099 struct Declaration * decl;
1100 struct ClassFunction * function;
1101 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
1102 struct PropertyDef * propertyDef;
1103 struct PropertyWatch * propertyWatch;
1105 struct Identifier * defaultProperty;
1108 struct Identifier * id;
1109 struct Initializer * initializer;
1110 } __attribute__ ((gcc_struct)) __anon1;
1111 } __attribute__ ((gcc_struct)) __anon1;
1114 } __attribute__ ((gcc_struct));
1116 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1118 struct DBTableEntry;
1120 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1124 extern YYSTYPE yylval;
1126 extern struct Location yylloc;
1128 extern struct External * curExternal;
1130 static struct Statement * curCompound;
1132 static struct Statement * createInstancesBody;
1134 static struct Statement * destroyInstancesBody;
1136 extern unsigned int inCompiler;
1138 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
1140 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
1142 extern struct Context * globalContext;
1144 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
1146 extern struct Specifier * MkSpecifier(int specifier);
1148 extern char * __ecereNameSpace__ecere__sys__GetLastDirectory(const char * string, char * output);
1150 extern const char * outputFile;
1152 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string);
1154 extern void FixModuleName(char * moduleName);
1156 extern int sprintf(char * , const char * , ...);
1158 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1160 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1162 extern struct Identifier * MkIdentifier(const char * string);
1164 extern struct FunctionDefinition * _MkFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * declarationList, unsigned int errorOnOmit);
1166 extern void ProcessFunctionBody(struct FunctionDefinition * func, struct Statement * body);
1168 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
1170 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
1172 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1174 static void CreateInstancesBody()
1176 if(inCompiler && !createInstancesBody)
1178 char registerName[1024], moduleName[274];
1179 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1180 struct Declarator * declarator;
1182 createInstancesBody = MkCompoundStmt((((void *)0)), MkList());
1183 createInstancesBody->__anon1.compound.context = __extension__ ({
1184 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1186 __ecereInstance1->parent = globalContext, __ecereInstance1;
1188 specifiers = MkList();
1189 ListAdd(specifiers, MkSpecifier(VOID));
1190 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1191 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1192 FixModuleName(moduleName);
1193 sprintf(registerName, "__ecereCreateModuleInstances_%s", moduleName);
1194 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), (((void *)0)));
1196 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0x0);
1198 ProcessFunctionBody(function, createInstancesBody);
1199 ListAdd(ast, MkExternalFunction(function));
1201 destroyInstancesBody = MkCompoundStmt((((void *)0)), MkList());
1202 destroyInstancesBody->__anon1.compound.context = __extension__ ({
1203 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1205 __ecereInstance1->parent = globalContext, __ecereInstance1;
1207 specifiers = MkList();
1208 ListAdd(specifiers, MkSpecifier(VOID));
1209 sprintf(registerName, "__ecereDestroyModuleInstances_%s", moduleName);
1210 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), (((void *)0)));
1212 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0x0);
1214 ProcessFunctionBody(function, destroyInstancesBody);
1215 ListAdd(ast, MkExternalFunction(function));
1220 static void ProcessInitializer(struct Initializer * init);
1222 static void ProcessMemberInitData(struct MemberInit * member)
1224 if(member->initializer)
1225 ProcessInitializer(member->initializer);
1228 static void ProcessFunction(struct FunctionDefinition * function);
1230 static void ProcessInstantiation(struct Instantiation * inst)
1232 if(inst->members && (*inst->members).first)
1234 struct MembersInit * members;
1236 for(members = (*inst->members).first; members; members = members->next)
1238 if(members->type == 0)
1240 if(members->__anon1.dataMembers)
1242 struct MemberInit * member;
1244 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1245 ProcessMemberInitData(member);
1248 else if(members->type == 1)
1250 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
1256 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);
1258 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
1260 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);
1262 extern void * memcpy(void * , const void * , size_t size);
1264 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);
1266 extern struct Expression * CopyExpression(struct Expression * exp);
1268 extern struct Expression * MkExpConstant(const char * string);
1270 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
1272 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
1274 extern void FreeType(struct Type * type);
1276 extern void ProcessExpressionType(struct Expression * exp);
1278 static void ProcessExpression(struct Expression * exp);
1280 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)
1282 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
1283 unsigned int fullSet = 0x1;
1284 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1286 for(dataMember = parentMember->members.first; dataMember; dataMember = dataMember->next)
1288 if(!dataMember->isProperty)
1290 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
1292 if(!ProcessInstMembers_SimpleMemberEnsure(dataMember, inst, instExp, list, zeroOut))
1297 unsigned int memberFilled = 0x0;
1299 if(inst->members && (*inst->members).first)
1301 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1302 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1303 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1304 int subMemberStackPos = 0;
1305 struct MembersInit * members;
1307 for(members = (*inst->members).first; members; members = members->next)
1309 if(members->type == 0)
1311 struct MemberInit * member = (((void *)0));
1313 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1315 if(member->identifiers)
1317 struct Identifier * firstID = (*member->identifiers).first;
1318 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1319 int _subMemberStackPos = 0;
1320 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1323 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1326 if(thisMember && thisMember->memberAccess == 1)
1328 curMember = thisMember;
1329 curClass = curMember->_class;
1330 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1331 subMemberStackPos = _subMemberStackPos;
1333 if(!firstID->next && thisMember == dataMember)
1342 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1343 if(curMember == dataMember)
1361 struct Expression * instExpCopy = CopyExpression(instExp);
1362 struct Expression * memberExp;
1363 struct Expression * setExp;
1364 struct Expression * value = MkExpConstant("0");
1366 memberExp = MkExpMember(instExpCopy, MkIdentifier(dataMember->name));
1367 memberExp->__anon1.member.memberType = 3;
1368 value->usage = (value->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
1369 setExp = MkExpOp(memberExp, '=', value);
1370 value->loc = inst->loc;
1371 setExp->loc = inst->loc;
1372 FreeType(instExpCopy->expType);
1373 instExpCopy->expType = instExp->expType;
1374 if(instExp->expType)
1375 instExp->expType->refCount++;
1376 ProcessExpressionType(setExp);
1377 ProcessExpression(setExp);
1378 ListAdd(list, setExp);
1388 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
1390 struct __ecereNameSpace__ecere__com__BitMember
1392 struct __ecereNameSpace__ecere__com__BitMember * prev;
1393 struct __ecereNameSpace__ecere__com__BitMember * next;
1395 unsigned int isProperty;
1398 struct __ecereNameSpace__ecere__com__Class * _class;
1399 const char * dataTypeString;
1400 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1401 struct Type * dataType;
1406 } __attribute__ ((gcc_struct));
1408 extern struct Declarator * SpecDeclFromString(const char * string, struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * baseDecl);
1410 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
1412 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
1414 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1416 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1418 extern void FreeInitializer(struct Initializer * initializer);
1420 extern void DeclareProperty(struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName);
1422 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
1424 extern struct Expression * MkExpIdentifier(struct Identifier * id);
1426 extern struct Type * MkClassType(const char * name);
1428 extern struct TypeName * QMkClass(const char * spec, struct Declarator * decl);
1430 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);
1432 extern void FreeExpression(struct Expression * exp);
1434 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
1436 static unsigned int ProcessInstMembers(struct Instantiation * inst, struct Expression * instExp, struct __ecereNameSpace__ecere__sys__OldList * list, unsigned int zeroOut)
1438 struct MembersInit * members;
1439 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
1440 unsigned int fullSet = 0x1, convert = 0x0;
1442 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
1444 struct Expression * exp = (((void *)0));
1446 if(inst->members && (*inst->members).first)
1448 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
1450 while(_class != classSym->__anon1.registered)
1452 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (((void *)0));
1453 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
1455 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
1457 for(bitMember = _class->membersAndProperties.first; bitMember; bitMember = bitMember->next)
1459 struct __ecereNameSpace__ecere__com__BitMember * curMember = (((void *)0));
1460 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1461 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1462 int subMemberStackPos = 0;
1463 struct MemberInit * member = (((void *)0));
1464 unsigned int found = 0x0;
1466 for(members = (*inst->members).first; members; members = members->next)
1468 if(members->type == 0)
1470 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1472 if(member->identifiers)
1474 struct Identifier * firstID = (*member->identifiers).first;
1475 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1476 int _subMemberStackPos = 0;
1477 struct __ecereNameSpace__ecere__com__BitMember * thisMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindDataMember(_class, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1481 thisMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, firstID->string, privateModule);
1483 if(thisMember && thisMember->memberAccess == 1)
1485 curMember = thisMember;
1486 curClass = curMember->_class;
1487 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1488 subMemberStackPos = _subMemberStackPos;
1490 if(thisMember == bitMember)
1498 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, (struct __ecereNameSpace__ecere__com__DataMember **)&curMember, subMemberStack, &subMemberStackPos);
1499 if(curMember == bitMember)
1512 if(!bitMember->isProperty)
1514 struct Expression * part = (((void *)0));
1515 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1516 struct Declarator * decl;
1518 decl = SpecDeclFromString(_class->dataTypeString, specs, (((void *)0)));
1519 ProcessInitializer(member->initializer);
1520 if(member->initializer && member->initializer->type == 0)
1526 sprintf(pos, "%d", bitMember->pos);
1527 part = MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(member->initializer->__anon1.exp))))), LEFT_OP, MkExpConstant(pos))));
1530 part = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(member->initializer->__anon1.exp)))));
1531 member->initializer->__anon1.exp = (((void *)0));
1532 FreeInitializer(member->initializer);
1533 member->initializer = (((void *)0));
1536 exp = MkExpOp(exp, '|', part);
1542 char setName[1024], getName[1024];
1544 DeclareProperty((struct __ecereNameSpace__ecere__com__Property *)bitMember, setName, getName);
1545 if(member->initializer && member->initializer->type == 0)
1547 exp = MkExpCall(MkExpIdentifier(MkIdentifier(setName)), MkListOne(member->initializer->__anon1.exp));
1548 member->initializer->__anon1.exp = (((void *)0));
1549 FreeInitializer(member->initializer);
1550 member->initializer = (((void *)0));
1558 exp = MkExpBrackets(MkListOne(exp));
1560 exp = MkExpConstant("0");
1561 exp->expType = MkClassType(classSym->string);
1562 ProcessExpression(exp);
1565 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 3)
1567 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
1568 struct Expression * exp = (((void *)0));
1570 if(inst->members && (*inst->members).first)
1572 struct MemberInit * member = (((void *)0));
1573 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
1574 unsigned int found = 0x0;
1576 for(members = (*inst->members).first; members; members = members->next)
1578 if(members->type == 0)
1580 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1582 if(member->identifiers)
1584 struct Identifier * firstID = (*member->identifiers).first;
1586 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, firstID->string, privateModule);
1592 prop = (((void *)0));
1608 char setName[1024], getName[1024];
1610 DeclareProperty(prop, setName, getName);
1611 if(member->initializer && member->initializer->type == 0)
1613 exp = MkExpCall(MkExpIdentifier(MkIdentifier(setName)), MkListOne(member->initializer->__anon1.exp));
1614 member->initializer->__anon1.exp = (((void *)0));
1615 FreeInitializer(member->initializer);
1616 member->initializer = (((void *)0));
1621 ProcessInitializer(member->initializer);
1622 if(member->initializer && member->initializer->type == 0)
1624 exp = MkExpCast(QMkClass(_class->fullName, (((void *)0))), MkExpBrackets(MkListOne(member->initializer->__anon1.exp)));
1625 member->initializer->__anon1.exp = (((void *)0));
1626 FreeInitializer(member->initializer);
1627 member->initializer = (((void *)0));
1633 exp = MkExpBrackets(MkListOne(exp));
1635 exp = MkExpConstant("0");
1636 ProcessExpression(exp);
1639 else if(classSym && classSym->__anon1.registered)
1641 if(classSym->__anon1.registered->type == 1)
1643 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
1645 while(_class != classSym->__anon1.registered)
1647 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1648 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
1650 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
1652 if(_class->structSize != _class->memberOffset)
1654 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
1656 if(!dataMember->isProperty)
1658 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
1660 if(!ProcessInstMembers_SimpleMemberEnsure(dataMember, inst, instExp, list, zeroOut))
1665 unsigned int memberFilled = 0x0;
1667 if(inst->members && (*inst->members).first)
1669 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1670 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1671 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1672 int subMemberStackPos = 0;
1674 for(members = (*inst->members).first; members; members = members->next)
1676 if(members->type == 0 && members->__anon1.dataMembers)
1678 struct MemberInit * member = (((void *)0));
1680 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1682 if(member->identifiers)
1684 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1685 int _subMemberStackPos = 0;
1686 struct Identifier * firstID = (*member->identifiers).first;
1687 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1690 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1693 if(thisMember->memberAccess == 1)
1695 curMember = thisMember;
1696 curClass = curMember->_class;
1697 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1698 subMemberStackPos = _subMemberStackPos;
1700 if(!firstID->next && curMember == dataMember)
1709 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1710 if(curMember == dataMember)
1728 struct Expression * instExpCopy = CopyExpression(instExp);
1729 struct Expression * memberExp;
1730 struct Expression * setExp;
1731 struct Expression * value = MkExpConstant("0");
1733 memberExp = MkExpMember(instExpCopy, MkIdentifier(dataMember->name));
1734 memberExp->__anon1.member.memberType = 3;
1735 value->usage = (value->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
1736 setExp = MkExpOp(memberExp, '=', value);
1737 value->loc = inst->loc;
1738 setExp->loc = inst->loc;
1739 FreeType(instExpCopy->expType);
1740 instExpCopy->expType = instExp->expType;
1741 if(instExp->expType)
1742 instExp->expType->refCount++;
1743 ProcessExpressionType(setExp);
1744 ProcessExpression(setExp);
1745 ListAdd(list, setExp);
1754 if(inst->members && (*inst->members).first)
1756 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1757 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1758 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1759 int subMemberStackPos = 0;
1761 for(members = (*inst->members).first; members; members = members->next)
1763 if(members->type == 0 && members->__anon1.dataMembers)
1765 struct MemberInit * member = (((void *)0));
1766 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
1768 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1770 struct Identifier * ident = (((void *)0));
1771 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (((void *)0));
1773 if(member->identifiers)
1775 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1776 int _subMemberStackPos = 0;
1777 struct Identifier * firstID = (*member->identifiers).first;
1779 thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1781 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1785 if(thisMember->memberAccess == 1)
1787 curMember = thisMember;
1788 curClass = curMember->_class;
1789 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1790 subMemberStackPos = _subMemberStackPos;
1793 else if(classSym->__anon1.registered->type != 1)
1795 method = __ecereNameSpace__ecere__com__eClass_FindMethod(classSym->__anon1.registered, ident->string, privateModule);
1796 if(!method || method->type != 1)
1797 method = (((void *)0));
1802 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1803 thisMember = curMember;
1805 if(instExp && (thisMember || method))
1807 struct Expression * instExpCopy = CopyExpression(instExp);
1808 struct Expression * setExp = (((void *)0));
1810 instExpCopy->tempCount = instExp->tempCount;
1812 ident = MkIdentifier(thisMember->name);
1815 struct Expression * memberExp;
1816 unsigned int freeMemberExp = 0x0;
1818 if(thisMember && thisMember->isProperty && ((struct __ecereNameSpace__ecere__com__Property *)thisMember)->conversion)
1820 if(member->identifiers && (*member->identifiers).count > 1)
1822 struct Identifier * id = (*member->identifiers).first;
1824 memberExp = MkExpMember(instExpCopy, id);
1825 for(id = id->next; id; id = id->next)
1826 memberExp = MkExpMember(memberExp, id);
1829 memberExp = MkExpMember(instExpCopy, ident);
1830 if(member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
1832 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
1833 setExp = MkExpOp(memberExp, '=', member->initializer->__anon1.exp);
1834 member->initializer->__anon1.exp = (((void *)0));
1835 FreeInitializer(member->initializer);
1836 member->initializer = (((void *)0));
1840 freeMemberExp = 0x1;
1842 memberExp->loc = inst->loc;
1843 if(member->identifiers)
1844 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*member->identifiers));
1846 setExp->loc = inst->loc;
1847 FreeType(instExpCopy->expType);
1848 instExpCopy->expType = instExp->expType;
1849 if(instExp->expType)
1850 instExp->expType->refCount++;
1853 ProcessExpressionType(setExp);
1854 ProcessExpression(setExp);
1855 ListAdd(list, setExp);
1858 FreeExpression(memberExp);
1866 return fullSet || convert;
1869 extern struct ModuleImport * mainModule;
1871 extern char * __ecereNameSpace__ecere__sys__CopyString(const char * string);
1873 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
1875 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1877 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
1879 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1881 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
1883 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
1885 extern void DeclareStruct(const char * name, unsigned int skipNoHead);
1887 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1889 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
1891 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move(struct __ecereNameSpace__ecere__sys__OldList * this, void * item, void * prevItem);
1893 void DeclareClass(struct Symbol * classSym, const char * className)
1895 if(classSym && classSym->id == (((int)0x7fffffff)))
1897 struct Declaration * decl;
1898 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
1899 struct Declarator * d;
1901 if(!classSym->_import)
1903 if(!classSym->module)
1904 classSym->module = mainModule;
1905 if(!classSym->module)
1907 classSym->_import = __extension__ ({
1908 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
1910 __ecereInstance1->isRemote = classSym->__anon1.registered ? classSym->__anon1.registered->isRemote : 0, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(classSym->string), __ecereInstance1;
1912 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->module->classes, classSym->_import);
1914 classSym->_import->itself = 0x1;
1915 specifiers = MkList();
1916 declarators = MkList();
1917 ListAdd(specifiers, MkSpecifier(EXTERN));
1918 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
1919 d = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(className)));
1920 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
1921 decl = MkDeclaration(specifiers, declarators);
1924 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, (classSym->__anon2.__anon1.pointerExternal = MkExternalDeclaration(decl)));
1925 classSym->id = curExternal->symbol ? curExternal->symbol->idCode : 0;
1926 classSym->idCode = classSym->id;
1929 else if(classSym && curExternal && curExternal->symbol->idCode < classSym->id)
1931 if(classSym->__anon2.__anon1.structExternal)
1932 DeclareStruct(classSym->string, classSym->__anon1.registered && classSym->__anon1.registered->type == 5);
1933 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.pointerExternal, curExternal->prev);
1934 if(classSym->__anon2.__anon1.structExternal)
1935 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.structExternal, classSym->__anon2.__anon1.pointerExternal);
1936 classSym->id = curExternal->symbol->idCode;
1937 classSym->idCode = classSym->id;
1941 void ProcessExpressionInstPass(struct Expression * exp)
1943 ProcessExpression(exp);
1946 extern struct Context * curContext;
1948 static unsigned int ProcessBracketInst(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list);
1950 extern struct Specifier * MkSpecifierName(const char * name);
1952 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
1954 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
1956 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
1958 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1960 extern struct Expression * QMkExpId(const char * id);
1962 static void ProcessDeclaration(struct Declaration * decl);
1964 extern char * strcpy(char * , const char * );
1966 extern struct Symbol * FindClass(const char * name);
1968 extern void FullClassNameCat(char * output, const char * className, unsigned int includeTemplateParams);
1970 static struct Declaration * curDecl;
1972 static int declTempCount;
1974 extern struct Context * PushContext(void);
1976 extern struct Declaration * QMkDeclaration(const char * name, struct InitDeclarator * initDecl);
1978 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1980 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
1982 extern void PopContext(struct Context * ctx);
1984 extern void FreeInstance(struct Instantiation * inst);
1986 extern void CopyTypeInto(struct Type * type, struct Type * src);
1988 extern struct Type * ProcessTypeString(const char * string, unsigned int staticMethod);
1990 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
1992 static void ProcessStatement(struct Statement * stmt);
1994 extern void CheckTemplateTypes(struct Expression * exp);
1996 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1998 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (* freeFn)(void * ));
2000 static void ProcessExpression(struct Expression * exp)
2008 struct Instantiation * inst = exp->__anon1.instance;
2010 if(inCompiler && inst->_class)
2012 char className[1024];
2013 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2014 struct Expression * instExp;
2016 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
2020 struct __ecereNameSpace__ecere__sys__OldList list =
2025 ProcessInstMembers(inst, (((void *)0)), &list, 0x0);
2026 ProcessExpression(inst->exp);
2028 exp->__anon1.op.op = '=';
2029 exp->__anon1.op.exp1 = inst->exp;
2030 exp->__anon1.op.exp2 = list.first;
2031 inst->exp = (((void *)0));
2035 struct Type * expType = exp->expType;
2036 struct Expression * prev = exp->prev, * next = exp->next;
2037 struct __ecereNameSpace__ecere__sys__OldList list =
2042 ProcessInstMembers(inst, (((void *)0)), &list, 0x0);
2043 FreeType(exp->destType);
2044 *exp = *(struct Expression *)list.first;
2046 struct Expression * firstExp = list.first;
2048 ((firstExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)firstExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(firstExp)) : 0), firstExp = 0);
2050 FreeType(exp->destType);
2051 exp->destType = expType;
2056 else if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
2060 struct __ecereNameSpace__ecere__sys__OldList list =
2064 struct Expression * e;
2066 ProcessInstMembers(inst, (((void *)0)), &list, 0x0);
2067 ProcessExpression(inst->exp);
2069 exp->__anon1.op.op = '=';
2070 exp->__anon1.op.exp1 = inst->exp;
2071 exp->__anon1.op.exp2 = list.first;
2072 inst->exp = (((void *)0));
2073 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, list.first);
2074 while((e = list.first))
2076 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2082 struct Expression * prev = exp->prev, * next = exp->next;
2083 struct Type * expType = exp->expType;
2084 struct __ecereNameSpace__ecere__sys__OldList list =
2089 ProcessInstMembers(inst, (((void *)0)), &list, 0x0);
2092 struct Expression * e = list.first;
2094 FreeType(exp->destType);
2096 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2097 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
2098 exp->expType = expType;
2101 while((e = list.first))
2103 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2110 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString("0");
2114 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2119 exp->__anon1.list = MkList();
2120 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0x0);
2121 ProcessExpression(inst->exp);
2122 if(!(*exp->__anon1.list).count)
2125 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
2130 struct Declaration * decl;
2131 struct Declaration * dummyDecl;
2134 dummyDecl = MkDeclaration((((void *)0)), (((void *)0)));
2135 if(!curCompound->__anon1.compound.declarations)
2136 curCompound->__anon1.compound.declarations = MkList();
2137 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), dummyDecl);
2138 sprintf(className, "__simpleStruct%d", curContext->simpleID++);
2140 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2142 if(inst->isConstant && ProcessBracketInst(inst, list))
2144 decl = MkDeclaration(MkList(), MkList());
2145 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
2146 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(className)), MkInitializerList(list)));
2148 exp->__anon1.__anon1.identifier = MkIdentifier(className);
2152 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free((&*list), (((void *)0)));
2153 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
2154 decl = MkDeclarationInst(MkInstantiation(CopySpecifier(inst->_class), MkExpIdentifier(MkIdentifier(className)), (((void *)0))));
2156 exp->__anon1.list = MkList();
2157 instExp = QMkExpId(className);
2158 instExp->loc = exp->loc;
2159 instExp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
2160 decl->__anon1.inst->fullSet = ProcessInstMembers(inst, instExp, exp->__anon1.list, 0x0);
2161 ListAdd(exp->__anon1.list, instExp);
2164 FreeType(exp->expType);
2165 exp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
2167 void * prev = dummyDecl->prev, * next = dummyDecl->next;
2170 dummyDecl->prev = prev;
2171 dummyDecl->next = next;
2172 ((decl ? (__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
2175 ProcessDeclaration(decl);
2181 struct Expression * newCall;
2183 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && (classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->fixed : classSym->__anon1.registered->fixed))
2187 sprintf(size, "%d", classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
2188 newCall = MkExpCall(QMkExpId("ecere::com::eSystem_New0"), MkListOne(MkExpConstant(size)));
2189 newCall->byReference = 0x1;
2193 strcpy(className, "__ecereClass_");
2194 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && classSym->__anon1.registered->templateClass)
2196 classSym = FindClass(classSym->__anon1.registered->templateClass->fullName);
2197 FullClassNameCat(className, classSym->string, 0x1);
2200 FullClassNameCat(className, inst->_class->__anon1.__anon1.name, 0x1);
2201 DeclareClass(classSym, className);
2202 newCall = MkExpCall(QMkExpId("ecere::com::eInstance_New"), MkListOne(QMkExpId(className)));
2203 newCall->usage = exp->usage;
2204 ProcessExpressionType(newCall);
2205 newCall->expType->passAsTemplate = exp->expType->passAsTemplate;
2206 newCall->byReference = 0x1;
2210 if(inst->members && (*inst->members).first)
2213 exp->__anon1.list = MkList();
2216 ListAdd(exp->__anon1.list, MkExpOp(inst->exp, '=', newCall));
2219 FreeExpression(newCall);
2220 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0x0);
2222 FreeExpression(inst->exp);
2227 exp->__anon1.op.op = '=';
2228 exp->__anon1.op.exp1 = inst->exp;
2229 exp->__anon1.op.exp2 = newCall;
2230 ProcessExpression(inst->exp);
2232 inst->exp = (((void *)0));
2236 if(inst->members && (*inst->members).first)
2238 int __simpleStruct0;
2239 char ecereTemp[100];
2240 struct MembersInit * members;
2241 int tempCount = exp->tempCount;
2242 struct __ecereNameSpace__ecere__sys__OldList * expList;
2244 for(members = (*inst->members).first; members; members = members->next)
2246 if(members->type == 0 && members->__anon1.dataMembers)
2248 struct MemberInit * member;
2250 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2252 if(member->initializer && member->initializer->type == 0)
2254 int __simpleStruct0;
2256 ProcessMemberInitData(member);
2257 tempCount = (__simpleStruct0 = member->initializer->__anon1.exp->tempCount, (tempCount > __simpleStruct0) ? tempCount : __simpleStruct0);
2263 tempCount = ((tempCount > declTempCount) ? tempCount : declTempCount);
2265 curExternal->__anon1.function->tempCount = (__simpleStruct0 = curExternal->__anon1.function->tempCount, (__simpleStruct0 > tempCount) ? __simpleStruct0 : tempCount);
2266 sprintf(ecereTemp, "__ecereInstance%d", tempCount);
2268 exp->__anon1.compound = MkCompoundStmt((((void *)0)), (((void *)0)));
2269 exp->__anon1.compound->__anon1.compound.context = PushContext();
2270 exp->__anon1.compound->__anon1.compound.context->simpleID = exp->__anon1.compound->__anon1.compound.context->parent->simpleID;
2271 exp->__anon1.compound->__anon1.compound.declarations = MkListOne(QMkDeclaration(inst->_class->__anon1.__anon1.name, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(ecereTemp)), MkInitializerAssignment(newCall))));
2272 exp->__anon1.compound->__anon1.compound.statements = MkListOne(MkExpressionStmt((expList = MkList())));
2273 instExp = QMkExpId(ecereTemp);
2274 instExp->tempCount = tempCount;
2275 instExp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
2276 instExp->byReference = 0x1;
2277 ProcessInstMembers(inst, instExp, expList, 0x0);
2278 FreeExpression(instExp);
2281 struct Expression * tmpExp = QMkExpId(ecereTemp);
2283 tmpExp->byReference = 0x1;
2284 ListAdd(expList, tmpExp);
2286 exp->tempCount = tempCount;
2288 declTempCount = ((declTempCount > tempCount) ? declTempCount : tempCount);
2289 PopContext(exp->__anon1.compound->__anon1.compound.context);
2293 struct Expression * prev = exp->prev, * next = exp->next;
2295 FreeType(newCall->destType);
2296 FreeType(newCall->expType);
2297 newCall->destType = exp->destType;
2298 newCall->expType = exp->expType;
2302 ((newCall ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newCall) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newCall)) : 0), newCall = 0);
2310 ProcessInstantiation(inst);
2319 ProcessExpression(exp->__anon1._new.size);
2323 ProcessExpression(exp->__anon1._renew.size);
2324 ProcessExpression(exp->__anon1._renew.exp);
2328 switch(exp->__anon1.op.op)
2331 if(exp->__anon1.op.exp2)
2332 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2333 if(exp->__anon1.op.exp1)
2334 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(0x1)) << 1);
2346 if(exp->__anon1.op.exp2)
2347 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2348 if(exp->__anon1.op.exp1)
2349 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(0x1)) << 1);
2353 if(exp->__anon1.op.exp1)
2354 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(0x1)) << 1);
2356 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2)
2358 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2359 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2365 if(exp->__anon1.op.exp1)
2367 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2371 if(exp->__anon1.op.exp2)
2372 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2388 if(exp->__anon1.op.exp1)
2389 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2390 if(exp->__anon1.op.exp2)
2391 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2394 if(exp->__anon1.op.exp1)
2396 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)))
2398 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
2400 CopyTypeInto(type, exp->__anon1.op.exp1->destType);
2401 type->passAsTemplate = 0x0;
2402 FreeType(exp->__anon1.op.exp1->destType);
2403 exp->__anon1.op.exp1->destType = type;
2405 ProcessExpression(exp->__anon1.op.exp1);
2407 if(exp->__anon1.op.exp2)
2409 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)))
2411 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
2413 CopyTypeInto(type, exp->__anon1.op.exp2->destType);
2414 type->passAsTemplate = 0x0;
2415 FreeType(exp->__anon1.op.exp2->destType);
2416 exp->__anon1.op.exp2->destType = type;
2418 if(exp->__anon1.op.exp1)
2419 exp->__anon1.op.exp2->tempCount = exp->__anon1.op.exp1->tempCount;
2420 ProcessExpression(exp->__anon1.op.exp2);
2427 struct Expression * e;
2429 for(e = (*exp->__anon1.list).first; e; e = e->next)
2431 int __simpleStruct2, __simpleStruct3;
2432 int __simpleStruct0, __simpleStruct1;
2434 e->tempCount = (__simpleStruct0 = e->tempCount, __simpleStruct1 = exp->tempCount, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
2437 e->usage |= (exp->usage & ((((unsigned int)(0x1)) | (((unsigned int)(0x1)) << 2))));
2439 ProcessExpression(e);
2440 exp->tempCount = (__simpleStruct2 = exp->tempCount, __simpleStruct3 = e->tempCount, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
2446 struct Expression * e;
2448 exp->__anon1.index.exp->usage = (exp->__anon1.index.exp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2449 ProcessExpression(exp->__anon1.index.exp);
2450 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
2453 e->usage = (e->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2454 ProcessExpression(e);
2456 exp->tempCount = exp->__anon1.index.exp->tempCount;
2461 struct Expression * e;
2463 ProcessExpression(exp->__anon1.call.exp);
2464 if(exp->__anon1.call.arguments)
2466 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
2468 e->usage = (e->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2469 e->usage = (e->usage & ~0x4) | (((unsigned int)(0x1)) << 2);
2470 ProcessExpression(e);
2477 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2478 ProcessExpression(exp->__anon1.member.exp);
2479 if(!exp->__anon1.member.memberType)
2481 struct Type * type = exp->__anon1.member.exp->expType;
2483 if((type && type->kind == 8 && exp->__anon1.member.member))
2485 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)));
2486 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
2487 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
2488 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
2489 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
2491 if(exp->__anon1.member.thisPtr)
2493 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
2495 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
2499 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, (((void *)0)));
2501 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, (((void *)0)), (((void *)0)), (((void *)0)));
2502 if(!prop && !member)
2504 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, (((void *)0)));
2507 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
2509 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
2513 if(!prop && !member && !method)
2514 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, privateModule);
2515 if(!prop && !member && !method)
2517 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
2521 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
2524 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
2529 exp->__anon1.member.memberType = 1;
2531 prop->dataType = ProcessTypeString(prop->dataTypeString, 0x0);
2532 FreeType(exp->expType);
2533 exp->expType = prop->dataType;
2535 prop->dataType->refCount++;
2539 exp->__anon1.member.memberType = 2;
2540 if(!method->dataType)
2541 ProcessMethodType(method);
2542 FreeType(exp->expType);
2543 exp->expType = method->dataType;
2544 if(method->dataType)
2545 method->dataType->refCount++;
2549 exp->__anon1.member.memberType = 3;
2550 DeclareStruct(_class->fullName, 0x0);
2551 if(!member->dataType)
2552 member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
2553 FreeType(exp->expType);
2554 exp->expType = member->dataType;
2555 if(member->dataType)
2556 member->dataType->refCount++;
2560 exp->__anon1.member.memberType = 4;
2561 FreeType(exp->expType);
2562 exp->expType = MkClassType(revConvert->_class->fullName);
2572 exp->__anon1.cast.exp->usage |= exp->usage;
2573 ProcessExpression(exp->__anon1.cast.exp);
2578 struct Expression * e;
2580 if(((unsigned int)((exp->usage & 0x1) >> 0)))
2581 exp->__anon1.cond.cond->usage = (exp->__anon1.cond.cond->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2582 ProcessExpression(exp->__anon1.cond.cond);
2583 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
2585 if(!e->next && ((unsigned int)((exp->usage & 0x1) >> 0)))
2586 e->usage = (e->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2587 ProcessExpression(e);
2589 if(exp->__anon1.cond.elseExp)
2591 if(((unsigned int)((exp->usage & 0x1) >> 0)))
2592 exp->__anon1.cond.elseExp->usage = (exp->__anon1.cond.elseExp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2593 ProcessExpression(exp->__anon1.cond.elseExp);
2599 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)
2601 ((struct Expression *)(*((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last)->usage = exp->usage;
2603 ProcessStatement(exp->__anon1.compound);
2608 ProcessExpression(exp->__anon1.vaArg.exp);
2613 ProcessInitializer(exp->__anon1.initializer.initializer);
2617 CheckTemplateTypes(exp);
2620 static void ProcessInitializer(struct Initializer * init)
2625 init->__anon1.exp->usage = (init->__anon1.exp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2626 ProcessExpression(init->__anon1.exp);
2630 struct Initializer * i;
2632 for(i = (*init->__anon1.list).first; i; i = i->next)
2633 ProcessInitializer(i);
2639 static void ProcessSpecifier(struct Specifier * spec)
2651 struct Enumerator * e;
2653 if(spec->__anon1.__anon2.list)
2655 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
2658 ProcessExpression(e->exp);
2666 if(spec->__anon1.__anon2.definitions)
2668 struct ClassDef * def;
2670 for(def = (*spec->__anon1.__anon2.definitions).first; def; def = def->next)
2672 if(def->type == 2 && def->__anon1.decl && def->__anon1.decl->type == 0)
2673 ProcessDeclaration(def->__anon1.decl);
2681 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* FreeFunction)(void * ));
2683 extern struct Specifier * _MkSpecifierName(const char * name, struct Symbol * symbol, struct __ecereNameSpace__ecere__sys__OldList * templateArgs);
2685 extern struct Identifier * CopyIdentifier(struct Identifier * id);
2687 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
2689 extern int strcmp(const char * , const char * );
2691 extern struct Expression * MkExpInstance(struct Instantiation * inst);
2693 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
2695 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)
2697 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2698 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
2699 unsigned int someMemberSet = 0x0;
2702 for(dataMember = parentMember->members.first; dataMember; dataMember = dataMember->next)
2704 struct MembersInit * members;
2705 struct MemberInit * member = (((void *)0));
2707 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
2709 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2711 if(!ProcessBracketInst_DataMember(dataMember, inst, subList ? subList : list, dataMember->name ? dataMember : namedParentMember, someMemberSet || parentMemberSet || dataMember->prev))
2714 FreeList(subList, FreeInitializer);
2717 if(subList && (*subList).count)
2719 struct Initializer * init = MkInitializerList(subList);
2722 sprintf(id, "__anon%d", anonID);
2723 init->id = MkIdentifier(id);
2724 ListAdd(list, init);
2725 someMemberSet = 0x1;
2730 someMemberSet = 0x1;
2731 (__ecereNameSpace__ecere__com__eSystem_Delete(subList), subList = 0);
2737 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
2738 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
2739 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
2740 int subMemberStackPos = 0;
2741 unsigned int found = 0x0;
2743 if(inst->members && (*inst->members).first)
2745 for(members = (*inst->members).first; members; members = members->next)
2747 if(members->type == 0)
2749 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2751 if(member->identifiers)
2753 struct Identifier * firstID = (*member->identifiers).first;
2754 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
2755 int _subMemberStackPos = 0;
2756 struct __ecereNameSpace__ecere__com__DataMember * thisMember;
2758 thisMember = firstID ? (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule) : (((void *)0));
2759 if(!thisMember && firstID)
2760 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
2761 if(thisMember && thisMember->memberAccess == 1)
2763 curMember = thisMember;
2764 curClass = curMember->_class;
2765 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
2766 subMemberStackPos = _subMemberStackPos;
2768 if(dataMember == thisMember)
2770 if((*member->identifiers).count > 1 && member->initializer && member->initializer->type == 0)
2772 struct __ecereNameSpace__ecere__sys__OldList * partList = MkList();
2773 struct Symbol * symbol;
2774 struct Specifier * spec;
2775 struct MembersInit * nextMembers;
2776 struct MemberInit * next = member->next;
2778 if(!dataMember->dataType)
2779 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
2780 symbol = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2781 spec = _MkSpecifierName(dataMember->dataTypeString, symbol, (((void *)0)));
2783 struct __ecereNameSpace__ecere__sys__OldList * identifiers = MkList();
2784 struct Identifier * id;
2786 for(id = ((struct Identifier *)(*member->identifiers).first)->next; id; id = id->next)
2787 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*identifiers), CopyIdentifier(id));
2788 ListAdd(partList, MkMemberInit(identifiers, MkInitializerAssignment(member->initializer->__anon1.exp)));
2790 for(nextMembers = members; nextMembers; nextMembers = nextMembers->next)
2792 if(!nextMembers->__anon1.dataMembers)
2794 if(members != nextMembers)
2795 next = (*nextMembers->__anon1.dataMembers).first;
2796 if(nextMembers->type == 0)
2798 struct MemberInit * nextMember;
2800 for(nextMember = next; nextMember; nextMember = next, next = nextMember ? nextMember->next : (((void *)0)))
2802 struct Identifier * nextID = (*nextMember->identifiers).first;
2804 if(nextMember->identifiers && (*nextMember->identifiers).count > 1 && !strcmp(firstID->string, nextID->string))
2806 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMembers->__anon1.dataMembers), nextMember);
2807 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMember->identifiers), nextID);
2808 ListAdd(partList, nextMember);
2813 member->initializer->__anon1.exp = MkExpInstance(MkInstantiation(spec, (((void *)0)), MkListOne(MkMembersInitList(partList))));
2821 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
2822 if(curMember == dataMember)
2834 if(member && member->initializer && member->initializer->type == 0)
2836 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
2838 if(namedParentMember->type == 1 && dataMember->name)
2839 init->id = MkIdentifier(dataMember->name);
2840 if(member->initializer->__anon1.exp->type == 1 && member->initializer->__anon1.exp->expType && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered->type == 1)
2842 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2844 ProcessBracketInst(member->initializer->__anon1.exp->__anon1.instance, subList);
2845 FreeExpression(member->initializer->__anon1.exp);
2846 if((*subList).count)
2849 init->__anon1.list = subList;
2853 FreeInitializer(init);
2854 init = (((void *)0));
2859 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
2860 ProcessExpression(member->initializer->__anon1.exp);
2862 init->__anon1.exp = member->initializer->__anon1.exp;
2865 ListAdd(list, init);
2866 member->initializer->__anon1.exp = (((void *)0));
2867 FreeInitializer(member->initializer);
2868 member->initializer = (((void *)0));
2869 someMemberSet = 0x1;
2871 else if(member && member->initializer && member->initializer->type == 1)
2873 if(namedParentMember->type == 1 && dataMember->name)
2874 member->initializer->id = MkIdentifier(dataMember->name);
2875 ListAdd(list, member->initializer);
2876 member->initializer = (((void *)0));
2877 someMemberSet = 0x1;
2879 else if(dataMember && dataMember->dataTypeString && parentMember->type != 1 && namedParentMember->type != 1)
2881 struct Symbol * classSym;
2882 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
2884 if(namedParentMember->type == 1 && dataMember->name)
2885 init->id = MkIdentifier(dataMember->name);
2886 if(!dataMember->dataType)
2887 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
2888 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2889 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2891 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2892 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
2893 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
2895 ProcessBracketInst(inst, subList);
2897 if((*subList).count)
2900 init->__anon1.list = subList;
2904 FreeInitializer(init);
2905 init = (((void *)0));
2911 init->__anon1.exp = MkExpConstant("0");
2913 someMemberSet = 0x1;
2915 ListAdd(list, init);
2919 if(!someMemberSet && !parentMemberSet)
2921 struct Symbol * classSym;
2922 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
2924 dataMember = parentMember->members.first;
2925 if(namedParentMember->type == 1 && dataMember->name)
2926 init->id = MkIdentifier(dataMember->name);
2927 if(!dataMember->dataType && dataMember->dataTypeString)
2928 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
2929 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2930 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2932 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2933 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
2934 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
2936 ProcessBracketInst(inst, subList);
2939 init->__anon1.list = subList;
2944 init->__anon1.exp = MkExpConstant("0");
2946 ListAdd(list, init);
2951 extern void Compiler_Error(const char * format, ...);
2953 extern const char * __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char * string, const char * stringAndContext);
2955 static unsigned int ProcessBracketInst(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list)
2957 static int recursionCount = 0;
2958 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2959 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
2962 if(recursionCount > 500)
2965 while(_class != classSym->__anon1.registered)
2967 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
2968 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
2970 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
2972 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
2974 if(!dataMember->isProperty && !dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
2976 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2978 if(!ProcessBracketInst_DataMember(dataMember, inst, subList ? subList : list, dataMember, 0x0))
2981 FreeList(subList, FreeInitializer);
2985 if(dataMember->type == 2 || (subList && (*subList).count))
2987 struct Initializer * init = MkInitializerList(subList);
2990 sprintf(id, "__anon%d", anonID);
2991 init->id = MkIdentifier(id);
2992 ListAdd(list, init);
2995 (__ecereNameSpace__ecere__com__eSystem_Delete(subList), subList = 0);
3000 struct MembersInit * members;
3001 struct MemberInit * member = (((void *)0));
3002 unsigned int found = 0x0;
3004 if(inst->members && (*inst->members).first)
3006 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
3007 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
3008 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
3009 int subMemberStackPos = 0;
3011 for(members = (*inst->members).first; members; members = members->next)
3013 if(members->type == 0)
3015 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
3017 struct Identifier * firstID = member->identifiers ? (*member->identifiers).first : (((void *)0));
3021 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
3022 int _subMemberStackPos = 0;
3023 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
3026 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
3029 curMember = thisMember;
3030 curClass = curMember->_class;
3031 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
3032 subMemberStackPos = _subMemberStackPos;
3034 if(curMember == dataMember)
3036 if(dataMember->isProperty)
3038 if(!((struct __ecereNameSpace__ecere__com__Property *)dataMember)->Set)
3040 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No set defined for property %s\n", (((void *)0))), dataMember->name);
3046 if((*member->identifiers).count > 1 && member->initializer && member->initializer->type == 0)
3048 struct __ecereNameSpace__ecere__sys__OldList * partList = MkList();
3049 struct Specifier * spec;
3050 struct MembersInit * nextMembers;
3051 struct MemberInit * next = member->next;
3052 struct Symbol * symbol;
3054 if(!dataMember->dataType)
3055 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
3056 symbol = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3057 spec = _MkSpecifierName(dataMember->dataTypeString, symbol, (((void *)0)));
3058 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*member->identifiers), firstID);
3059 ListAdd(partList, MkMemberInit(member->identifiers, MkInitializerAssignment(member->initializer->__anon1.exp)));
3060 for(nextMembers = members; nextMembers; nextMembers = nextMembers->next)
3062 if(!nextMembers->__anon1.dataMembers)
3064 if(members != nextMembers)
3065 next = (*nextMembers->__anon1.dataMembers).first;
3066 if(nextMembers->type == 0)
3068 struct MemberInit * nextMember;
3070 for(nextMember = next; nextMember; nextMember = next, next = nextMember ? nextMember->next : (((void *)0)))
3072 struct Identifier * nextID = (*nextMember->identifiers).first;
3074 if(nextMember->identifiers && (*nextMember->identifiers).count > 1 && !strcmp(firstID->string, nextID->string))
3076 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMembers->__anon1.dataMembers), nextMember);
3077 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMember->identifiers), nextID);
3078 ListAdd(partList, nextMember);
3083 member->initializer->__anon1.exp = MkExpInstance(MkInstantiation(spec, (((void *)0)), MkListOne(MkMembersInitList(partList))));
3084 member->identifiers = (((void *)0));
3092 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
3093 if(curMember == dataMember)
3095 if(dataMember->isProperty)
3097 if(!((struct __ecereNameSpace__ecere__com__Property *)dataMember)->Set)
3099 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No set defined for property %s\n", (((void *)0))), dataMember->name);
3115 if(dataMember->isProperty)
3117 if(member && member->initializer && member->initializer->type == 0)
3119 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)
3121 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3123 ProcessBracketInst(member->initializer->__anon1.exp->__anon1.instance, subList);
3124 FreeExpression(member->initializer->__anon1.exp);
3125 member->initializer->__anon1.exp = (((void *)0));
3126 ListAdd(list, MkInitializerList(subList));
3130 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3131 ProcessExpression(member->initializer->__anon1.exp);
3132 ListAdd(list, MkInitializerAssignment(CopyExpression(member->initializer->__anon1.exp)));
3134 member->takeOutExp = 0x1;
3136 else if(member && member->initializer && member->initializer->type == 1)
3138 ListAdd(list, member->initializer);
3139 member->initializer = (((void *)0));
3141 else if(dataMember && dataMember->dataTypeString)
3143 struct Symbol * classSym;
3145 if(!dataMember->dataType)
3146 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0x0);
3147 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3148 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3150 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3151 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
3152 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
3154 ProcessBracketInst(inst, subList);
3156 ListAdd(list, MkInitializerList(subList));
3158 else if(dataMember->dataType->kind == 12)
3159 ListAdd(list, MkInitializerList(MkListOne(MkInitializerAssignment(MkExpConstant("0")))));
3161 ListAdd(list, MkInitializerAssignment(MkExpConstant("0")));
3166 if(inst->members && (*inst->members).first)
3168 struct MembersInit * members;
3169 struct MemberInit * member = (((void *)0));
3171 for(members = (*inst->members).first; members; members = members->next)
3173 if(members->type == 0)
3175 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
3177 if(member->takeOutExp)
3179 FreeInitializer(member->initializer);
3180 member->initializer = (((void *)0));
3190 static void ProcessDeclaration(struct Declaration * decl)
3202 if(decl->__anon1.__anon1.specifiers)
3204 struct Specifier * s;
3206 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
3208 ProcessSpecifier(s);
3211 if(decl->__anon1.__anon1.declarators)
3213 struct InitDeclarator * d;
3215 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
3218 ProcessInitializer(d->initializer);
3223 curDecl = (((void *)0));
3230 struct Instantiation * inst = decl->__anon1.inst;
3234 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
3238 struct Statement * stmt;
3240 if(!inst->isConstant || (classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 0 || classSym->__anon1.registered->type == 5)))
3243 decl->__anon1.__anon1.specifiers = MkListOne(MkSpecifierName(inst->_class->__anon1.__anon1.name));
3244 if(decl->declMode == 3)
3246 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.__anon1.specifiers), (((void *)0)), MkSpecifier(STATIC));
3248 decl->__anon1.__anon1.declarators = MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(inst->exp->__anon1.__anon1.identifier->string)), (((void *)0))));
3249 ProcessDeclaration(decl);
3250 CreateInstancesBody();
3252 struct Expression * exp = MkExpInstance(inst);
3254 stmt = MkExpressionStmt(MkListOne(exp));
3255 ListAdd(createInstancesBody->__anon1.compound.statements, stmt);
3256 ProcessExpressionType(exp);
3258 if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 0))
3260 ListAdd(createInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_IncRef")), MkListOne(CopyExpression(inst->exp))))));
3262 struct Expression * exp = MkExpOp((((void *)0)), DELETE, CopyExpression(inst->exp));
3264 ListAdd(destroyInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(exp)));
3265 ProcessExpressionType(exp);
3268 else if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 5))
3270 struct Expression * exp = MkExpOp((((void *)0)), DELETE, CopyExpression(inst->exp));
3272 ListAdd(destroyInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(exp)));
3273 ProcessExpressionType(exp);
3279 CreateInstancesBody();
3283 char className[1024];
3285 className[0] = (char)0;
3287 decl->__anon1.__anon1.specifiers = MkList();
3288 decl->__anon1.__anon1.declarators = MkList();
3289 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
3291 struct __ecereNameSpace__ecere__sys__OldList list =
3296 ProcessInstMembers(inst, inst->exp, &list, 0x0);
3297 ProcessExpression(inst->exp);
3298 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3299 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(list.first)));
3300 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3302 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 3)
3304 struct __ecereNameSpace__ecere__sys__OldList list =
3309 ProcessInstMembers(inst, inst->exp, &list, 0x0);
3310 ProcessExpression(inst->exp);
3311 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3312 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(list.first)));
3313 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3315 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3317 struct Expression * exp;
3319 DeclareStruct(inst->_class->__anon1.__anon1.name, 0x0);
3320 ProcessExpression(inst->exp);
3324 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3325 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), (((void *)0))));
3326 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3330 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
3332 if(ProcessBracketInst(inst, list))
3334 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3335 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerList(list)));
3336 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3340 FreeList(list, FreeInitializer);
3341 exp = MkExpBrackets(MkList());
3342 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0x1);
3343 ListAdd(exp->__anon1.list, CopyExpression(inst->exp));
3344 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3345 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(exp)));
3346 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3353 struct Expression * newCall;
3355 strcpy(className, "__ecereClass_");
3356 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && classSym->__anon1.registered->templateClass)
3358 classSym = FindClass(classSym->__anon1.registered->templateClass->fullName);
3359 FullClassNameCat(className, classSym->string, 0x1);
3362 FullClassNameCat(className, inst->_class->__anon1.__anon1.name, 0x1);
3364 DeclareClass(classSym, className);
3365 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && (classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->fixed : classSym->__anon1.registered->fixed))
3369 sprintf(size, "%d", classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
3370 newCall = MkExpCall(QMkExpId("ecere::com::eSystem_New0"), MkListOne(MkExpConstant(size)));
3374 newCall = MkExpCall(QMkExpId("ecere::com::eInstance_New"), MkListOne(QMkExpId(className)));
3375 ProcessExpressionType(newCall);
3376 newCall->byReference = 0x1;
3380 struct Expression * exp, * newExp;
3381 struct Identifier * id = CopyIdentifier(inst->exp->__anon1.__anon1.identifier);
3383 if(inst->members && (*inst->members).first)
3385 newExp = MkExpOp(CopyExpression(inst->exp), '=', newCall);
3386 exp = MkExpBrackets(MkList());
3387 ListAdd(exp->__anon1.list, newExp);
3388 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0x0);
3389 ListAdd(exp->__anon1.list, inst->exp);
3390 ProcessExpression(inst->exp);
3391 inst->exp = (((void *)0));
3395 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3396 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(id), MkInitializerAssignment(exp)));
3399 FreeExpression(newCall);
3405 ProcessInstantiation(inst);
3410 if(decl->__anon1.__anon1.specifiers)
3412 struct Specifier * spec;
3414 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
3415 ProcessSpecifier(spec);
3422 static void ProcessStatement(struct Statement * stmt)
3428 if(stmt->__anon1.labeled.stmt)
3429 ProcessStatement(stmt->__anon1.labeled.stmt);
3432 if(stmt->__anon1.caseStmt.exp)
3433 ProcessExpression(stmt->__anon1.caseStmt.exp);
3434 if(stmt->__anon1.caseStmt.stmt)
3435 ProcessStatement(stmt->__anon1.caseStmt.stmt);
3439 if(stmt->__anon1.compound.context)
3441 struct Declaration * decl;
3442 struct Statement * s;
3443 struct Statement * prevCompound = curCompound;
3444 struct Context * prevContext = curContext;
3446 if(!stmt->__anon1.compound.isSwitch)
3449 curContext = stmt->__anon1.compound.context;
3451 if(stmt->__anon1.compound.declarations)
3453 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
3454 ProcessDeclaration(decl);
3456 if(stmt->__anon1.compound.statements)
3458 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
3460 ProcessStatement(s);
3463 curCompound = prevCompound;
3464 curContext = prevContext;
3470 struct Expression * exp;
3472 if(stmt->__anon1.expressions)
3474 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
3476 ProcessExpression(exp);
3483 struct Expression * exp;
3485 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3486 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
3488 ProcessExpression(exp);
3490 if(stmt->__anon1.ifStmt.stmt)
3491 ProcessStatement(stmt->__anon1.ifStmt.stmt);
3492 if(stmt->__anon1.ifStmt.elseStmt)
3493 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
3498 struct Expression * exp;
3500 ((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3501 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
3502 ProcessExpression(exp);
3503 ProcessStatement(stmt->__anon1.switchStmt.stmt);
3508 if(stmt->__anon1.whileStmt.exp)
3510 struct Expression * exp;
3512 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3513 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
3515 ProcessExpression(exp);
3518 if(stmt->__anon1.whileStmt.stmt)
3519 ProcessStatement(stmt->__anon1.whileStmt.stmt);
3524 if(stmt->__anon1.doWhile.exp)
3526 struct Expression * exp;
3528 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3529 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
3531 ProcessExpression(exp);
3534 if(stmt->__anon1.doWhile.stmt)
3535 ProcessStatement(stmt->__anon1.doWhile.stmt);
3540 struct Expression * exp;
3542 if(stmt->__anon1.forStmt.init)
3543 ProcessStatement(stmt->__anon1.forStmt.init);
3544 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
3546 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3548 if(stmt->__anon1.forStmt.check)
3549 ProcessStatement(stmt->__anon1.forStmt.check);
3550 if(stmt->__anon1.forStmt.increment)
3552 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
3553 ProcessExpression(exp);
3555 if(stmt->__anon1.forStmt.stmt)
3556 ProcessStatement(stmt->__anon1.forStmt.stmt);
3567 struct Expression * exp;
3569 if(stmt->__anon1.expressions && (*stmt->__anon1.expressions).last)
3571 ((struct Expression *)(*stmt->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(0x1)) << 0);
3572 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
3574 ProcessExpression(exp);
3581 ProcessDeclaration(stmt->__anon1.decl);
3586 struct AsmField * field;
3588 if(stmt->__anon1.asmStmt.inputFields)
3590 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
3591 if(field->expression)
3592 ProcessExpression(field->expression);
3594 if(stmt->__anon1.asmStmt.outputFields)
3596 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
3597 if(field->expression)
3598 ProcessExpression(field->expression);
3600 if(stmt->__anon1.asmStmt.clobberedFields)
3602 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
3603 if(field->expression)
3604 ProcessExpression(field->expression);
3611 static void ProcessFunction(struct FunctionDefinition * function)
3615 yylloc = function->loc;
3616 ProcessStatement(function->body);
3620 extern struct Type * MkClassTypeSymbol(struct Symbol * symbol);
3622 extern void FreeSymbol(struct Symbol * symbol);
3624 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
3626 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
3628 void ProcessInstantiations()
3630 struct External * external;
3632 for(external = (*ast).first; external; external = external->next)
3634 curExternal = external;
3635 if(external->type == 1)
3637 if(external->__anon1.declaration)
3638 ProcessDeclaration(external->__anon1.declaration);
3640 else if(external->type == 0)
3642 ProcessFunction(external->__anon1.function);
3644 else if(external->type == 2)
3646 struct ClassDefinition * _class = external->__anon1._class;
3648 if(_class->definitions)
3650 struct ClassDef * def;
3652 for(def = (*_class->definitions).first; def; def = def->next)
3656 curExternal = def->__anon1.function->declarator ? def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal : external;
3657 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
3659 else if(def->type == 2 && def->__anon1.decl->type == 2)
3661 ProcessInstantiation(def->__anon1.decl->__anon1.inst);
3663 else if(def->type == 1 && def->__anon1.defProperties)
3665 struct MemberInit * defProperty;
3666 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
3668 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3669 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
3671 ProcessMemberInitData(defProperty);
3673 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3674 FreeSymbol(thisSymbol);
3676 else if(def->type == 3 && def->__anon1.propertyDef)
3678 struct PropertyDef * prop = def->__anon1.propertyDef;
3679 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
3681 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3684 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
3685 ProcessStatement(prop->setStmt);
3689 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
3690 ProcessStatement(prop->getStmt);
3694 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
3695 ProcessStatement(prop->issetStmt);
3697 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3698 FreeSymbol(thisSymbol);
3700 else if(def->type == 4 && def->__anon1.propertyWatch)
3702 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
3703 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
3705 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3706 if(propertyWatch->compound)
3708 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3709 curExternal = (((void *)0));
3710 ProcessStatement(propertyWatch->compound);
3712 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
3713 FreeSymbol(thisSymbol);
3721 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
3723 struct __ecereNameSpace__ecere__com__GlobalFunction;
3725 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);
3727 void __ecereRegisterModule_pass16(struct __ecereNameSpace__ecere__com__Instance * module)
3729 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
3731 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareClass", "void DeclareClass(Symbol classSym, const char * className)", DeclareClass, module, 1);
3732 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionInstPass", "void ProcessExpressionInstPass(Expression exp)", ProcessExpressionInstPass, module, 2);
3733 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiations", "void ProcessInstantiations(void)", ProcessInstantiations, module, 1);
3736 void __ecereUnregisterModule_pass16(struct __ecereNameSpace__ecere__com__Instance * module)