1 /* Code generated from eC source file: pass1.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 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
35 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
37 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
39 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
41 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
43 struct __ecereNameSpace__ecere__sys__BTNode;
45 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
47 struct __ecereNameSpace__ecere__sys__BinaryTree
49 struct __ecereNameSpace__ecere__sys__BTNode * root;
51 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
52 void (* FreeKey)(void * key);
53 } __attribute__ ((gcc_struct));
55 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
57 struct __ecereNameSpace__ecere__sys__OldList
64 } __attribute__ ((gcc_struct));
66 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
68 struct __ecereNameSpace__ecere__com__Method
71 struct __ecereNameSpace__ecere__com__Method * parent;
72 struct __ecereNameSpace__ecere__com__Method * left;
73 struct __ecereNameSpace__ecere__com__Method * right;
78 struct __ecereNameSpace__ecere__com__Class * _class;
80 char * dataTypeString;
81 struct Type * dataType;
83 } __attribute__ ((gcc_struct));
85 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
87 struct __ecereNameSpace__ecere__com__Property
89 struct __ecereNameSpace__ecere__com__Property * prev;
90 struct __ecereNameSpace__ecere__com__Property * next;
92 unsigned int isProperty;
95 struct __ecereNameSpace__ecere__com__Class * _class;
96 char * dataTypeString;
97 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
98 struct Type * dataType;
99 void (* Set)(void * , int);
100 int (* Get)(void * );
101 unsigned int (* IsSet)(void * );
105 unsigned int conversion;
106 unsigned int watcherOffset;
108 unsigned int compiled;
109 unsigned int selfWatchable;
110 unsigned int isWatchable;
111 } __attribute__ ((gcc_struct));
113 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
121 } __attribute__ ((gcc_struct));
123 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
127 struct CodePosition start;
128 struct CodePosition end;
129 } __attribute__ ((gcc_struct));
131 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
135 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
139 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
141 struct ClassDefinition
143 struct ClassDefinition * prev;
144 struct ClassDefinition * next;
146 struct Specifier * _class;
147 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
148 struct __ecereNameSpace__ecere__sys__OldList * definitions;
149 struct Symbol * symbol;
150 struct Location blockStart;
151 struct Location nameLoc;
154 unsigned int deleteWatchable;
155 } __attribute__ ((gcc_struct));
157 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
161 struct Context * parent;
162 struct __ecereNameSpace__ecere__sys__BinaryTree types;
163 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
164 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
165 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
168 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
169 struct ClassDefinition * classDef;
170 unsigned int templateTypesOnly;
171 unsigned int hasNameSpace;
172 } __attribute__ ((gcc_struct));
174 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
176 struct Instantiation;
178 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
182 struct Declaration * prev;
183 struct Declaration * next;
190 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
191 struct __ecereNameSpace__ecere__sys__OldList * declarators;
192 } __attribute__ ((gcc_struct));
193 struct Instantiation * inst;
196 struct Identifier * id;
197 struct Expression * exp;
198 } __attribute__ ((gcc_struct));
199 } __attribute__ ((gcc_struct));
200 struct Specifier * extStorage;
201 struct Symbol * symbol;
203 } __attribute__ ((gcc_struct));
205 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
209 struct Statement * prev;
210 struct Statement * next;
215 struct __ecereNameSpace__ecere__sys__OldList * expressions;
218 struct Identifier * id;
219 struct Statement * stmt;
220 } __attribute__ ((gcc_struct)) labeled;
223 struct Expression * exp;
224 struct Statement * stmt;
225 } __attribute__ ((gcc_struct)) caseStmt;
228 struct __ecereNameSpace__ecere__sys__OldList * declarations;
229 struct __ecereNameSpace__ecere__sys__OldList * statements;
230 struct Context * context;
231 unsigned int isSwitch;
232 } __attribute__ ((gcc_struct)) compound;
235 struct __ecereNameSpace__ecere__sys__OldList * exp;
236 struct Statement * stmt;
237 struct Statement * elseStmt;
238 } __attribute__ ((gcc_struct)) ifStmt;
241 struct __ecereNameSpace__ecere__sys__OldList * exp;
242 struct Statement * stmt;
243 } __attribute__ ((gcc_struct)) switchStmt;
246 struct __ecereNameSpace__ecere__sys__OldList * exp;
247 struct Statement * stmt;
248 } __attribute__ ((gcc_struct)) whileStmt;
251 struct __ecereNameSpace__ecere__sys__OldList * exp;
252 struct Statement * stmt;
253 } __attribute__ ((gcc_struct)) doWhile;
256 struct Statement * init;
257 struct Statement * check;
258 struct __ecereNameSpace__ecere__sys__OldList * increment;
259 struct Statement * stmt;
260 } __attribute__ ((gcc_struct)) forStmt;
263 struct Identifier * id;
264 } __attribute__ ((gcc_struct)) gotoStmt;
267 struct Specifier * spec;
269 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
270 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
271 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
272 } __attribute__ ((gcc_struct)) asmStmt;
275 struct Expression * watcher;
276 struct Expression * object;
277 struct __ecereNameSpace__ecere__sys__OldList * watches;
278 } __attribute__ ((gcc_struct)) _watch;
281 struct Identifier * id;
282 struct __ecereNameSpace__ecere__sys__OldList * exp;
283 struct __ecereNameSpace__ecere__sys__OldList * filter;
284 struct Statement * stmt;
285 } __attribute__ ((gcc_struct)) forEachStmt;
286 struct Declaration * decl;
287 } __attribute__ ((gcc_struct));
288 } __attribute__ ((gcc_struct));
290 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
294 struct TypeName * prev;
295 struct TypeName * next;
297 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
298 struct Declarator * declarator;
300 struct Expression * bitCount;
301 } __attribute__ ((gcc_struct));
303 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
307 struct Initializer * prev;
308 struct Initializer * next;
313 struct Expression * exp;
314 struct __ecereNameSpace__ecere__sys__OldList * list;
315 } __attribute__ ((gcc_struct));
316 unsigned int isConstant;
317 } __attribute__ ((gcc_struct));
319 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
321 struct __ecereNameSpace__ecere__com__DataValue
336 } __attribute__ ((gcc_struct));
337 } __attribute__ ((gcc_struct));
339 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
343 struct Expression * prev;
344 struct Expression * next;
352 struct Identifier * identifier;
353 } __attribute__ ((gcc_struct));
354 struct Statement * compound;
355 struct Instantiation * instance;
357 struct __ecereNameSpace__ecere__sys__OldList * list;
360 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
361 struct Declarator * decl;
362 } __attribute__ ((gcc_struct)) _classExp;
365 struct Identifier * id;
366 } __attribute__ ((gcc_struct)) classData;
369 struct Expression * exp;
370 struct __ecereNameSpace__ecere__sys__OldList * arguments;
371 struct Location argLoc;
372 } __attribute__ ((gcc_struct)) call;
375 struct Expression * exp;
376 struct __ecereNameSpace__ecere__sys__OldList * index;
377 } __attribute__ ((gcc_struct)) index;
380 struct Expression * exp;
381 struct Identifier * member;
383 unsigned int thisPtr;
384 } __attribute__ ((gcc_struct)) member;
388 struct Expression * exp1;
389 struct Expression * exp2;
390 } __attribute__ ((gcc_struct)) op;
391 struct TypeName * typeName;
392 struct Specifier * _class;
395 struct TypeName * typeName;
396 struct Expression * exp;
397 } __attribute__ ((gcc_struct)) cast;
400 struct Expression * cond;
401 struct __ecereNameSpace__ecere__sys__OldList * exp;
402 struct Expression * elseExp;
403 } __attribute__ ((gcc_struct)) cond;
406 struct TypeName * typeName;
407 struct Expression * size;
408 } __attribute__ ((gcc_struct)) _new;
411 struct TypeName * typeName;
412 struct Expression * size;
413 struct Expression * exp;
414 } __attribute__ ((gcc_struct)) _renew;
418 struct Identifier * id;
419 } __attribute__ ((gcc_struct)) db;
422 struct Expression * ds;
423 struct Expression * name;
424 } __attribute__ ((gcc_struct)) dbopen;
427 struct TypeName * typeName;
428 struct Initializer * initializer;
429 } __attribute__ ((gcc_struct)) initializer;
432 struct Expression * exp;
433 struct TypeName * typeName;
434 } __attribute__ ((gcc_struct)) vaArg;
435 } __attribute__ ((gcc_struct));
436 unsigned int debugValue;
437 struct __ecereNameSpace__ecere__com__DataValue val;
439 unsigned int hasAddress;
440 struct Type * expType;
441 struct Type * destType;
444 unsigned int byReference;
445 unsigned int isConstant;
446 unsigned int addedThis;
447 unsigned int needCast;
448 unsigned int thisPtr;
449 } __attribute__ ((gcc_struct));
451 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
453 struct TemplateDatatype
455 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
456 struct Declarator * decl;
457 } __attribute__ ((gcc_struct));
459 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
461 struct TemplateArgument
463 struct TemplateArgument * prev;
464 struct TemplateArgument * next;
466 struct Identifier * name;
470 struct Expression * expression;
471 struct Identifier * identifier;
472 struct TemplateDatatype * templateDatatype;
473 } __attribute__ ((gcc_struct));
474 } __attribute__ ((gcc_struct));
476 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
478 struct TemplateParameter
480 struct TemplateParameter * prev;
481 struct TemplateParameter * next;
484 struct Identifier * identifier;
487 struct TemplateDatatype * dataType;
489 } __attribute__ ((gcc_struct));
490 struct TemplateArgument * defaultArgument;
491 char * dataTypeString;
492 struct Type * baseType;
493 } __attribute__ ((gcc_struct));
495 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
499 struct Specifier * prev;
500 struct Specifier * next;
508 struct ExtDecl * extDecl;
510 struct Symbol * symbol;
511 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
512 } __attribute__ ((gcc_struct));
515 struct Identifier * id;
516 struct __ecereNameSpace__ecere__sys__OldList * list;
517 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
518 struct __ecereNameSpace__ecere__sys__OldList * definitions;
519 unsigned int addNameSpace;
520 struct Context * ctx;
521 struct ExtDecl * extDeclStruct;
522 } __attribute__ ((gcc_struct));
523 struct Expression * expression;
524 struct Specifier * _class;
525 struct TemplateParameter * templateParameter;
526 } __attribute__ ((gcc_struct));
527 } __attribute__ ((gcc_struct));
529 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
533 struct Identifier * prev;
534 struct Identifier * next;
536 struct Symbol * classSym;
537 struct Specifier * _class;
539 struct Identifier * badID;
540 } __attribute__ ((gcc_struct));
542 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
546 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
550 struct Declarator * prev;
551 struct Declarator * next;
554 struct Symbol * symbol;
555 struct Declarator * declarator;
558 struct Identifier * identifier;
561 struct Expression * exp;
562 struct Expression * posExp;
563 struct Attrib * attrib;
564 } __attribute__ ((gcc_struct)) structDecl;
567 struct Expression * exp;
568 struct Specifier * enumClass;
569 } __attribute__ ((gcc_struct)) array;
572 struct __ecereNameSpace__ecere__sys__OldList * parameters;
573 } __attribute__ ((gcc_struct)) function;
576 struct Pointer * pointer;
577 } __attribute__ ((gcc_struct)) pointer;
580 struct ExtDecl * extended;
581 } __attribute__ ((gcc_struct)) extended;
582 } __attribute__ ((gcc_struct));
583 } __attribute__ ((gcc_struct));
585 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
587 struct FunctionDefinition
589 struct FunctionDefinition * prev;
590 struct FunctionDefinition * next;
592 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
593 struct Declarator * declarator;
594 struct __ecereNameSpace__ecere__sys__OldList * declarations;
595 struct Statement * body;
596 struct __ecereNameSpace__ecere__com__Class * _class;
597 struct __ecereNameSpace__ecere__sys__OldList attached;
600 struct Symbol * propSet;
602 unsigned int propertyNoThis;
603 } __attribute__ ((gcc_struct));
605 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
609 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
613 struct External * prev;
614 struct External * next;
617 struct Symbol * symbol;
620 struct FunctionDefinition * function;
621 struct ClassDefinition * _class;
622 struct Declaration * declaration;
624 struct Identifier * id;
625 struct DBTableDef * table;
626 } __attribute__ ((gcc_struct));
628 } __attribute__ ((gcc_struct));
630 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
634 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
638 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
643 struct Symbol * parent;
644 struct Symbol * left;
645 struct Symbol * right;
650 struct __ecereNameSpace__ecere__com__Method * method;
651 struct __ecereNameSpace__ecere__com__Property * _property;
652 struct __ecereNameSpace__ecere__com__Class * registered;
653 } __attribute__ ((gcc_struct));
660 struct External * pointerExternal;
661 struct External * structExternal;
662 } __attribute__ ((gcc_struct));
665 struct External * externalGet;
666 struct External * externalSet;
667 struct External * externalPtr;
668 struct External * externalIsSet;
669 } __attribute__ ((gcc_struct));
672 struct External * methodExternal;
673 struct External * methodCodeExternal;
674 } __attribute__ ((gcc_struct));
675 } __attribute__ ((gcc_struct));
676 unsigned int imported;
677 unsigned int declaredStructSym;
678 struct __ecereNameSpace__ecere__com__Class * _class;
679 unsigned int declaredStruct;
680 unsigned int needConstructor;
681 unsigned int needDestructor;
682 char * constructorName;
685 char * destructorName;
686 struct ModuleImport * module;
687 struct ClassImport * _import;
688 struct Location nameLoc;
689 unsigned int isParam;
690 unsigned int isRemote;
691 unsigned int isStruct;
692 unsigned int fireWatchersDone;
694 unsigned int classData;
695 unsigned int isStatic;
697 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
698 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
699 struct Context * ctx;
701 struct Expression * propCategory;
702 } __attribute__ ((gcc_struct));
704 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
713 struct Symbol * _class;
716 struct __ecereNameSpace__ecere__sys__OldList members;
718 } __attribute__ ((gcc_struct));
721 struct Type * returnType;
722 struct __ecereNameSpace__ecere__sys__OldList params;
723 struct Symbol * thisClass;
724 unsigned int staticMethod;
725 struct TemplateParameter * thisClassTemplate;
726 } __attribute__ ((gcc_struct));
729 struct __ecereNameSpace__ecere__com__Method * method;
730 struct __ecereNameSpace__ecere__com__Class * methodClass;
731 struct __ecereNameSpace__ecere__com__Class * usedClass;
732 } __attribute__ ((gcc_struct));
735 struct Type * arrayType;
737 struct Expression * arraySizeExp;
738 unsigned int freeExp;
739 struct Symbol * enumClass;
740 } __attribute__ ((gcc_struct));
742 struct TemplateParameter * templateParameter;
743 } __attribute__ ((gcc_struct));
753 unsigned int isSigned : 1;
754 unsigned int constant : 1;
755 unsigned int truth : 1;
756 unsigned int byReference : 1;
757 unsigned int extraParam : 1;
758 unsigned int directClassAccess : 1;
759 unsigned int computing : 1;
760 unsigned int keepCast : 1;
761 unsigned int passAsTemplate : 1;
762 unsigned int dllExport : 1;
763 unsigned int attrStdcall : 1;
764 unsigned int declaredWithStruct : 1;
765 } __attribute__ ((gcc_struct));
767 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
769 struct __ecereNameSpace__ecere__com__Class
771 struct __ecereNameSpace__ecere__com__Class * prev;
772 struct __ecereNameSpace__ecere__com__Class * next;
778 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
779 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
782 struct __ecereNameSpace__ecere__com__Class * base;
783 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
784 struct __ecereNameSpace__ecere__sys__BinaryTree members;
785 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
786 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
787 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
788 struct __ecereNameSpace__ecere__sys__OldList derivatives;
792 struct __ecereNameSpace__ecere__com__Instance * module;
793 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
794 char * dataTypeString;
795 struct Type * dataType;
797 int defaultAlignment;
798 void (* Initialize)();
800 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
801 char * designerClass;
802 unsigned int noExpansion;
803 char * defaultProperty;
804 unsigned int comRedefinition;
806 unsigned int isRemote;
807 unsigned int internalDecl;
809 unsigned int computeSize;
811 int destructionWatchOffset;
813 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
814 int inheritanceAccess;
817 struct __ecereNameSpace__ecere__sys__OldList conversions;
818 struct __ecereNameSpace__ecere__sys__OldList templateParams;
819 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
820 struct __ecereNameSpace__ecere__com__Class * templateClass;
821 struct __ecereNameSpace__ecere__sys__OldList templatized;
823 unsigned int isInstanceClass;
824 unsigned int byValueSystemClass;
825 } __attribute__ ((gcc_struct));
827 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name);
829 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
831 struct __ecereNameSpace__ecere__com__Instance
834 struct __ecereNameSpace__ecere__com__Class * _class;
836 } __attribute__ ((gcc_struct));
838 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
840 struct __ecereNameSpace__ecere__com__DataMember
842 struct __ecereNameSpace__ecere__com__DataMember * prev;
843 struct __ecereNameSpace__ecere__com__DataMember * next;
845 unsigned int isProperty;
848 struct __ecereNameSpace__ecere__com__Class * _class;
849 char * dataTypeString;
850 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
851 struct Type * dataType;
855 struct __ecereNameSpace__ecere__sys__OldList members;
856 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
859 } __attribute__ ((gcc_struct));
861 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
863 struct __ecereNameSpace__ecere__com__SerialBuffer
865 unsigned char * _buffer;
869 } __attribute__ ((gcc_struct));
871 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
873 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
879 char * dataTypeString;
880 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
881 } __attribute__ ((gcc_struct));
882 struct __ecereNameSpace__ecere__com__DataValue expression;
888 struct __ecereNameSpace__ecere__com__DataMember * member;
889 struct __ecereNameSpace__ecere__com__Property * prop;
890 struct __ecereNameSpace__ecere__com__Method * method;
891 } __attribute__ ((gcc_struct));
892 } __attribute__ ((gcc_struct));
893 } __attribute__ ((gcc_struct));
894 } __attribute__ ((gcc_struct));
898 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
901 typedef union YYSTYPE
906 struct Identifier * id;
907 struct Expression * exp;
908 struct Specifier * specifier;
909 struct __ecereNameSpace__ecere__sys__OldList * list;
910 struct Enumerator * enumerator;
911 struct Declarator * declarator;
912 struct Pointer * pointer;
913 struct Initializer * initializer;
914 struct InitDeclarator * initDeclarator;
915 struct TypeName * typeName;
916 struct Declaration * declaration;
917 struct Statement * stmt;
918 struct FunctionDefinition * function;
919 struct External * external;
920 struct Context * context;
921 struct AsmField * asmField;
922 struct Attrib * attrib;
923 struct ExtDecl * extDecl;
924 struct Attribute * attribute;
925 struct Instantiation * instance;
926 struct MembersInit * membersInit;
927 struct MemberInit * memberInit;
928 struct ClassFunction * classFunction;
929 struct ClassDefinition * _class;
930 struct ClassDef * classDef;
931 struct PropertyDef * prop;
933 struct Symbol * symbol;
934 struct PropertyWatch * propertyWatch;
935 struct TemplateParameter * templateParameter;
936 struct TemplateArgument * templateArgument;
937 struct TemplateDatatype * templateDatatype;
938 struct DBTableEntry * dbtableEntry;
939 struct DBIndexItem * dbindexItem;
940 struct DBTableDef * dbtableDef;
941 } __attribute__ ((gcc_struct)) YYSTYPE;
943 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
947 struct Enumerator * prev;
948 struct Enumerator * next;
950 struct Identifier * id;
951 struct Expression * exp;
952 } __attribute__ ((gcc_struct));
954 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
956 struct InitDeclarator;
958 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
962 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
966 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
970 struct ClassFunction * prev;
971 struct ClassFunction * next;
973 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
974 struct Declarator * declarator;
975 struct __ecereNameSpace__ecere__sys__OldList * declarations;
976 struct Statement * body;
977 struct __ecereNameSpace__ecere__com__Class * _class;
978 struct __ecereNameSpace__ecere__sys__OldList attached;
981 struct Symbol * propSet;
982 unsigned int isVirtual;
983 unsigned int isConstructor;
984 unsigned int isDestructor;
985 unsigned int dontMangle;
988 } __attribute__ ((gcc_struct));
990 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
994 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
998 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
1002 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
1004 struct PropertyWatch
1006 struct PropertyWatch * prev;
1007 struct PropertyWatch * next;
1008 struct Location loc;
1009 struct Statement * compound;
1010 struct __ecereNameSpace__ecere__sys__OldList * properties;
1011 unsigned int deleteWatch;
1012 } __attribute__ ((gcc_struct));
1014 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
1018 struct ClassDef * prev;
1019 struct ClassDef * next;
1020 struct Location loc;
1024 struct Declaration * decl;
1025 struct ClassFunction * function;
1026 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
1027 struct PropertyDef * propertyDef;
1028 struct PropertyWatch * propertyWatch;
1030 struct Identifier * defaultProperty;
1033 struct Identifier * id;
1034 struct Initializer * initializer;
1035 } __attribute__ ((gcc_struct));
1036 } __attribute__ ((gcc_struct));
1039 } __attribute__ ((gcc_struct));
1041 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1043 struct DBTableEntry;
1045 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1049 extern YYSTYPE yylval;
1051 extern struct Location yylloc;
1053 static struct Statement * registerModuleBody;
1055 static struct External * registerModuleExternal;
1057 static struct Statement * unregisterModuleBody;
1059 static struct External * unregisterModuleExternal;
1061 extern int propWatcherID;
1063 unsigned int buildingECERECOM = 0x0;
1065 void SetBuildingEcereCom(unsigned int b)
1067 buildingECERECOM = b;
1070 unsigned int GetBuildingEcereCom()
1072 return buildingECERECOM;
1075 unsigned int buildingECERECOMModule = 0x0;
1077 void SetBuildingEcereComModule(unsigned int b)
1079 buildingECERECOMModule = b;
1082 unsigned int GetBuildingEcereComModule()
1084 return buildingECERECOMModule;
1087 extern struct Identifier * GetDeclId(struct Declarator * decl);
1089 extern unsigned int inCompiler;
1091 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
1093 extern struct Specifier * MkSpecifier(int specifier);
1095 extern void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class);
1097 extern struct FunctionDefinition * _MkFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * declarationList, unsigned int errorOnOmit);
1099 extern void ProcessFunctionBody(struct FunctionDefinition * func, struct Statement * body);
1101 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
1103 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
1105 extern struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param);
1107 extern struct Type * ProcessTypeString(char * string, unsigned int staticMethod);
1109 extern struct Symbol * FindClass(char * name);
1111 extern unsigned int MatchTypes(struct Type * source, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, struct __ecereNameSpace__ecere__com__Class * owningClassSource, struct __ecereNameSpace__ecere__com__Class * owningClassDest, unsigned int doConversion, unsigned int enumBaseType, unsigned int acceptReversedParams, unsigned int isConversionExploration);
1113 extern void Compiler_Error(char * format, ...);
1115 extern char * __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char * string, char * stringAndContext);
1117 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
1119 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
1121 extern void FreeType(struct Type * type);
1123 extern void FreeExternal(struct External * external);
1125 extern struct Context * globalContext;
1127 extern struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols;
1129 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
1131 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* CopyFunction)(void * ));
1133 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1135 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
1137 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
1139 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1141 struct External * ProcessClassFunction(struct __ecereNameSpace__ecere__com__Class * owningClass, struct ClassFunction * func, struct __ecereNameSpace__ecere__sys__OldList * defs, struct External * after, unsigned int makeStatic)
1143 struct Identifier * id = GetDeclId(func->declarator);
1144 struct Type * type = (((void *)0));
1145 struct Symbol * symbol;
1146 struct External * external = (((void *)0));
1148 if(defs && func->declarator)
1150 struct FunctionDefinition * function = (((void *)0));
1151 struct Symbol * propSymbol;
1152 int symid = func->declarator->symbol->id;
1153 int symidCode = func->declarator->symbol->idCode;
1157 if(!func->specifiers)
1158 func->specifiers = MkList();
1160 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*func->specifiers), (((void *)0)), MkSpecifier(STATIC));
1162 propSymbol = func->declarator->symbol;
1163 ReplaceThisClassSpecifiers(func->specifiers, owningClass);
1164 if(propSymbol->externalGet == (struct External *)func)
1165 func->declarator->symbol = (((void *)0));
1166 else if(propSymbol->externalSet == (struct External *)func)
1168 func->declarator->symbol = (((void *)0));
1171 else if(propSymbol->externalIsSet == (struct External *)func)
1173 func->declarator->symbol = (((void *)0));
1177 function = _MkFunction(func->specifiers, func->declarator, (((void *)0)), 0x0);
1178 function->propSet = func->propSet;
1179 function->type = func->type;
1181 func->type->refCount++;
1182 ProcessFunctionBody(function, func->body);
1183 external = MkExternalFunction(function);
1184 external->symbol = func->declarator->symbol;
1185 external->function->_class = func->_class;
1187 symbol = func->declarator->symbol;
1189 symbol->idCode = symidCode;
1190 if(!func->dontMangle)
1192 struct __ecereNameSpace__ecere__com__Method * method = func->declarator->symbol->method;
1194 func->declarator->symbol->methodExternal = external;
1195 if(method && method->symbol)
1196 ((struct Symbol *)method->symbol)->methodCodeExternal = external;
1197 if(method && method->type == 1)
1199 struct Type * methodDataType;
1201 ProcessMethodType(method);
1202 methodDataType = method->dataType;
1203 type = symbol->type;
1204 if(!type->staticMethod && !type->thisClass && !type->thisClassTemplate)
1206 if(method->dataType->thisClassTemplate)
1208 if(owningClass->templateArgs)
1210 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = FindTemplateArg(owningClass, method->dataType->thisClassTemplate);
1212 type->byReference = method->dataType->byReference;
1213 methodDataType = ProcessTypeString(method->dataTypeString, 0x0);
1214 type->thisClass = methodDataType->thisClass = arg ? FindClass((*arg).dataTypeString) : (((void *)0));
1217 else if(method->dataType->staticMethod)
1218 type->staticMethod = 0x1;
1219 else if(method->dataType->thisClass)
1221 type->thisClass = method->dataType->thisClass;
1222 type->byReference = method->dataType->byReference;
1226 if(!owningClass->symbol)
1227 owningClass->symbol = FindClass(owningClass->fullName);
1228 type->thisClass = owningClass->symbol;
1229 type->extraParam = 0x1;
1233 if(!MatchTypes(type, methodDataType, (((void *)0)), owningClass, method->_class, 0x1, 0x1, 0x1, 0x0))
1235 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Incompatible virtual function %s\n", (((void *)0))), method->name);
1239 struct Type * typeParam;
1240 struct Declarator * funcDecl = GetFuncDecl(func->declarator);
1242 if(funcDecl->function.parameters && (*funcDecl->function.parameters).first)
1244 struct TypeName * param = (*funcDecl->function.parameters).first;
1246 for(typeParam = methodDataType->params.first; typeParam && param; typeParam = typeParam->next)
1248 if(typeParam->classObjectType)
1250 param->classObjectType = typeParam->classObjectType;
1251 if(param->declarator && param->declarator->symbol)
1252 param->declarator->symbol->type->classObjectType = typeParam->classObjectType;
1254 param = param ? param->next : (((void *)0));
1258 if(methodDataType != method->dataType)
1259 FreeType(methodDataType);
1263 type = symbol->type;
1264 if(!type->staticMethod && !type->thisClass)
1266 if(owningClass && !owningClass->symbol)
1267 owningClass->symbol = FindClass(owningClass->fullName);
1268 type->thisClass = owningClass ? FindClass(owningClass->fullName) : (((void *)0));
1274 if(symbol->type && !symbol->type->staticMethod && !symbol->type->thisClass)
1276 if(!owningClass->symbol)
1277 owningClass->symbol = FindClass(owningClass->fullName);
1278 symbol->type->thisClass = owningClass->symbol;
1280 if(propSymbol->externalSet == (struct External *)func && propSymbol->_property && propSymbol->_property->conversion)
1282 if(symbol->type->thisClass && symbol->type->classObjectType != 1)
1284 if(owningClass->type != 1)
1285 symbol->type->thisClass = (((void *)0));
1288 if(propSymbol->externalGet == (struct External *)func)
1290 propSymbol->externalGet = external;
1292 else if(propSymbol->externalSet == (struct External *)func)
1294 propSymbol->externalSet = external;
1296 else if(propSymbol->externalIsSet == (struct External *)func)
1298 propSymbol->externalIsSet = external;
1308 func->declarator = (((void *)0));
1309 func->specifiers = (((void *)0));
1310 func->body = (((void *)0));
1311 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1315 struct __ecereNameSpace__ecere__com__Method * method = func->declarator->symbol->method;
1317 if(method && method->symbol)
1318 ((struct Symbol *)method->symbol)->methodCodeExternal = (((void *)0));
1319 if(func->declarator->symbol && func->declarator->symbol->methodExternal == external)
1320 func->declarator->symbol->methodExternal = (((void *)0));
1321 func->declarator = (((void *)0));
1322 func->specifiers = (((void *)0));
1323 FreeExternal(external);
1328 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
1329 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), symbol);
1330 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1331 external->function->declarator = CopyDeclarator(external->function->declarator);
1332 external->function->specifiers = CopyList(external->function->specifiers, CopySpecifier);
1333 external->function->body = (((void *)0));
1339 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
1341 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
1343 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
1345 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
1347 extern struct Specifier * MkSpecifierName(char * name);
1349 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1351 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1353 extern struct Identifier * MkIdentifier(char * string);
1355 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1357 extern char * __ecereNameSpace__ecere__sys__GetLastDirectory(char * string, char * output);
1359 extern char * outputFile;
1361 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string);
1363 extern void FixModuleName(char * moduleName);
1365 extern int sprintf(char * , char * , ...);
1367 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1369 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
1371 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1373 void CreateRegisterModuleBody()
1375 if(!registerModuleBody && inCompiler)
1377 char registerName[1024], moduleName[274];
1378 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1379 struct Declarator * declarator;
1380 struct TypeName * moduleParam;
1382 registerModuleBody = MkCompoundStmt(MkList(), MkList());
1383 registerModuleBody->compound.context = __extension__ ({
1384 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1386 __ecereInstance1->parent = globalContext, __ecereInstance1;
1388 ListAdd(registerModuleBody->compound.declarations, MkDeclaration(MkListOne(MkSpecifierName("ecere::com::Class")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("class")), (((void *)0))))));
1389 specifiers = MkList();
1390 ListAdd(specifiers, MkSpecifier(VOID));
1391 moduleParam = MkTypeName(MkListOne(MkSpecifierName("Module")), MkDeclaratorIdentifier(MkIdentifier("module")));
1392 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1393 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1394 FixModuleName(moduleName);
1395 sprintf(registerName, "__ecereRegisterModule_%s", moduleName);
1396 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), MkListOne(moduleParam));
1398 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0x0);
1400 ProcessFunctionBody(function, registerModuleBody);
1401 function->declMode = 0;
1404 ListAdd(ast, (registerModuleExternal = MkExternalFunction(function)));
1407 if(!unregisterModuleBody && inCompiler)
1409 char registerName[1024], moduleName[274];
1410 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1411 struct Declarator * declarator;
1412 struct TypeName * moduleParam;
1414 unregisterModuleBody = MkCompoundStmt(MkList(), MkList());
1415 unregisterModuleBody->compound.context = __extension__ ({
1416 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1418 __ecereInstance1->parent = globalContext, __ecereInstance1;
1420 specifiers = MkList();
1421 ListAdd(specifiers, MkSpecifier(VOID));
1422 moduleParam = MkTypeName(MkListOne(MkSpecifierName("Module")), MkDeclaratorIdentifier(MkIdentifier("module")));
1423 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1424 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1425 FixModuleName(moduleName);
1426 sprintf(registerName, "__ecereUnregisterModule_%s", moduleName);
1427 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), MkListOne(moduleParam));
1429 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0x0);
1431 ProcessFunctionBody(function, unregisterModuleBody);
1432 function->declMode = 0;
1435 ListAdd(ast, (unregisterModuleExternal = MkExternalFunction(function)));
1440 extern struct Expression * MkExpIdentifier(struct Identifier * id);
1442 extern struct Expression * MkExpConstant(char * string);
1444 extern char * QMkString(char * source);
1446 extern struct Expression * MkExpString(char * string);
1448 extern char * strcpy(char * , const char * );
1450 extern void FullClassNameCat(char * output, char * className, unsigned int includeTemplateParams);
1452 extern char * strcat(char * , const char * );
1454 extern void MangleClassName(char * className);
1456 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
1458 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
1460 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
1462 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
1464 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1466 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1468 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
1470 extern struct Expression * CopyExpression(struct Expression * exp);
1472 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
1474 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
1476 struct __ecereNameSpace__ecere__com__BitMember
1478 struct __ecereNameSpace__ecere__com__BitMember * prev;
1479 struct __ecereNameSpace__ecere__com__BitMember * next;
1481 unsigned int isProperty;
1484 struct __ecereNameSpace__ecere__com__Class * _class;
1485 char * dataTypeString;
1486 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1487 struct Type * dataType;
1492 } __attribute__ ((gcc_struct));
1494 extern int ComputeTypeSize(struct Type * type);
1496 extern struct Context * curContext;
1498 extern struct Context * PushContext(void);
1500 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1502 extern void PopContext(struct Context * ctx);
1504 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
1506 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
1508 struct __ecereNameSpace__ecere__com__ClassProperty
1511 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1512 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1513 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1515 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
1516 long long (* Get)(struct __ecereNameSpace__ecere__com__Class *);
1517 char * dataTypeString;
1518 struct Type * dataType;
1519 unsigned int constant;
1520 } __attribute__ ((gcc_struct));
1522 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
1524 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
1526 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
1528 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
1530 void RegisterMembersAndProperties(struct __ecereNameSpace__ecere__com__Class * regClass, unsigned int isMember, char * className, struct Statement * statement)
1532 struct __ecereNameSpace__ecere__com__DataMember * dataMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)regClass : (((void *)0));
1533 struct __ecereNameSpace__ecere__com__DataMember * member;
1534 struct __ecereNameSpace__ecere__com__Property * prop;
1535 struct Expression * exp;
1536 struct Statement * stmt;
1537 char dataMemberSize[16];
1538 unsigned int lastOffset = 0;
1540 unsigned int privateMembers = 0x0;
1542 sprintf(dataMemberSize, "%d", (int)sizeof(struct __ecereNameSpace__ecere__com__DataMember *));
1545 for(prop = regClass->conversions.first; prop; prop = prop->next)
1547 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1550 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1551 ListAdd(args, MkExpConstant("0"));
1553 char * string = QMkString(prop->dataTypeString);
1555 ListAdd(args, MkExpString(string));
1556 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1560 strcpy(name, "__ecereProp_");
1561 FullClassNameCat(name, regClass->fullName, 0x0);
1562 strcat(name, "_Set_");
1563 FullClassNameCat(name, prop->name, 0x1);
1564 MangleClassName(name);
1565 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1568 ListAdd(args, MkExpConstant("0"));
1571 strcpy(name, "__ecereProp_");
1572 FullClassNameCat(name, regClass->fullName, 0x0);
1573 strcat(name, "_Get_");
1574 FullClassNameCat(name, prop->name, 0x1);
1575 MangleClassName(name);
1576 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1579 ListAdd(args, MkExpConstant("0"));
1580 switch(prop->memberAccess)
1583 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1586 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1590 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1593 strcpy(name, "__ecereProp_");
1594 FullClassNameCat(name, regClass->fullName, 0x0);
1596 FullClassNameCat(name, prop->name, 0x1);
1597 MangleClassName(name);
1598 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args))));
1599 ListAdd(registerModuleBody->compound.statements, stmt);
1602 for(member = isMember ? dataMember->members.first : regClass->membersAndProperties.first; member; member = member->next)
1604 if(member->isProperty)
1606 prop = (struct __ecereNameSpace__ecere__com__Property *)member;
1608 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1609 char name[1024], nameM[1024];
1610 char * string = QMkString(prop->name);
1612 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1613 ListAdd(args, MkExpString(string));
1614 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1616 char * string = QMkString(prop->dataTypeString);
1618 ListAdd(args, MkExpString(string));
1619 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1623 strcpy(name, "__ecereProp_");
1624 FullClassNameCat(name, regClass->fullName, 0x0);
1625 strcat(name, "_Set_");
1626 FullClassNameCat(name, prop->name, 0x1);
1627 MangleClassName(name);
1628 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1631 ListAdd(args, MkExpConstant("0"));
1634 strcpy(name, "__ecereProp_");
1635 FullClassNameCat(name, regClass->fullName, 0x0);
1636 strcat(name, "_Get_");
1637 FullClassNameCat(name, prop->name, 0x1);
1638 MangleClassName(name);
1639 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1642 ListAdd(args, MkExpConstant("0"));
1643 switch(prop->memberAccess)
1646 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1649 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1653 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1656 strcpy(name, "__ecereProp_");
1657 FullClassNameCat(name, regClass->fullName, 0x0);
1659 FullClassNameCat(name, prop->name, 0x1);
1660 MangleClassName(name);
1661 strcpy(nameM, "__ecerePropM_");
1662 FullClassNameCat(nameM, regClass->fullName, 0x0);
1664 FullClassNameCat(nameM, prop->name, 0x1);
1665 MangleClassName(nameM);
1666 if(prop->dataTypeString)
1668 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args))));
1672 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args)));
1674 ListAdd(registerModuleBody->compound.statements, stmt);
1679 strcpy(name, "__ecereProp_");
1680 FullClassNameCat(name, regClass->fullName, 0x1);
1681 strcat(name, "_IsSet_");
1682 FullClassNameCat(name, prop->name, 0x0);
1683 MangleClassName(name);
1684 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier(nameM)), MkIdentifier("IsSet")), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(name))))));
1685 ListAdd(registerModuleBody->compound.statements, stmt);
1687 if(prop->symbol && ((struct Symbol *)prop->symbol)->propCategory)
1689 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier(nameM)), MkIdentifier("category")), '=', CopyExpression(((struct Symbol *)prop->symbol)->propCategory))));
1690 ListAdd(registerModuleBody->compound.statements, stmt);
1692 if(prop->dataTypeString)
1694 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
1696 ListAdd(list, MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', MkExpIdentifier(MkIdentifier(nameM))));
1697 ListAdd(list, MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0"))));
1698 stmt = MkIfStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("module")), MkIdentifier("application")), EQ_OP, MkExpMember(MkExpIdentifier(MkIdentifier("__thisModule")), MkIdentifier("application")))), MkExpressionStmt(list), (((void *)0)));
1699 ListAdd(registerModuleBody->compound.statements, stmt);
1700 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0")))));
1701 ListAdd(unregisterModuleBody->compound.statements, stmt);
1705 else if(member->type == 0 && !isMember && regClass->type == 2)
1707 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)member;
1708 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1710 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1712 char * string = QMkString(bitMember->name);
1714 ListAdd(args, MkExpString(string));
1715 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1718 char * string = QMkString(bitMember->dataTypeString);
1720 ListAdd(args, MkExpString(string));
1721 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1726 sprintf(string, "%d", bitMember->size);
1727 ListAdd(args, (exp = MkExpConstant(string)));
1732 sprintf(string, "%d", bitMember->pos);
1733 ListAdd(args, (exp = MkExpConstant(string)));
1735 switch(member->memberAccess)
1738 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1741 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1745 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1748 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddBitMember")), args)));
1749 ListAdd(statement->compound.statements, stmt);
1751 else if(member->memberAccess == 1 || (member->type == 0 && !member->dataTypeString))
1753 struct __ecereNameSpace__ecere__sys__OldList * args;
1757 unsigned int offset = member->offset - lastOffset;
1760 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1764 sprintf(string, "\"__ecerePrivateData%d\"", privateID++);
1765 ListAdd(args, MkExpString(string));
1770 sprintf(string, "\"byte[%d]\"", offset);
1771 ListAdd(args, MkExpString(string));
1776 sprintf(string, "%d", offset);
1777 ListAdd(args, (exp = MkExpConstant(string)));
1779 ListAdd(args, (exp = MkExpConstant("1")));
1780 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1781 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier(isMember ? "eMember_AddDataMember" : "eClass_AddDataMember")), args)));
1782 ListAdd(statement->compound.statements, stmt);
1783 privateMembers = 0x0;
1785 if(member->type == 0)
1787 if(!member->dataType)
1788 member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
1789 ComputeTypeSize(member->dataType);
1791 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1793 char * string = QMkString(member->name);
1795 ListAdd(args, MkExpString(string));
1796 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1799 char * string = QMkString(member->dataTypeString);
1801 ListAdd(args, MkExpString(string));
1802 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1807 sprintf(string, "%d", member->dataType->size);
1808 ListAdd(args, (exp = MkExpConstant(string)));
1813 sprintf(string, "%d", member->dataType->alignment);
1814 ListAdd(args, (exp = MkExpConstant(string)));
1816 switch(member->memberAccess)
1819 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1822 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1826 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1829 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier(isMember ? "eMember_AddDataMember" : "eClass_AddDataMember")), args)));
1830 ListAdd(statement->compound.statements, stmt);
1831 lastOffset = member->offset + member->dataType->size;
1835 static int memberCount = 0;
1836 struct Context * context;
1837 struct Statement * compound;
1838 char memberName[256];
1840 sprintf(memberName, "dataMember%d", memberCount);
1842 curContext = statement->compound.context;
1843 context = PushContext();
1844 args = MkListOne(MkExpIdentifier(MkIdentifier((member->type == 1) ? "unionMember" : "structMember")));
1845 switch(member->memberAccess)
1848 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1851 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1855 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1858 compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifierName("DataMember")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(memberName)), MkInitializerAssignment(MkExpCall(MkExpIdentifier(MkIdentifier("eMember_New")), args)))))), MkList());
1859 compound->compound.context = context;
1861 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1862 ListAdd(args, MkExpIdentifier(MkIdentifier(memberName)));
1863 RegisterMembersAndProperties((struct __ecereNameSpace__ecere__com__Class *)member, 0x1, memberName, compound);
1865 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eMember_AddMember")), args)));
1867 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMember")), args)));
1868 ListAdd(compound->compound.statements, stmt);
1869 PopContext(context);
1870 ListAdd(statement->compound.statements, compound);
1872 lastOffset = member->offset + member->memberOffset;
1876 privateMembers = 0x1;
1880 struct __ecereNameSpace__ecere__com__ClassProperty * classProperty;
1882 for(prop = regClass->membersAndProperties.first; prop; prop = prop->next)
1884 if(prop->isProperty && prop->isWatchable)
1886 struct __ecereNameSpace__ecere__sys__OldList * args;
1887 char name[1024], nameM[1024];
1889 strcpy(name, "__ecereProp_");
1890 FullClassNameCat(name, regClass->fullName, 0x1);
1892 FullClassNameCat(name, prop->name, 0x0);
1893 MangleClassName(name);
1894 strcpy(nameM, "__ecerePropM_");
1895 FullClassNameCat(nameM, regClass->fullName, 0x1);
1897 FullClassNameCat(nameM, prop->name, 0x0);
1898 MangleClassName(nameM);
1899 args = MkListOne(MkExpCondition(MkExpIdentifier(MkIdentifier(nameM)), MkListOne(MkExpIdentifier(MkIdentifier(nameM))), MkExpIdentifier(MkIdentifier(name))));
1900 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eProperty_Watchable")), args)));
1901 ListAdd(registerModuleBody->compound.statements, stmt);
1904 for(classProperty = (struct __ecereNameSpace__ecere__com__ClassProperty *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(®Class->classProperties); classProperty; classProperty = (struct __ecereNameSpace__ecere__com__ClassProperty *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)classProperty)))
1906 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1908 char * string = QMkString(classProperty->name);
1910 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1911 ListAdd(args, MkExpString(string));
1912 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1914 char * string = QMkString(classProperty->dataTypeString);
1916 ListAdd(args, MkExpString(string));
1917 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1919 if(classProperty->Set)
1921 strcpy(name, "__ecereClassProp_");
1922 FullClassNameCat(name, regClass->fullName, 0x1);
1923 strcat(name, "_Set_");
1924 strcat(name, classProperty->name);
1925 MangleClassName(name);
1926 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1929 ListAdd(args, MkExpConstant("0"));
1930 if(classProperty->Get)
1932 strcpy(name, "__ecereClassProp_");
1933 FullClassNameCat(name, regClass->fullName, 0x1);
1934 strcat(name, "_Get_");
1935 strcat(name, classProperty->name);
1936 MangleClassName(name);
1937 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1940 ListAdd(args, MkExpConstant("0"));
1941 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddClassProperty")), args)));
1942 ListAdd(registerModuleBody->compound.statements, stmt);
1947 extern struct External * curExternal;
1949 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1951 struct __ecereNameSpace__ecere__com__NameSpace
1954 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1955 struct __ecereNameSpace__ecere__com__NameSpace * left;
1956 struct __ecereNameSpace__ecere__com__NameSpace * right;
1958 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1959 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1960 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1961 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1962 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1963 } __attribute__ ((gcc_struct));
1965 void GetNameSpaceString(struct __ecereNameSpace__ecere__com__NameSpace * ns, char * string)
1968 GetNameSpaceString(ns->parent, string);
1971 strcat(string, ns->name);
1972 strcat(string, "::");
1976 extern unsigned int parsingType;
1978 extern void ProcessExpressionType(struct Expression * exp);
1980 extern void ComputeExpression(struct Expression * exp);
1982 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
1986 unsigned int (* Add)(struct Expression *, struct Operand *, struct Operand *);
1987 unsigned int (* Sub)(struct Expression *, struct Operand *, struct Operand *);
1988 unsigned int (* Mul)(struct Expression *, struct Operand *, struct Operand *);
1989 unsigned int (* Div)(struct Expression *, struct Operand *, struct Operand *);
1990 unsigned int (* Mod)(struct Expression *, struct Operand *, struct Operand *);
1991 unsigned int (* Neg)(struct Expression *, struct Operand *);
1992 unsigned int (* Inc)(struct Expression *, struct Operand *);
1993 unsigned int (* Dec)(struct Expression *, struct Operand *);
1994 unsigned int (* Asign)(struct Expression *, struct Operand *, struct Operand *);
1995 unsigned int (* AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1996 unsigned int (* SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1997 unsigned int (* MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1998 unsigned int (* DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1999 unsigned int (* ModAsign)(struct Expression *, struct Operand *, struct Operand *);
2000 unsigned int (* BitAnd)(struct Expression *, struct Operand *, struct Operand *);
2001 unsigned int (* BitOr)(struct Expression *, struct Operand *, struct Operand *);
2002 unsigned int (* BitXor)(struct Expression *, struct Operand *, struct Operand *);
2003 unsigned int (* LShift)(struct Expression *, struct Operand *, struct Operand *);
2004 unsigned int (* RShift)(struct Expression *, struct Operand *, struct Operand *);
2005 unsigned int (* BitNot)(struct Expression *, struct Operand *);
2006 unsigned int (* AndAsign)(struct Expression *, struct Operand *, struct Operand *);
2007 unsigned int (* OrAsign)(struct Expression *, struct Operand *, struct Operand *);
2008 unsigned int (* XorAsign)(struct Expression *, struct Operand *, struct Operand *);
2009 unsigned int (* LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
2010 unsigned int (* RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
2011 unsigned int (* Not)(struct Expression *, struct Operand *);
2012 unsigned int (* Equ)(struct Expression *, struct Operand *, struct Operand *);
2013 unsigned int (* Nqu)(struct Expression *, struct Operand *, struct Operand *);
2014 unsigned int (* And)(struct Expression *, struct Operand *, struct Operand *);
2015 unsigned int (* Or)(struct Expression *, struct Operand *, struct Operand *);
2016 unsigned int (* Grt)(struct Expression *, struct Operand *, struct Operand *);
2017 unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *);
2018 unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
2019 unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
2020 unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
2021 } __attribute__ ((gcc_struct));
2023 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
2029 unsigned int ptrSize;
2042 } __attribute__ ((gcc_struct));
2044 } __attribute__ ((gcc_struct));
2046 extern struct Operand GetOperand(struct Expression * exp);
2048 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string, int value);
2050 extern int __ecereNameSpace__ecere__com__eEnum_AddValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string);
2052 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
2054 struct __ecereNameSpace__ecere__sys__OldLink
2056 struct __ecereNameSpace__ecere__sys__OldLink * prev;
2057 struct __ecereNameSpace__ecere__sys__OldLink * next;
2059 } __attribute__ ((gcc_struct));
2061 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
2063 struct __ecereNameSpace__ecere__com__EnumClassData
2065 struct __ecereNameSpace__ecere__sys__OldList values;
2067 } __attribute__ ((gcc_struct));
2069 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
2071 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
2073 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
2075 extern struct ClassDef * MkClassDefFunction(struct ClassFunction * function);
2077 extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_FindProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name, struct __ecereNameSpace__ecere__com__Instance * module);
2079 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
2081 extern void FreePropertyWatch(struct PropertyWatch * watcher);
2083 extern char * sourceFile;
2085 extern void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2);
2087 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2089 extern void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
2091 extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
2093 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
2095 extern unsigned int DummyMethod(void);
2097 extern void DeclareMethod(struct __ecereNameSpace__ecere__com__Method * method, char * name);
2099 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char * name);
2101 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
2103 struct __ecereNameSpace__ecere__sys__NamedLink
2105 struct __ecereNameSpace__ecere__sys__NamedLink * prev;
2106 struct __ecereNameSpace__ecere__sys__NamedLink * next;
2109 } __attribute__ ((gcc_struct));
2111 extern char * StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2113 extern size_t strlen(const char * );
2115 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
2117 extern char * PrintUInt64(uint64 result);
2119 extern struct Expression * MkExpInstance(struct Instantiation * inst);
2121 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
2123 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
2125 int __ecereVMethodID_class_OnGetString;
2127 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__TemplateMemberType;
2129 static void ProcessClass(int classType, struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol, struct __ecereNameSpace__ecere__sys__OldList * baseSpecs, struct __ecereNameSpace__ecere__sys__OldList * enumValues, struct __ecereNameSpace__ecere__sys__OldList * defs, struct External * external, int declMode)
2131 struct ClassDef * def;
2132 struct __ecereNameSpace__ecere__com__Class * regClass = symbol->registered;
2136 classType = regClass->type;
2137 if(classType == 4 && enumValues && (inCompiler || !buildingECERECOMModule))
2139 struct Enumerator * e;
2141 for(e = enumValues->first; e; e = e->next)
2145 struct Type * destType = (destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), destType->kind = 3, destType->refCount = 1, destType);
2147 e->exp->destType = destType;
2149 ProcessExpressionType(e->exp);
2151 if(!e->exp->expType)
2154 destType->_class = symbol;
2155 ProcessExpressionType(e->exp);
2157 ComputeExpression(e->exp);
2158 if(e->exp->isConstant && e->exp->type == 2)
2160 struct Operand op = GetOperand(e->exp);
2174 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(regClass, e->id->string, value);
2177 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
2180 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
2183 struct __ecereNameSpace__ecere__com__EnumClassData * baseData = regClass->data;
2184 struct __ecereNameSpace__ecere__sys__OldLink * deriv;
2186 for(deriv = regClass->derivatives.first; deriv; deriv = deriv->next)
2188 struct __ecereNameSpace__ecere__com__Class * c = deriv->data;
2190 if(c && c->type == 4)
2192 struct __ecereNameSpace__ecere__com__EnumClassData * data = c->data;
2194 data->largest = baseData->largest;
2199 if(definitions != (((void *)0)))
2203 for(def = definitions->first; def; def = def->next)
2205 if(def->type == 4 && def->propertyWatch)
2207 struct PropertyWatch * propWatch = def->propertyWatch;
2208 struct ClassFunction * func;
2209 char watcherName[1024];
2210 struct Identifier * propID;
2211 struct Statement * stmt = MkExpressionStmt(MkList());
2212 struct Declarator * decl;
2214 sprintf(watcherName, "__ecerePropertySelfWatcher_%d", propWatcherID++);
2215 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
2217 strcat(watcherName, "_");
2218 strcat(watcherName, propID->string);
2220 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0)))));
2221 func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((void *)0)), decl, (((void *)0)));
2222 ProcessClassFunctionBody(func, propWatch->compound);
2223 decl->symbol = __extension__ ({
2224 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2226 __ecereInstance1->id = symbol->id, __ecereInstance1->idCode = symbol->idCode, __ecereInstance1;
2228 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), decl->symbol);
2229 func->id = symbol->id;
2230 func->idCode = symbol->idCode;
2231 func->dontMangle = 0x1;
2233 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
2234 struct Declaration * decl;
2235 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2237 ListAdd(specifiers, MkSpecifier(STATIC));
2238 ListAdd(specifiers, MkSpecifier(VOID));
2239 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, externalDecl);
2240 decl = MkDeclaration(specifiers, MkListOne(MkInitDeclarator(MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(regClass->fullName)), (((void *)0))))), (((void *)0)))));
2241 externalDecl->declaration = decl;
2242 if(decl->symbol && !decl->symbol->methodExternal)
2244 decl->symbol->methodExternal = externalDecl;
2245 decl->symbol->id = symbol->id;
2246 decl->symbol->idCode = symbol->idCode;
2249 propWatch->compound = (((void *)0));
2250 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, (((void *)0)), MkClassDefFunction(func));
2252 stmt->expressions = MkList();
2253 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
2255 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(regClass, propID->string, privateModule);
2259 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2261 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2262 ListAdd(args, MkExpString(QMkString(propID->string)));
2263 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
2264 ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("eProperty_SelfWatch")), args));
2267 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Property %s not found in class %s\n", (((void *)0))), propID->string, regClass->fullName);
2269 FreePropertyWatch(def->propertyWatch);
2270 def->propertyWatch = (struct PropertyWatch *)stmt;
2274 for(def = definitions->first; def; def = def->next)
2278 ProcessClassFunction(regClass, def->function, defs, external->prev, declMode == 3);
2282 if(inCompiler && symbol->id != (((int)0x7fffffff)) && regClass)
2284 struct Statement * stmt;
2285 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2286 struct __ecereNameSpace__ecere__com__Method * method;
2287 struct Expression * exp;
2288 char * registerFunction = (((void *)0));
2289 int inheritanceAccess = 1;
2291 CreateRegisterModuleBody();
2292 curExternal = registerModuleExternal;
2293 switch(regClass->type)
2296 ListAdd(args, MkExpIdentifier(MkIdentifier("structClass")));
2299 ListAdd(args, MkExpIdentifier(MkIdentifier("bitClass")));
2302 ListAdd(args, MkExpIdentifier(MkIdentifier("enumClass")));
2305 ListAdd(args, MkExpIdentifier(MkIdentifier("noHeadClass")));
2308 ListAdd(args, MkExpIdentifier(MkIdentifier("unitClass")));
2311 ListAdd(args, MkExpIdentifier(MkIdentifier("normalClass")));
2315 char nameSpace[1024] = "";
2316 char className[1024] = "";
2319 GetNameSpaceString(regClass->nameSpace, nameSpace);
2322 __ecereNameSpace__ecere__sys__GetLastDirectory(sourceFile, className);
2323 __ecereNameSpace__ecere__sys__ChangeCh(className, '.', '_');
2324 strcat(className, "}");
2326 strcat(className, nameSpace);
2327 strcat(className, regClass->name);
2328 string = QMkString(className);
2329 ListAdd(args, MkExpString(string));
2330 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2332 if(baseSpecs != (((void *)0)))
2334 struct Type * baseType = ProcessType(baseSpecs, (((void *)0)));
2336 if(baseType->kind != 9 && baseType->kind != 10)
2338 char baseName[1024] = "";
2341 if(baseType->kind == 8 && baseType->_class && baseType->_class->isStatic)
2343 __ecereNameSpace__ecere__sys__GetLastDirectory(sourceFile, baseName);
2344 __ecereNameSpace__ecere__sys__ChangeCh(baseName, '.', '_');
2345 strcat(baseName, "}");
2346 strcat(baseName, baseType->_class->string);
2349 PrintType(baseType, baseName, 0x0, 0x1);
2350 string = QMkString(baseName);
2351 ListAdd(args, MkExpString(string));
2352 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2355 ListAdd(args, MkExpConstant("0"));
2357 if(((struct Specifier *)baseSpecs->first)->type == 0 && ((struct Specifier *)baseSpecs->first)->specifier == PRIVATE)
2358 inheritanceAccess = 2;
2361 ListAdd(args, MkExpConstant("0"));
2362 if(regClass->type == 1 || regClass->type == 0 || regClass->type == 5)
2364 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
2367 struct __ecereNameSpace__ecere__com__Class * base;
2369 for(base = regClass->base; base && base->type != 1000; base = base->next)
2371 for(member = base->membersAndProperties.first; member; member = member->next)
2372 if(!member->isProperty)
2378 if(regClass->type == 1 && symbol->declaredStruct && member)
2380 char baseStructName[1024];
2382 baseStructName[0] = (char)0;
2383 strcpy(baseStructName, (regClass->base->templateClass ? regClass->base->templateClass : regClass->base)->fullName);
2384 ListAdd(args, MkExpOp(MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(symbol->structName), (((void *)0)))), (((void *)0)))), '-', MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(baseStructName), (((void *)0)))), (((void *)0))))));
2387 ListAdd(args, symbol->declaredStruct ? MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(symbol->structName), (((void *)0)))), (((void *)0)))) : MkExpConstant("0"));
2391 ListAdd(args, MkExpConstant("0"));
2394 char classDataStructName[1024];
2396 strcpy(classDataStructName, "__ecereClassData_");
2397 FullClassNameCat(classDataStructName, symbol->string, 0x0);
2398 ListAdd(args, symbol->classData ? MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(classDataStructName), (((void *)0)))), (((void *)0)))) : MkExpConstant("0"));
2400 if(regClass->type == 0 || regClass->type == 5)
2402 ListAdd(args, symbol->needConstructor ? MkExpIdentifier(MkIdentifier(symbol->constructorName)) : MkExpConstant("0"));
2403 ListAdd(args, symbol->needDestructor ? MkExpIdentifier(MkIdentifier(symbol->destructorName)) : MkExpConstant("0"));
2407 ListAdd(args, MkExpConstant("0"));
2408 ListAdd(args, MkExpConstant("0"));
2410 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2414 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2417 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2421 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2424 switch(inheritanceAccess)
2427 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2431 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2434 registerFunction = "eSystem_RegisterClass";
2435 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier("class")), '=', MkExpCall((exp = MkExpIdentifier(MkIdentifier(registerFunction))), args))));
2436 ListAdd(registerModuleBody->compound.statements, stmt);
2437 stmt = MkIfStmt(MkListOne(MkExpOp(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("module")), MkIdentifier("application")), EQ_OP, MkExpMember(MkExpIdentifier(MkIdentifier("__thisModule")), MkIdentifier("application"))), AND_OP, MkExpIdentifier(MkIdentifier("class")))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(symbol->className)), '=', MkExpIdentifier(MkIdentifier("class"))))), (((void *)0)));
2438 ListAdd(registerModuleBody->compound.statements, stmt);
2439 if(external && external->type == 2 && external->_class->deleteWatchable)
2441 args = MkListOne(MkExpIdentifier(MkIdentifier("class")));
2442 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_DestructionWatchable")), args)));
2443 ListAdd(registerModuleBody->compound.statements, stmt);
2447 struct __ecereNameSpace__ecere__com__Class * base = regClass->base;
2450 for(c = 0; c < base->vTblSize; c++)
2452 struct Symbol * method = (struct Symbol *)regClass->_vTbl[c];
2454 if((void *)method != DummyMethod && base->_vTbl[c] != (void *)method && method->methodExternal)
2456 struct External * external = method->methodExternal;
2457 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2458 struct Identifier * id = external->function ? GetDeclId(external->function->declarator) : (((void *)0));
2460 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2462 char * string = QMkString(method->method->name);
2464 ListAdd(args, MkExpString(string));
2465 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2467 ListAdd(args, MkExpConstant("0"));
2468 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2469 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2470 exp->expType = __extension__ ({
2471 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
2473 __ecereInstance1->refCount = 1, __ecereInstance1;
2475 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMethod")), args)));
2476 ListAdd(registerModuleBody->compound.statements, stmt);
2483 for(c = regClass->base ? regClass->base->vTblSize : 0; c < regClass->vTblSize; c++)
2485 for(method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(®Class->methods); method; method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)method)))
2487 if(method->type == 1 && method->_class == regClass && method->vid == c)
2490 struct Expression * exp;
2491 struct External * external = method->symbol ? ((struct Symbol *)method->symbol)->methodCodeExternal : (((void *)0));
2492 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2493 struct Identifier * id = (external && external->function) ? GetDeclId(external->function->declarator) : (((void *)0));
2495 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2497 char * string = QMkString(method->name);
2499 ListAdd(args, MkExpString(string));
2500 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2503 char * string = QMkString(method->dataTypeString);
2505 ListAdd(args, MkExpString(string));
2506 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2508 if(id && external->function->body)
2510 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2511 exp->expType = __extension__ ({
2512 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
2514 __ecereInstance1->refCount = 1, __ecereInstance1;
2519 ListAdd(args, (exp = MkExpConstant("0")));
2521 switch(method->memberAccess)
2524 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2527 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2531 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2534 strcpy(name, "__ecereVMethodID_");
2535 FullClassNameCat(name, method->_class->fullName, 0x0);
2537 strcat(name, method->name);
2538 exp = MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddVirtualMethod")), args);
2539 stmt = MkExpressionStmt(MkListOne(exp));
2540 DeclareMethod(method, name);
2541 ListAdd(registerModuleBody->compound.statements, stmt);
2546 for(method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(®Class->methods); method; method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)method)))
2548 if(method->type == 1 && method->_class == regClass)
2550 else if(method->memberAccess == 1 || !method->dataTypeString)
2552 struct External * external = method->symbol ? ((struct Symbol *)method->symbol)->methodCodeExternal : (((void *)0));
2553 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2554 struct Identifier * id = (external && external->function) ? GetDeclId(external->function->declarator) : (((void *)0));
2556 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2558 char * string = QMkString(method->name);
2560 ListAdd(args, MkExpString(string));
2561 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2564 char * string = QMkString(method->dataTypeString);
2566 ListAdd(args, MkExpString(string));
2567 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2569 if(id && external->function->body)
2571 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2572 exp->expType = __extension__ ({
2573 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
2575 __ecereInstance1->refCount = 1, __ecereInstance1;
2580 ListAdd(args, (exp = MkExpConstant("0")));
2582 switch(method->memberAccess)
2585 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2588 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2592 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2595 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMethod")), args)));
2596 ListAdd(registerModuleBody->compound.statements, stmt);
2599 RegisterMembersAndProperties(regClass, 0x0, "class", registerModuleBody);
2602 struct __ecereNameSpace__ecere__sys__NamedLink * value;
2603 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
2604 struct __ecereNameSpace__ecere__com__EnumClassData * e = (regClass ? ((void *)(((char *)regClass->data) + enumClass->offsetClass)) : (((void *)0)));
2606 for(value = e->values.first; value; value = value->next)
2608 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2610 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2612 char * string = QMkString(value->name);
2614 ListAdd(args, MkExpString(string));
2615 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2620 sprintf(temp, "%d", (int)value->data);
2621 ListAdd(args, MkExpConstant(temp));
2623 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eEnum_AddFixedValue")), args)));
2624 ListAdd(registerModuleBody->compound.statements, stmt);
2627 if(symbol->templateParams)
2629 struct TemplateParameter * param;
2631 for(param = (*symbol->templateParams).first; param; param = param->next)
2633 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2635 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2637 char * string = QMkString(param->identifier->string);
2639 ListAdd(args, MkExpString(string));
2640 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2642 ListAdd(args, MkExpIdentifier(MkIdentifier((param->type == 0) ? "type" : ((param->type == 1) ? "identifier" : "expression"))));
2648 char * typeString = param->dataType ? StringFromSpecDecl(param->dataType->specifiers, param->dataType->decl) : (((void *)0));
2649 char * string = QMkString(typeString);
2651 ListAdd(args, MkExpString(string));
2652 (__ecereNameSpace__ecere__com__eSystem_Delete(typeString), typeString = 0);
2653 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2658 char memberTypeString[132] = "TemplateMemberType::";
2659 unsigned int needClass = 0x1;
2661 ((char * (*)(struct __ecereNameSpace__ecere__com__Class *, void *, char * tempString, void * fieldData, unsigned int * needClass))__ecereClass___ecereNameSpace__ecere__com__TemplateMemberType->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass___ecereNameSpace__ecere__com__TemplateMemberType, ¶m->memberType, memberTypeString + strlen(memberTypeString), (((void *)0)), &needClass);
2662 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(memberTypeString))));
2666 if(param->defaultArgument)
2668 struct __ecereNameSpace__ecere__sys__OldList * members = MkList();
2674 char * typeString = param->defaultArgument->templateDatatype ? StringFromSpecDecl(param->defaultArgument->templateDatatype->specifiers, param->defaultArgument->templateDatatype->decl) : (((void *)0));
2675 char * string = QMkString(typeString);
2677 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(MkListOne(MkIdentifier("dataTypeString")), MkInitializerAssignment(MkExpString(string))));
2678 (__ecereNameSpace__ecere__com__eSystem_Delete(typeString), typeString = 0);
2679 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2684 char memberString[1024];
2687 memberString[0] = '\0';
2688 if(param->defaultArgument->identifier->_class)
2690 if(param->defaultArgument->identifier->_class->type == 8)
2691 strcpy(memberString, param->defaultArgument->identifier->_class->templateParameter->identifier->string);
2692 else if(param->defaultArgument->identifier->_class->name)
2693 strcpy(memberString, param->defaultArgument->identifier->_class->name);
2696 strcat(memberString, "::");
2697 strcat(memberString, param->defaultArgument->identifier->string);
2698 string = QMkString(memberString);
2699 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(MkListOne(MkIdentifier("dataTypeString")), MkInitializerAssignment(MkExpString(string))));
2700 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2709 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2712 struct __ecereNameSpace__ecere__sys__OldList * ids = MkList();
2714 char * string = (((void *)0));
2716 op = GetOperand(param->defaultArgument->expression);
2717 ui64String = PrintUInt64(op.ui64);
2718 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ids), MkIdentifier("expression"));
2719 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ids), MkIdentifier("ui64"));
2720 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(ids, MkInitializerAssignment(MkExpConstant(ui64String))));
2721 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2722 (__ecereNameSpace__ecere__com__eSystem_Delete(ui64String), ui64String = 0);
2726 ListAdd(args, MkExpInstance(MkInstantiation(MkSpecifierName("ClassTemplateArgument"), (((void *)0)), MkListOne(MkMembersInitList(members)))));
2729 ListAdd(args, MkExpIdentifier(MkIdentifier("null")));
2730 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddTemplateParameter")), args)));
2731 ListAdd(registerModuleBody->compound.statements, stmt);
2733 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_DoneAddingTemplateParameters")), MkListOne(MkExpIdentifier(MkIdentifier("class"))))));
2734 ListAdd(registerModuleBody->compound.statements, stmt);
2736 if(definitions != (((void *)0)))
2738 for(def = definitions->first; def; def = def->next)
2740 if(def->type == 4 && def->propertyWatch)
2742 ListAdd(registerModuleBody->compound.statements, (struct Statement *)def->propertyWatch);
2743 def->propertyWatch = (((void *)0));
2745 else if(def->type == 5)
2747 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("designerClass")), '=', MkExpString(QMkString(def->designer))))), (((void *)0)));
2748 ListAdd(registerModuleBody->compound.statements, stmt);
2750 else if(def->type == 6)
2752 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("noExpansion")), '=', MkExpConstant("1")))), (((void *)0)));
2753 ListAdd(registerModuleBody->compound.statements, stmt);
2755 else if(def->type == 7)
2757 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("fixed")), '=', MkExpConstant("1")))), (((void *)0)));
2758 ListAdd(registerModuleBody->compound.statements, stmt);
2760 regClass->fixed = 0x1;
2762 else if(def->type == 8)
2764 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("defaultProperty")), '=', MkExpString(QMkString(def->defaultProperty->string))))), (((void *)0)));
2765 ListAdd(registerModuleBody->compound.statements, stmt);
2767 else if(def->type == 11)
2769 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2771 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2772 ListAdd(args, MkExpString(QMkString(def->id->string)));
2773 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(INT64)), (((void *)0))), def->initializer->exp));
2774 def->initializer->exp = (((void *)0));
2775 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eClass_SetProperty")), args)));
2776 ListAdd(registerModuleBody->compound.statements, stmt);
2784 extern int strcmp(const char * , const char * );
2786 extern void PrintExpression(struct Expression * exp, char * string);
2788 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
2790 void ProcessClassDefinitions()
2792 struct External * external, * next;
2794 CreateRegisterModuleBody();
2797 for(external = (*ast).first; external; external = next)
2799 next = external->next;
2800 curExternal = external;
2801 if(external->type == 2)
2803 struct ClassDefinition * _class = external->_class;
2805 if(_class->definitions)
2807 ProcessClass(0, _class->definitions, _class->symbol, _class->baseSpecs, (((void *)0)), ast, external, _class->declMode);
2811 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2812 FreeExternal(external);
2815 else if(external->type == 0)
2817 unsigned int setStaticMethod = 0x0;
2819 if(external->symbol && !external->symbol->type->thisClass && !external->symbol->type->staticMethod)
2821 external->symbol->type->staticMethod = 0x1;
2822 setStaticMethod = 0x1;
2826 struct FunctionDefinition * function = external->function;
2827 struct Statement * stmt;
2828 struct __ecereNameSpace__ecere__sys__OldList * args;
2830 if(!strcmp(function->declarator->symbol->string, "__on_register_module"))
2832 ListAdd(registerModuleBody->compound.statements, function->body);
2833 function->body->compound.context->parent = registerModuleBody->compound.context;
2834 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2835 function->body = (((void *)0));
2836 FreeExternal(external);
2839 if(function->declMode != 2 && function->declMode != 1)
2842 CreateRegisterModuleBody();
2844 char * string = QMkString(function->declarator->symbol->string);
2846 ListAdd(args, MkExpString(string));
2847 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2851 char type[1024] = "";
2854 function->declarator->symbol->type->staticMethod = 0x0;
2855 PrintType(function->declarator->symbol->type, type, 0x1, 0x1);
2857 function->declarator->symbol->type->staticMethod = 0x1;
2858 string = QMkString(type);
2859 ListAdd(args, MkExpString(string));
2860 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2863 ListAdd(args, MkExpIdentifier(MkIdentifier(function->declarator->symbol->string)));
2865 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2866 switch(function->declMode)
2869 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2872 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2876 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2879 stmt = MkExpressionStmt(MkListOne(MkExpCall((MkExpIdentifier(MkIdentifier("eSystem_RegisterFunction"))), args)));
2880 ListAdd(registerModuleBody->compound.statements, stmt);
2883 else if(external->type == 1)
2885 struct Declaration * declaration = external->declaration;
2887 if(external->symbol)
2889 if(external->symbol->type && external->symbol->type->kind == 11 && !external->symbol->type->thisClass)
2890 external->symbol->type->staticMethod = 0x1;
2892 if(external->symbol && declaration->type == 1)
2894 if(declaration->specifiers)
2896 struct Specifier * specifier;
2897 unsigned int removeExternal = 0x0;
2899 for(specifier = (*declaration->specifiers).first; specifier; specifier = specifier->next)
2901 if((specifier->type == 2 || specifier->type == 3 || specifier->type == 4) && specifier->id && specifier->id->string && (declaration->declMode || specifier->baseSpecs || (specifier->type == 2 && specifier->definitions)))
2903 struct Symbol * symbol = FindClass(specifier->id->string);
2909 if(specifier->type == 2)
2913 removeExternal = 0x1;
2914 symbol->ctx = specifier->ctx;
2915 specifier->ctx = (((void *)0));
2916 ProcessClass(classType, specifier->definitions, symbol, specifier->baseSpecs, specifier->list, ast, external, declaration->declMode);
2920 if(inCompiler && removeExternal)
2922 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2923 FreeExternal(external);
2927 else if(declaration->type == 3)
2929 if(inCompiler && declaration->declMode != 3)
2931 struct Statement * stmt;
2932 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2934 CreateRegisterModuleBody();
2936 char * string = QMkString(declaration->id->string);
2938 ListAdd(args, MkExpString(string));
2939 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2943 char type[1024] = "";
2945 PrintExpression(declaration->exp, type);
2946 string = QMkString(type);
2947 ListAdd(args, MkExpString(string));
2948 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2950 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2951 switch(declaration->declMode)
2954 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2957 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2961 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2964 stmt = MkExpressionStmt(MkListOne(MkExpCall((MkExpIdentifier(MkIdentifier("eSystem_RegisterDefine"))), args)));
2965 ListAdd(registerModuleBody->compound.statements, stmt);
2973 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2975 struct __ecereNameSpace__ecere__com__GlobalFunction;
2977 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(char * name, char * type, void * func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
2979 void __ecereRegisterModule_pass1(struct __ecereNameSpace__ecere__com__Instance * module)
2981 struct __ecereNameSpace__ecere__com__Class * class;
2983 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetBuildingEcereCom", "void SetBuildingEcereCom(bool b)", SetBuildingEcereCom, module, 1);
2984 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetBuildingEcereCom", "bool GetBuildingEcereCom(void)", GetBuildingEcereCom, module, 1);
2985 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetBuildingEcereComModule", "void SetBuildingEcereComModule(bool b)", SetBuildingEcereComModule, module, 1);
2986 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetBuildingEcereComModule", "bool GetBuildingEcereComModule(void)", GetBuildingEcereComModule, module, 1);
2987 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessClassFunction", "External ProcessClassFunction(ecere::com::Class owningClass, ClassFunction func, ecere::sys::OldList defs, External after, bool makeStatic)", ProcessClassFunction, module, 2);
2988 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CreateRegisterModuleBody", "void CreateRegisterModuleBody(void)", CreateRegisterModuleBody, module, 2);
2989 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("RegisterMembersAndProperties", "void RegisterMembersAndProperties(ecere::com::Class regClass, bool isMember, char * className, Statement statement)", RegisterMembersAndProperties, module, 2);
2990 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetNameSpaceString", "void GetNameSpaceString(ecere::com::NameSpace ns, char * string)", GetNameSpaceString, module, 2);
2991 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessClassDefinitions", "void ProcessClassDefinitions(void)", ProcessClassDefinitions, module, 1);
2994 void __ecereUnregisterModule_pass1(struct __ecereNameSpace__ecere__com__Instance * module)