2 typedef long long int64;
3 typedef unsigned long long uint64;
4 #elif defined(__TINYC__)
6 #define __builtin_va_list va_list
7 #define __builtin_va_start va_start
8 #define __builtin_va_end va_end
10 #define strcasecmp stricmp
11 #define strncasecmp strnicmp
12 #define __declspec(x) __attribute__((x))
14 typedef long long int64;
15 typedef unsigned long long uint64;
17 typedef __int64 int64;
18 typedef unsigned __int64 uint64;
21 #define __ENDIAN_PAD(x) (8 - (x))
23 #define __ENDIAN_PAD(x) 0
25 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
27 struct __ecereNameSpace__ecere__sys__BTNode;
29 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
31 struct __ecereNameSpace__ecere__sys__BinaryTree
33 struct __ecereNameSpace__ecere__sys__BTNode * root;
35 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b);
36 void (* FreeKey)(void * key);
39 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
41 struct __ecereNameSpace__ecere__sys__OldList
50 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
52 struct __ecereNameSpace__ecere__com__Method
55 struct __ecereNameSpace__ecere__com__Method * parent;
56 struct __ecereNameSpace__ecere__com__Method * left;
57 struct __ecereNameSpace__ecere__com__Method * right;
62 struct __ecereNameSpace__ecere__com__Class * _class;
64 char * dataTypeString;
65 struct Type * dataType;
69 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
71 struct __ecereNameSpace__ecere__com__Property
73 struct __ecereNameSpace__ecere__com__Property * prev;
74 struct __ecereNameSpace__ecere__com__Property * next;
76 unsigned int isProperty;
79 struct __ecereNameSpace__ecere__com__Class * _class;
80 char * dataTypeString;
81 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
82 struct Type * dataType;
85 unsigned int (* IsSet)();
89 unsigned int conversion;
90 unsigned int watcherOffset;
92 unsigned int compiled;
93 unsigned int selfWatchable;
94 unsigned int isWatchable;
97 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
104 unsigned int included;
107 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
111 struct CodePosition start;
112 struct CodePosition end;
115 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
117 struct ClassDefinition
119 struct ClassDefinition * prev;
120 struct ClassDefinition * next;
122 struct Specifier * _class;
123 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
124 struct __ecereNameSpace__ecere__sys__OldList * definitions;
125 struct Symbol * symbol;
126 struct Location blockStart;
127 struct Location nameLoc;
130 unsigned int deleteWatchable;
133 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
137 struct Context * parent;
138 struct __ecereNameSpace__ecere__sys__BinaryTree types;
139 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
140 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
141 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
144 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
145 struct ClassDefinition * classDef;
146 unsigned int templateTypesOnly;
147 unsigned int hasNameSpace;
150 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
152 struct Instantiation;
154 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
158 struct Declaration * prev;
159 struct Declaration * next;
166 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
167 struct __ecereNameSpace__ecere__sys__OldList * declarators;
169 struct Instantiation * inst;
172 struct Identifier * id;
173 struct Expression * exp;
176 struct Specifier * extStorage;
177 struct Symbol * symbol;
181 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
185 struct Statement * prev;
186 struct Statement * next;
191 struct __ecereNameSpace__ecere__sys__OldList * expressions;
194 struct Identifier * id;
195 struct Statement * stmt;
199 struct Expression * exp;
200 struct Statement * stmt;
204 struct __ecereNameSpace__ecere__sys__OldList * declarations;
205 struct __ecereNameSpace__ecere__sys__OldList * statements;
206 struct Context * context;
207 unsigned int isSwitch;
211 struct __ecereNameSpace__ecere__sys__OldList * exp;
212 struct Statement * stmt;
213 struct Statement * elseStmt;
217 struct __ecereNameSpace__ecere__sys__OldList * exp;
218 struct Statement * stmt;
222 struct __ecereNameSpace__ecere__sys__OldList * exp;
223 struct Statement * stmt;
227 struct __ecereNameSpace__ecere__sys__OldList * exp;
228 struct Statement * stmt;
232 struct Statement * init;
233 struct Statement * check;
234 struct __ecereNameSpace__ecere__sys__OldList * increment;
235 struct Statement * stmt;
239 struct Identifier * id;
243 struct Specifier * spec;
245 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
246 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
247 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
251 struct Expression * watcher;
252 struct Expression * object;
253 struct __ecereNameSpace__ecere__sys__OldList * watches;
257 struct Identifier * id;
258 struct __ecereNameSpace__ecere__sys__OldList * exp;
259 struct __ecereNameSpace__ecere__sys__OldList * filter;
260 struct Statement * stmt;
262 struct Declaration * decl;
266 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
270 struct TypeName * prev;
271 struct TypeName * next;
273 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
274 struct Declarator * declarator;
276 struct Expression * bitCount;
279 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
283 struct Initializer * prev;
284 struct Initializer * next;
289 struct Expression * exp;
290 struct __ecereNameSpace__ecere__sys__OldList * list;
292 unsigned int isConstant;
295 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
297 struct __ecereNameSpace__ecere__com__DataValue
315 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
319 struct Expression * prev;
320 struct Expression * next;
328 struct Identifier * identifier;
330 struct Statement * compound;
331 struct Instantiation * instance;
333 struct __ecereNameSpace__ecere__sys__OldList * list;
336 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
337 struct Declarator * decl;
341 struct Identifier * id;
345 struct Expression * exp;
346 struct __ecereNameSpace__ecere__sys__OldList * arguments;
347 struct Location argLoc;
351 struct Expression * exp;
352 struct __ecereNameSpace__ecere__sys__OldList * index;
356 struct Expression * exp;
357 struct Identifier * member;
359 unsigned int thisPtr;
364 struct Expression * exp1;
365 struct Expression * exp2;
367 struct TypeName * typeName;
368 struct Specifier * _class;
371 struct TypeName * typeName;
372 struct Expression * exp;
376 struct Expression * cond;
377 struct __ecereNameSpace__ecere__sys__OldList * exp;
378 struct Expression * elseExp;
382 struct TypeName * typeName;
383 struct Expression * size;
387 struct TypeName * typeName;
388 struct Expression * size;
389 struct Expression * exp;
394 struct Identifier * id;
398 struct Expression * ds;
399 struct Expression * name;
403 struct TypeName * typeName;
404 struct Initializer * initializer;
408 struct Expression * exp;
409 struct TypeName * typeName;
412 unsigned int debugValue;
413 struct __ecereNameSpace__ecere__com__DataValue val;
414 unsigned int address;
415 unsigned int hasAddress;
416 struct Type * expType;
417 struct Type * destType;
420 unsigned int byReference;
421 unsigned int isConstant;
422 unsigned int addedThis;
423 unsigned int needCast;
424 unsigned int thisPtr;
427 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
429 struct TemplateDatatype
431 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
432 struct Declarator * decl;
435 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
437 struct TemplateArgument
439 struct TemplateArgument * prev;
440 struct TemplateArgument * next;
442 struct Identifier * name;
446 struct Expression * expression;
447 struct Identifier * identifier;
448 struct TemplateDatatype * templateDatatype;
452 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
454 struct TemplateParameter
456 struct TemplateParameter * prev;
457 struct TemplateParameter * next;
460 struct Identifier * identifier;
463 struct TemplateDatatype * dataType;
466 struct TemplateArgument * defaultArgument;
467 char * dataTypeString;
468 struct Type * baseType;
471 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
475 struct Specifier * prev;
476 struct Specifier * next;
485 struct Symbol * symbol;
486 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
490 struct Identifier * id;
491 struct __ecereNameSpace__ecere__sys__OldList * list;
492 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
493 struct __ecereNameSpace__ecere__sys__OldList * definitions;
494 unsigned int addNameSpace;
495 struct Context * ctx;
497 struct Expression * expression;
498 struct Specifier * _class;
499 struct TemplateParameter * templateParameter;
503 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
507 struct Identifier * prev;
508 struct Identifier * next;
510 struct Symbol * classSym;
511 struct Specifier * _class;
513 struct Identifier * badID;
516 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
520 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
524 struct Declarator * prev;
525 struct Declarator * next;
528 struct Symbol * symbol;
529 struct Declarator * declarator;
532 struct Identifier * identifier;
535 struct Expression * exp;
536 struct Expression * posExp;
541 struct Expression * exp;
542 struct Specifier * enumClass;
546 struct __ecereNameSpace__ecere__sys__OldList * parameters;
550 struct Pointer * pointer;
559 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
561 struct FunctionDefinition
563 struct FunctionDefinition * prev;
564 struct FunctionDefinition * next;
566 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
567 struct Declarator * declarator;
568 struct __ecereNameSpace__ecere__sys__OldList * declarations;
569 struct Statement * body;
570 struct __ecereNameSpace__ecere__com__Class * _class;
571 struct __ecereNameSpace__ecere__sys__OldList attached;
574 struct Symbol * propSet;
576 unsigned int propertyNoThis;
579 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
583 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
587 struct External * prev;
588 struct External * next;
591 struct Symbol * symbol;
594 struct FunctionDefinition * function;
595 struct ClassDefinition * _class;
596 struct Declaration * declaration;
598 struct Identifier * id;
599 struct DBTableDef * table;
604 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
608 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
612 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
617 struct Symbol * parent;
618 struct Symbol * left;
619 struct Symbol * right;
624 struct __ecereNameSpace__ecere__com__Method * method;
625 struct __ecereNameSpace__ecere__com__Property * _property;
626 struct __ecereNameSpace__ecere__com__Class * registered;
634 struct External * pointerExternal;
635 struct External * structExternal;
639 struct External * externalGet;
640 struct External * externalSet;
641 struct External * externalPtr;
642 struct External * externalIsSet;
646 struct External * methodExternal;
647 struct External * methodCodeExternal;
650 unsigned int imported;
651 unsigned int declaredStructSym;
652 struct __ecereNameSpace__ecere__com__Class * _class;
653 unsigned int declaredStruct;
654 unsigned int needConstructor;
655 unsigned int needDestructor;
656 char * constructorName;
659 char * destructorName;
660 struct ModuleImport * module;
661 struct ClassImport * _import;
662 struct Location nameLoc;
663 unsigned int isParam;
664 unsigned int isRemote;
665 unsigned int isStruct;
666 unsigned int fireWatchersDone;
668 unsigned int classData;
669 unsigned int isStatic;
671 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
672 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
673 struct Context * ctx;
677 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
686 struct Symbol * _class;
689 struct __ecereNameSpace__ecere__sys__OldList members;
694 struct Type * returnType;
695 struct __ecereNameSpace__ecere__sys__OldList params;
696 struct Symbol * thisClass;
697 unsigned int staticMethod;
698 struct TemplateParameter * thisClassTemplate;
702 struct __ecereNameSpace__ecere__com__Method * method;
703 struct __ecereNameSpace__ecere__com__Class * methodClass;
704 struct __ecereNameSpace__ecere__com__Class * usedClass;
708 struct Type * arrayType;
710 struct Expression * arraySizeExp;
711 unsigned int freeExp;
712 struct Symbol * enumClass;
715 struct TemplateParameter * templateParameter;
717 unsigned int isSigned;
719 unsigned int constant;
726 unsigned int byReference;
727 unsigned int extraParam;
729 unsigned int directClassAccess;
730 unsigned int computing;
731 unsigned int dllExport;
733 unsigned int keepCast;
734 unsigned int passAsTemplate;
738 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
740 struct __ecereNameSpace__ecere__com__Class
742 struct __ecereNameSpace__ecere__com__Class * prev;
743 struct __ecereNameSpace__ecere__com__Class * next;
749 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
750 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
753 struct __ecereNameSpace__ecere__com__Class * base;
754 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
755 struct __ecereNameSpace__ecere__sys__BinaryTree members;
756 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
757 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
758 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
759 struct __ecereNameSpace__ecere__sys__OldList derivatives;
763 struct __ecereNameSpace__ecere__com__Instance * module;
764 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
765 char * dataTypeString;
766 struct Type * dataType;
768 int defaultAlignment;
769 void (* Initialize)();
771 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
772 char * designerClass;
773 unsigned int noExpansion;
774 char * defaultProperty;
775 unsigned int comRedefinition;
777 unsigned int isRemote;
778 unsigned int internalDecl;
780 unsigned int computeSize;
782 int destructionWatchOffset;
784 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
785 int inheritanceAccess;
788 struct __ecereNameSpace__ecere__sys__OldList conversions;
789 struct __ecereNameSpace__ecere__sys__OldList templateParams;
790 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
791 struct __ecereNameSpace__ecere__com__Class * templateClass;
792 struct __ecereNameSpace__ecere__sys__OldList templatized;
796 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
798 struct __ecereNameSpace__ecere__com__Instance
801 struct __ecereNameSpace__ecere__com__Class * _class;
805 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
807 struct __ecereNameSpace__ecere__com__DataMember
809 struct __ecereNameSpace__ecere__com__DataMember * prev;
810 struct __ecereNameSpace__ecere__com__DataMember * next;
812 unsigned int isProperty;
815 struct __ecereNameSpace__ecere__com__Class * _class;
816 char * dataTypeString;
817 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
818 struct Type * dataType;
822 struct __ecereNameSpace__ecere__sys__OldList members;
823 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
828 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
830 struct __ecereNameSpace__ecere__com__SerialBuffer
832 unsigned char * _buffer;
838 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
840 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
846 char * dataTypeString;
847 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
849 struct __ecereNameSpace__ecere__com__DataValue expression;
855 struct __ecereNameSpace__ecere__com__DataMember * member;
856 struct __ecereNameSpace__ecere__com__Property * prop;
857 struct __ecereNameSpace__ecere__com__Method * method;
865 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, EXT_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
868 typedef union YYSTYPE
873 struct Identifier * id;
874 struct Expression * exp;
875 struct Specifier * specifier;
876 struct __ecereNameSpace__ecere__sys__OldList * list;
877 struct Enumerator * enumerator;
878 struct Declarator * declarator;
879 struct Pointer * pointer;
880 struct Initializer * initializer;
881 struct InitDeclarator * initDeclarator;
882 struct TypeName * typeName;
883 struct Declaration * declaration;
884 struct Statement * stmt;
885 struct FunctionDefinition * function;
886 struct External * external;
887 struct Context * context;
888 struct AsmField * asmField;
889 struct Instantiation * instance;
890 struct MembersInit * membersInit;
891 struct MemberInit * memberInit;
892 struct ClassFunction * classFunction;
893 struct ClassDefinition * _class;
894 struct ClassDef * classDef;
895 struct PropertyDef * prop;
897 struct Symbol * symbol;
898 struct PropertyWatch * propertyWatch;
899 struct TemplateParameter * templateParameter;
900 struct TemplateArgument * templateArgument;
901 struct TemplateDatatype * templateDatatype;
902 struct DBTableEntry * dbtableEntry;
903 struct DBIndexItem * dbindexItem;
904 struct DBTableDef * dbtableDef;
907 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
911 struct Enumerator * prev;
912 struct Enumerator * next;
914 struct Identifier * id;
915 struct Expression * exp;
918 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
920 struct InitDeclarator;
922 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
926 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
930 struct ClassFunction * prev;
931 struct ClassFunction * next;
933 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
934 struct Declarator * declarator;
935 struct __ecereNameSpace__ecere__sys__OldList * declarations;
936 struct Statement * body;
937 struct __ecereNameSpace__ecere__com__Class * _class;
938 struct __ecereNameSpace__ecere__sys__OldList attached;
941 struct Symbol * propSet;
942 unsigned int isVirtual;
943 unsigned int isConstructor;
944 unsigned int isDestructor;
945 unsigned int dontMangle;
950 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
954 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
958 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
962 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
966 struct PropertyWatch * prev;
967 struct PropertyWatch * next;
969 struct Statement * compound;
970 struct __ecereNameSpace__ecere__sys__OldList * properties;
971 unsigned int deleteWatch;
974 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
978 struct ClassDef * prev;
979 struct ClassDef * next;
984 struct Declaration * decl;
985 struct ClassFunction * function;
986 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
987 struct PropertyDef * propertyDef;
988 struct PropertyWatch * propertyWatch;
990 struct Identifier * defaultProperty;
993 struct Identifier * id;
994 struct Initializer * initializer;
1001 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1003 struct DBTableEntry;
1005 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1009 extern YYSTYPE yylval;
1011 extern struct Location yylloc;
1013 static struct Statement * registerModuleBody;
1015 static struct External * registerModuleExternal;
1017 static struct Statement * unregisterModuleBody;
1019 static struct External * unregisterModuleExternal;
1021 extern int propWatcherID;
1023 unsigned int buildingECERECOM = 0x0;
1025 void SetBuildingEcereCom(unsigned int b)
1027 buildingECERECOM = b;
1030 unsigned int GetBuildingEcereCom()
1032 return buildingECERECOM;
1035 unsigned int buildingECERECOMModule = 0x0;
1037 void SetBuildingEcereComModule(unsigned int b)
1039 buildingECERECOMModule = b;
1042 unsigned int GetBuildingEcereComModule()
1044 return buildingECERECOMModule;
1047 extern struct Identifier * GetDeclId(struct Declarator * decl);
1049 extern unsigned int inCompiler;
1051 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
1053 extern struct Specifier * MkSpecifier(int specifier);
1055 extern void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class);
1057 extern struct FunctionDefinition * MkFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * declarationList);
1059 extern void ProcessFunctionBody(struct FunctionDefinition * func, struct Statement * body);
1061 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
1063 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
1065 extern struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param);
1067 extern struct Type * ProcessTypeString(char * string, unsigned int staticMethod);
1069 extern struct Symbol * FindClass(char * name);
1071 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);
1073 extern void Compiler_Error(char * format, ...);
1075 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
1077 extern void FreeType(struct Type * type);
1079 extern void FreeExternal(struct External * external);
1081 extern struct Context * globalContext;
1083 extern struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols;
1085 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
1087 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* )(void * ));
1089 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1091 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
1093 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
1095 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1097 struct External * ProcessClassFunction(struct __ecereNameSpace__ecere__com__Class * owningClass, struct ClassFunction * func, struct __ecereNameSpace__ecere__sys__OldList * defs, struct External * after, unsigned int makeStatic)
1099 struct Identifier * id = GetDeclId(func->declarator);
1100 struct Type * type = (((void *)0));
1101 struct Symbol * symbol;
1102 struct External * external = (((void *)0));
1104 if(defs && func->declarator)
1106 struct FunctionDefinition * function = (((void *)0));
1107 struct Symbol * propSymbol;
1108 int symid = func->declarator->symbol->id;
1109 int symidCode = func->declarator->symbol->idCode;
1113 if(!func->specifiers)
1114 func->specifiers = MkList();
1116 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*func->specifiers), (((void *)0)), MkSpecifier(STATIC));
1118 propSymbol = func->declarator->symbol;
1119 ReplaceThisClassSpecifiers(func->specifiers, owningClass);
1120 if(propSymbol->externalGet == (struct External *)func)
1121 func->declarator->symbol = (((void *)0));
1122 else if(propSymbol->externalSet == (struct External *)func)
1124 func->declarator->symbol = (((void *)0));
1127 else if(propSymbol->externalIsSet == (struct External *)func)
1129 func->declarator->symbol = (((void *)0));
1133 function = MkFunction(func->specifiers, func->declarator, (((void *)0)));
1134 function->propSet = func->propSet;
1135 ProcessFunctionBody(function, func->body);
1136 external = MkExternalFunction(function);
1137 external->symbol = func->declarator->symbol;
1138 external->function->_class = func->_class;
1140 symbol = func->declarator->symbol;
1142 symbol->idCode = symidCode;
1143 if(!func->dontMangle)
1145 struct __ecereNameSpace__ecere__com__Method * method = func->declarator->symbol->method;
1147 func->declarator->symbol->methodExternal = external;
1148 if(method && method->symbol)
1149 ((struct Symbol *)method->symbol)->methodCodeExternal = external;
1150 if(method && method->type == 1)
1152 struct Type * methodDataType;
1154 ProcessMethodType(method);
1155 methodDataType = method->dataType;
1156 type = symbol->type;
1157 if(!type->staticMethod && !type->thisClass && !type->thisClassTemplate)
1159 if(method->dataType->thisClassTemplate)
1161 if(owningClass->templateArgs)
1163 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = FindTemplateArg(owningClass, method->dataType->thisClassTemplate);
1165 type->byReference = method->dataType->byReference;
1166 methodDataType = ProcessTypeString(method->dataTypeString, 0x0);
1167 type->thisClass = methodDataType->thisClass = arg ? FindClass((*arg).dataTypeString) : (((void *)0));
1170 else if(method->dataType->staticMethod)
1171 type->staticMethod = 0x1;
1172 else if(method->dataType->thisClass)
1174 type->thisClass = method->dataType->thisClass;
1175 type->byReference = method->dataType->byReference;
1179 if(!owningClass->symbol)
1180 owningClass->symbol = FindClass(owningClass->fullName);
1181 type->thisClass = owningClass->symbol;
1182 type->extraParam = 0x1;
1186 if(!MatchTypes(type, methodDataType, (((void *)0)), owningClass, method->_class, 0x1, 0x1, 0x1, 0x0))
1188 Compiler_Error("Incompatible virtual function %s\n", method->name);
1192 struct Type * typeParam;
1193 struct Declarator * funcDecl = GetFuncDecl(func->declarator);
1195 if(funcDecl->function.parameters)
1197 struct TypeName * param = (*funcDecl->function.parameters).first;
1199 for(typeParam = methodDataType->params.first; typeParam; typeParam = typeParam->next)
1201 if(typeParam->classObjectType)
1203 param->classObjectType = typeParam->classObjectType;
1204 if(param->declarator && param->declarator->symbol)
1205 param->declarator->symbol->type->classObjectType = typeParam->classObjectType;
1207 param = param->next;
1211 if(methodDataType != method->dataType)
1212 FreeType(methodDataType);
1216 type = symbol->type;
1217 if(!type->staticMethod && !type->thisClass)
1219 if(owningClass && !owningClass->symbol)
1220 owningClass->symbol = FindClass(owningClass->fullName);
1221 type->thisClass = owningClass ? FindClass(owningClass->fullName) : (((void *)0));
1227 if(symbol->type && !symbol->type->staticMethod && !symbol->type->thisClass)
1229 if(!owningClass->symbol)
1230 owningClass->symbol = FindClass(owningClass->fullName);
1231 symbol->type->thisClass = owningClass->symbol;
1233 if(propSymbol->externalSet == (struct External *)func && propSymbol->_property && propSymbol->_property->conversion)
1235 if(symbol->type->thisClass && symbol->type->classObjectType != 1)
1237 if(owningClass->type != 1)
1238 symbol->type->thisClass = (((void *)0));
1241 if(propSymbol->externalGet == (struct External *)func)
1243 propSymbol->externalGet = external;
1245 else if(propSymbol->externalSet == (struct External *)func)
1247 propSymbol->externalSet = external;
1249 else if(propSymbol->externalIsSet == (struct External *)func)
1251 propSymbol->externalIsSet = external;
1261 func->declarator = (((void *)0));
1262 func->specifiers = (((void *)0));
1263 func->body = (((void *)0));
1264 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1268 struct __ecereNameSpace__ecere__com__Method * method = func->declarator->symbol->method;
1270 if(method && method->symbol)
1271 ((struct Symbol *)method->symbol)->methodCodeExternal = (((void *)0));
1272 func->declarator = (((void *)0));
1273 func->specifiers = (((void *)0));
1274 FreeExternal(external);
1279 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
1280 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), symbol);
1281 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1282 external->function->declarator = CopyDeclarator(external->function->declarator);
1283 external->function->specifiers = CopyList(external->function->specifiers, CopySpecifier);
1284 external->function->body = (((void *)0));
1290 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
1292 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
1294 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
1296 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
1298 extern struct Specifier * MkSpecifierName(char * name);
1300 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1302 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1304 extern struct Identifier * MkIdentifier(char * string);
1306 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1308 extern char * __ecereNameSpace__ecere__sys__GetLastDirectory(char * string, char * output);
1310 extern char * outputFile;
1312 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string);
1314 extern void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2);
1316 extern int sprintf(char * , char * , ...);
1318 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1320 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
1322 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1324 void CreateRegisterModuleBody()
1326 void * __ecereTemp1;
1328 if(!registerModuleBody && inCompiler)
1330 char registerName[1024], moduleName[274];
1331 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1332 struct Declarator * declarator;
1333 struct TypeName * moduleParam;
1335 registerModuleBody = MkCompoundStmt(MkList(), MkList());
1336 registerModuleBody->compound.context = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context), ((struct Context *)__ecereTemp1)->parent = globalContext, ((struct Context *)__ecereTemp1));
1337 ListAdd(registerModuleBody->compound.declarations, MkDeclaration(MkListOne(MkSpecifierName("ecere::com::Class")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("class")), (((void *)0))))));
1338 specifiers = MkList();
1339 ListAdd(specifiers, MkSpecifier(VOID));
1340 moduleParam = MkTypeName(MkListOne(MkSpecifierName("Module")), MkDeclaratorIdentifier(MkIdentifier("module")));
1341 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1342 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1343 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '.', '_');
1344 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, ' ', '_');
1345 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '-', '_');
1346 sprintf(registerName, "__ecereRegisterModule_%s", moduleName);
1347 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), MkListOne(moduleParam));
1349 struct FunctionDefinition * function = MkFunction(specifiers, declarator, (((void *)0)));
1351 ProcessFunctionBody(function, registerModuleBody);
1352 function->declMode = 0;
1355 ListAdd(ast, (registerModuleExternal = MkExternalFunction(function)));
1358 if(!unregisterModuleBody && inCompiler)
1360 char registerName[1024], moduleName[274];
1361 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1362 struct Declarator * declarator;
1363 struct TypeName * moduleParam;
1365 unregisterModuleBody = MkCompoundStmt(MkList(), MkList());
1366 unregisterModuleBody->compound.context = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context), ((struct Context *)__ecereTemp1)->parent = globalContext, ((struct Context *)__ecereTemp1));
1367 specifiers = MkList();
1368 ListAdd(specifiers, MkSpecifier(VOID));
1369 moduleParam = MkTypeName(MkListOne(MkSpecifierName("Module")), MkDeclaratorIdentifier(MkIdentifier("module")));
1370 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1371 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1372 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '.', '_');
1373 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, ' ', '_');
1374 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '-', '_');
1375 sprintf(registerName, "__ecereUnregisterModule_%s", moduleName);
1376 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), MkListOne(moduleParam));
1378 struct FunctionDefinition * function = MkFunction(specifiers, declarator, (((void *)0)));
1380 ProcessFunctionBody(function, unregisterModuleBody);
1381 function->declMode = 0;
1384 ListAdd(ast, (unregisterModuleExternal = MkExternalFunction(function)));
1389 extern struct Expression * MkExpIdentifier(struct Identifier * id);
1391 extern struct Expression * MkExpConstant(char * string);
1393 extern char * QMkString(char * source);
1395 extern struct Expression * MkExpString(char * string);
1397 extern char * strcpy(char * , const char * );
1399 extern void FullClassNameCat(char * output, char * className, unsigned int includeTemplateParams);
1401 extern char * strcat(char * , const char * );
1403 extern void MangleClassName(char * className);
1405 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
1407 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
1409 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
1411 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
1413 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1415 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1417 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
1419 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
1421 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
1423 struct __ecereNameSpace__ecere__com__BitMember
1425 struct __ecereNameSpace__ecere__com__BitMember * prev;
1426 struct __ecereNameSpace__ecere__com__BitMember * next;
1428 unsigned int isProperty;
1431 struct __ecereNameSpace__ecere__com__Class * _class;
1432 char * dataTypeString;
1433 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1434 struct Type * dataType;
1441 extern int ComputeTypeSize(struct Type * type);
1443 extern struct Context * curContext;
1445 extern struct Context * PushContext(void);
1447 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1449 extern void PopContext(struct Context * ctx);
1451 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
1453 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
1455 struct __ecereNameSpace__ecere__com__ClassProperty
1458 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1459 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1460 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1462 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, int);
1463 int (* Get)(struct __ecereNameSpace__ecere__com__Class *);
1464 char * dataTypeString;
1465 struct Type * dataType;
1466 unsigned int constant;
1469 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
1471 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
1473 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
1475 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
1477 void RegisterMembersAndProperties(struct __ecereNameSpace__ecere__com__Class * regClass, unsigned int isMember, char * className, struct Statement * statement)
1479 struct __ecereNameSpace__ecere__com__DataMember * dataMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)regClass : (((void *)0));
1480 struct __ecereNameSpace__ecere__com__DataMember * member;
1481 struct __ecereNameSpace__ecere__com__Property * prop;
1482 struct Expression * exp;
1483 struct Statement * stmt;
1484 char dataMemberSize[16];
1485 unsigned int lastOffset = 0;
1487 unsigned int privateMembers = 0x0;
1489 sprintf(dataMemberSize, "%d", sizeof(struct __ecereNameSpace__ecere__com__DataMember *));
1492 for(prop = regClass->conversions.first; prop; prop = prop->next)
1494 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1497 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1498 ListAdd(args, MkExpConstant("0"));
1500 char * string = QMkString(prop->dataTypeString);
1502 ListAdd(args, MkExpString(string));
1503 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1507 strcpy(name, "__ecereProp_");
1508 FullClassNameCat(name, regClass->fullName, 0x0);
1509 strcat(name, "_Set_");
1510 FullClassNameCat(name, prop->name, 0x1);
1511 MangleClassName(name);
1512 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1515 ListAdd(args, MkExpConstant("0"));
1518 strcpy(name, "__ecereProp_");
1519 FullClassNameCat(name, regClass->fullName, 0x0);
1520 strcat(name, "_Get_");
1521 FullClassNameCat(name, prop->name, 0x1);
1522 MangleClassName(name);
1523 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1526 ListAdd(args, MkExpConstant("0"));
1527 switch(prop->memberAccess)
1530 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1533 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1537 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1540 strcpy(name, "__ecereProp_");
1541 FullClassNameCat(name, regClass->fullName, 0x0);
1543 FullClassNameCat(name, prop->name, 0x1);
1544 MangleClassName(name);
1545 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args))));
1546 ListAdd(registerModuleBody->compound.statements, stmt);
1549 for(member = isMember ? dataMember->members.first : regClass->membersAndProperties.first; member; member = member->next)
1551 if(member->isProperty)
1553 prop = (struct __ecereNameSpace__ecere__com__Property *)member;
1555 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1556 char name[1024], nameM[1024];
1557 char * string = QMkString(prop->name);
1559 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1560 ListAdd(args, MkExpString(string));
1561 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1563 char * string = QMkString(prop->dataTypeString);
1565 ListAdd(args, MkExpString(string));
1566 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1570 strcpy(name, "__ecereProp_");
1571 FullClassNameCat(name, regClass->fullName, 0x0);
1572 strcat(name, "_Set_");
1573 FullClassNameCat(name, prop->name, 0x1);
1574 MangleClassName(name);
1575 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1578 ListAdd(args, MkExpConstant("0"));
1581 strcpy(name, "__ecereProp_");
1582 FullClassNameCat(name, regClass->fullName, 0x0);
1583 strcat(name, "_Get_");
1584 FullClassNameCat(name, prop->name, 0x1);
1585 MangleClassName(name);
1586 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1589 ListAdd(args, MkExpConstant("0"));
1590 switch(prop->memberAccess)
1593 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1596 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1600 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1603 strcpy(name, "__ecereProp_");
1604 FullClassNameCat(name, regClass->fullName, 0x0);
1606 FullClassNameCat(name, prop->name, 0x1);
1607 MangleClassName(name);
1608 strcpy(nameM, "__ecerePropM_");
1609 FullClassNameCat(nameM, regClass->fullName, 0x0);
1611 FullClassNameCat(nameM, prop->name, 0x1);
1612 MangleClassName(nameM);
1613 if(prop->dataTypeString)
1615 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args))));
1619 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args)));
1621 ListAdd(registerModuleBody->compound.statements, stmt);
1626 strcpy(name, "__ecereProp_");
1627 FullClassNameCat(name, regClass->fullName, 0x1);
1628 strcat(name, "_IsSet_");
1629 FullClassNameCat(name, prop->name, 0x0);
1630 MangleClassName(name);
1631 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))))));
1632 ListAdd(registerModuleBody->compound.statements, stmt);
1636 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier(nameM)), MkIdentifier("category")), '=', MkExpString(QMkString(prop->category)))));
1637 ListAdd(registerModuleBody->compound.statements, stmt);
1639 if(prop->dataTypeString)
1641 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
1643 ListAdd(list, MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', MkExpIdentifier(MkIdentifier(nameM))));
1644 ListAdd(list, MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0"))));
1645 stmt = MkIfStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("module")), MkIdentifier("application")), EQ_OP, MkExpMember(MkExpIdentifier(MkIdentifier("__thisModule")), MkIdentifier("application")))), MkExpressionStmt(list), (((void *)0)));
1646 ListAdd(registerModuleBody->compound.statements, stmt);
1647 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0")))));
1648 ListAdd(unregisterModuleBody->compound.statements, stmt);
1652 else if(member->type == 0 && !isMember && regClass->type == 2)
1654 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)member;
1655 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1657 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1659 char * string = QMkString(bitMember->name);
1661 ListAdd(args, MkExpString(string));
1662 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1665 char * string = QMkString(bitMember->dataTypeString);
1667 ListAdd(args, MkExpString(string));
1668 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1673 sprintf(string, "%d", bitMember->size);
1674 ListAdd(args, (exp = MkExpConstant(string)));
1679 sprintf(string, "%d", bitMember->pos);
1680 ListAdd(args, (exp = MkExpConstant(string)));
1682 switch(member->memberAccess)
1685 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1688 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1692 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1695 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddBitMember")), args)));
1696 ListAdd(statement->compound.statements, stmt);
1698 else if(member->memberAccess == 1 || (member->type == 0 && !member->dataTypeString))
1700 struct __ecereNameSpace__ecere__sys__OldList * args;
1704 unsigned int offset = member->offset - lastOffset;
1707 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1711 sprintf(string, "\"__ecerePrivateData%d\"", privateID++);
1712 ListAdd(args, MkExpString(string));
1717 sprintf(string, "\"byte[%d]\"", offset);
1718 ListAdd(args, MkExpString(string));
1723 sprintf(string, "%d", offset);
1724 ListAdd(args, (exp = MkExpConstant(string)));
1726 ListAdd(args, (exp = MkExpConstant("1")));
1727 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1728 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier(isMember ? "eMember_AddDataMember" : "eClass_AddDataMember")), args)));
1729 ListAdd(statement->compound.statements, stmt);
1730 privateMembers = 0x0;
1732 if(member->type == 0)
1734 if(!member->dataType)
1735 member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
1736 ComputeTypeSize(member->dataType);
1738 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1740 char * string = QMkString(member->name);
1742 ListAdd(args, MkExpString(string));
1743 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1746 char * string = QMkString(member->dataTypeString);
1748 ListAdd(args, MkExpString(string));
1749 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1754 sprintf(string, "%d", member->dataType->size);
1755 ListAdd(args, (exp = MkExpConstant(string)));
1760 sprintf(string, "%d", member->dataType->alignment);
1761 ListAdd(args, (exp = MkExpConstant(string)));
1763 switch(member->memberAccess)
1766 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1769 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1773 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1776 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier(isMember ? "eMember_AddDataMember" : "eClass_AddDataMember")), args)));
1777 ListAdd(statement->compound.statements, stmt);
1778 lastOffset = member->offset + member->dataType->size;
1782 static int memberCount = 0;
1783 struct Context * context;
1784 struct Statement * compound;
1785 char memberName[256];
1787 sprintf(memberName, "dataMember%d", memberCount);
1789 curContext = statement->compound.context;
1790 context = PushContext();
1791 args = MkListOne(MkExpIdentifier(MkIdentifier((member->type == 1) ? "unionMember" : "structMember")));
1792 switch(member->memberAccess)
1795 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1798 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1802 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1805 compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifierName("DataMember")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(memberName)), MkInitializerAssignment(MkExpCall(MkExpIdentifier(MkIdentifier("eMember_New")), args)))))), MkList());
1806 compound->compound.context = context;
1808 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1809 ListAdd(args, MkExpIdentifier(MkIdentifier(memberName)));
1810 RegisterMembersAndProperties((struct __ecereNameSpace__ecere__com__Class *)member, 0x1, memberName, compound);
1812 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eMember_AddMember")), args)));
1814 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMember")), args)));
1815 ListAdd(compound->compound.statements, stmt);
1816 PopContext(context);
1817 ListAdd(statement->compound.statements, compound);
1819 lastOffset = member->offset + member->memberOffset;
1823 privateMembers = 0x1;
1827 struct __ecereNameSpace__ecere__com__ClassProperty * classProperty;
1829 for(prop = regClass->membersAndProperties.first; prop; prop = prop->next)
1831 if(prop->isProperty && prop->isWatchable)
1833 struct __ecereNameSpace__ecere__sys__OldList * args;
1834 char name[1024], nameM[1024];
1836 strcpy(name, "__ecereProp_");
1837 FullClassNameCat(name, regClass->fullName, 0x1);
1839 FullClassNameCat(name, prop->name, 0x0);
1840 MangleClassName(name);
1841 strcpy(nameM, "__ecerePropM_");
1842 FullClassNameCat(nameM, regClass->fullName, 0x1);
1844 FullClassNameCat(nameM, prop->name, 0x0);
1845 MangleClassName(nameM);
1846 args = MkListOne(MkExpCondition(MkExpIdentifier(MkIdentifier(nameM)), MkListOne(MkExpIdentifier(MkIdentifier(nameM))), MkExpIdentifier(MkIdentifier(name))));
1847 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eProperty_Watchable")), args)));
1848 ListAdd(registerModuleBody->compound.statements, stmt);
1851 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)))
1853 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1855 char * string = QMkString(classProperty->name);
1857 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1858 ListAdd(args, MkExpString(string));
1859 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1861 char * string = QMkString(classProperty->dataTypeString);
1863 ListAdd(args, MkExpString(string));
1864 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1866 if(classProperty->Set)
1868 strcpy(name, "__ecereClassProp_");
1869 FullClassNameCat(name, regClass->fullName, 0x1);
1870 strcat(name, "_Set_");
1871 strcat(name, classProperty->name);
1872 MangleClassName(name);
1873 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1876 ListAdd(args, MkExpConstant("0"));
1877 if(classProperty->Get)
1879 strcpy(name, "__ecereClassProp_");
1880 FullClassNameCat(name, regClass->fullName, 0x1);
1881 strcat(name, "_Get_");
1882 strcat(name, classProperty->name);
1883 MangleClassName(name);
1884 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1887 ListAdd(args, MkExpConstant("0"));
1888 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddClassProperty")), args)));
1889 ListAdd(registerModuleBody->compound.statements, stmt);
1894 extern struct External * curExternal;
1896 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1898 struct __ecereNameSpace__ecere__com__NameSpace
1901 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1902 struct __ecereNameSpace__ecere__com__NameSpace * left;
1903 struct __ecereNameSpace__ecere__com__NameSpace * right;
1905 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1906 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1907 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1908 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1909 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1912 void GetNameSpaceString(struct __ecereNameSpace__ecere__com__NameSpace * ns, char * string)
1915 GetNameSpaceString(ns->parent, string);
1918 strcat(string, ns->name);
1919 strcat(string, "::");
1923 extern unsigned int parsingType;
1925 extern void ProcessExpressionType(struct Expression * exp);
1927 extern void ComputeExpression(struct Expression * exp);
1929 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
1933 unsigned int (* Add)(struct Expression *, struct Operand *, struct Operand *);
1934 unsigned int (* Sub)(struct Expression *, struct Operand *, struct Operand *);
1935 unsigned int (* Mul)(struct Expression *, struct Operand *, struct Operand *);
1936 unsigned int (* Div)(struct Expression *, struct Operand *, struct Operand *);
1937 unsigned int (* Mod)(struct Expression *, struct Operand *, struct Operand *);
1938 unsigned int (* Neg)(struct Expression *, struct Operand *);
1939 unsigned int (* Inc)(struct Expression *, struct Operand *);
1940 unsigned int (* Dec)(struct Expression *, struct Operand *);
1941 unsigned int (* Asign)(struct Expression *, struct Operand *, struct Operand *);
1942 unsigned int (* AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1943 unsigned int (* SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1944 unsigned int (* MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1945 unsigned int (* DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1946 unsigned int (* ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1947 unsigned int (* BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1948 unsigned int (* BitOr)(struct Expression *, struct Operand *, struct Operand *);
1949 unsigned int (* BitXor)(struct Expression *, struct Operand *, struct Operand *);
1950 unsigned int (* LShift)(struct Expression *, struct Operand *, struct Operand *);
1951 unsigned int (* RShift)(struct Expression *, struct Operand *, struct Operand *);
1952 unsigned int (* BitNot)(struct Expression *, struct Operand *);
1953 unsigned int (* AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1954 unsigned int (* OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1955 unsigned int (* XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1956 unsigned int (* LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1957 unsigned int (* RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1958 unsigned int (* Not)(struct Expression *, struct Operand *);
1959 unsigned int (* Equ)(struct Expression *, struct Operand *, struct Operand *);
1960 unsigned int (* Nqu)(struct Expression *, struct Operand *, struct Operand *);
1961 unsigned int (* And)(struct Expression *, struct Operand *, struct Operand *);
1962 unsigned int (* Or)(struct Expression *, struct Operand *, struct Operand *);
1963 unsigned int (* Grt)(struct Expression *, struct Operand *, struct Operand *);
1964 unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *);
1965 unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1966 unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1967 unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1970 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
1976 unsigned int ptrSize;
1994 extern struct Operand GetOperand(struct Expression * exp);
1996 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string, int value);
1998 extern int __ecereNameSpace__ecere__com__eEnum_AddValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string);
2000 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
2002 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
2004 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
2006 extern struct ClassDef * MkClassDefFunction(struct ClassFunction * function);
2008 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);
2010 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
2012 extern void FreePropertyWatch(struct PropertyWatch * watcher);
2014 extern char * sourceFile;
2016 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2018 extern void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
2020 extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
2022 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
2024 extern unsigned int DummyMethod(void);
2026 extern void DeclareMethod(struct __ecereNameSpace__ecere__com__Method * method, char * name);
2028 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char * name);
2030 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
2032 struct __ecereNameSpace__ecere__com__EnumClassData
2034 struct __ecereNameSpace__ecere__sys__OldList values;
2038 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
2040 struct __ecereNameSpace__ecere__sys__NamedLink
2042 struct __ecereNameSpace__ecere__sys__NamedLink * prev;
2043 struct __ecereNameSpace__ecere__sys__NamedLink * next;
2048 extern char * StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2050 extern int strlen(const char * );
2052 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
2054 extern char * PrintUInt64(uint64 result);
2056 extern struct Expression * MkExpInstance(struct Instantiation * inst);
2058 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
2060 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
2062 int __ecereVMethodID_class_OnGetString;
2064 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__TemplateMemberType;
2066 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)
2068 void * __ecereTemp1;
2069 struct ClassDef * def;
2070 struct __ecereNameSpace__ecere__com__Class * regClass = symbol->registered;
2074 classType = regClass->type;
2075 if(classType == 4 && enumValues && (inCompiler || !buildingECERECOMModule))
2077 struct Enumerator * e;
2079 for(e = enumValues->first; e; e = e->next)
2083 struct Type * destType = (destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), destType->kind = 3, destType->refCount = 1, destType);
2085 e->exp->destType = destType;
2087 ProcessExpressionType(e->exp);
2089 if(!e->exp->expType)
2092 destType->_class = symbol;
2093 ProcessExpressionType(e->exp);
2095 ComputeExpression(e->exp);
2096 if(e->exp->isConstant && e->exp->type == 2)
2098 struct Operand op = GetOperand(e->exp);
2112 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(regClass, e->id->string, value);
2115 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
2118 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
2121 if(definitions != (((void *)0)))
2125 for(def = definitions->first; def; def = def->next)
2127 if(def->type == 4 && def->propertyWatch)
2129 struct PropertyWatch * propWatch = def->propertyWatch;
2130 struct ClassFunction * func;
2131 char watcherName[1024];
2132 struct Identifier * propID;
2133 struct Statement * stmt = MkExpressionStmt(MkList());
2134 struct Declarator * decl;
2136 sprintf(watcherName, "__ecerePropertySelfWatcher_%d", propWatcherID++);
2137 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
2139 strcat(watcherName, "_");
2140 strcat(watcherName, propID->string);
2142 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0)))));
2143 func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((void *)0)), decl, (((void *)0)));
2144 ProcessClassFunctionBody(func, propWatch->compound);
2145 decl->symbol = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), ((struct Symbol *)__ecereTemp1)->id = symbol->id, ((struct Symbol *)__ecereTemp1)->idCode = symbol->idCode, ((struct Symbol *)__ecereTemp1));
2146 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), decl->symbol);
2147 func->id = symbol->id;
2148 func->idCode = symbol->idCode;
2149 func->dontMangle = 0x1;
2151 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
2152 struct Declaration * decl;
2153 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2155 ListAdd(specifiers, MkSpecifier(STATIC));
2156 ListAdd(specifiers, MkSpecifier(VOID));
2157 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, externalDecl);
2158 decl = MkDeclaration(specifiers, MkListOne(MkInitDeclarator(MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(regClass->fullName)), (((void *)0))))), (((void *)0)))));
2159 externalDecl->declaration = decl;
2160 if(decl->symbol && !decl->symbol->methodExternal)
2162 decl->symbol->methodExternal = externalDecl;
2163 decl->symbol->id = symbol->id;
2164 decl->symbol->idCode = symbol->idCode;
2167 propWatch->compound = (((void *)0));
2168 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, (((void *)0)), MkClassDefFunction(func));
2170 stmt->expressions = MkList();
2171 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
2173 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(regClass, propID->string, privateModule);
2177 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2179 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2180 ListAdd(args, MkExpString(QMkString(propID->string)));
2181 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
2182 ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("eProperty_SelfWatch")), args));
2185 Compiler_Error("Property %s not found in class %s\n", propID->string, regClass->fullName);
2187 FreePropertyWatch(def->propertyWatch);
2188 def->propertyWatch = (struct PropertyWatch *)stmt;
2192 for(def = definitions->first; def; def = def->next)
2196 ProcessClassFunction(regClass, def->function, defs, external->prev, declMode == 3);
2200 if(inCompiler && symbol->id != (((int)0x7fffffff)) && regClass)
2202 struct Statement * stmt;
2203 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2204 struct __ecereNameSpace__ecere__com__Method * method;
2205 struct Expression * exp;
2206 char * registerFunction = (((void *)0));
2207 int inheritanceAccess = 1;
2209 CreateRegisterModuleBody();
2210 curExternal = registerModuleExternal;
2211 switch(regClass->type)
2214 ListAdd(args, MkExpIdentifier(MkIdentifier("structClass")));
2217 ListAdd(args, MkExpIdentifier(MkIdentifier("bitClass")));
2220 ListAdd(args, MkExpIdentifier(MkIdentifier("enumClass")));
2223 ListAdd(args, MkExpIdentifier(MkIdentifier("noHeadClass")));
2226 ListAdd(args, MkExpIdentifier(MkIdentifier("unitClass")));
2229 ListAdd(args, MkExpIdentifier(MkIdentifier("normalClass")));
2233 char nameSpace[1024] = "";
2234 char className[1024] = "";
2237 GetNameSpaceString(regClass->nameSpace, nameSpace);
2240 __ecereNameSpace__ecere__sys__GetLastDirectory(sourceFile, className);
2241 __ecereNameSpace__ecere__sys__ChangeCh(className, '.', '_');
2242 strcat(className, "}");
2244 strcat(className, nameSpace);
2245 strcat(className, regClass->name);
2246 string = QMkString(className);
2247 ListAdd(args, MkExpString(string));
2248 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2250 if(baseSpecs != (((void *)0)))
2252 struct Type * baseType = ProcessType(baseSpecs, (((void *)0)));
2254 if(baseType->kind != 9 && baseType->kind != 10)
2256 char baseName[1024] = "";
2259 if(baseType->kind == 8 && baseType->_class && baseType->_class->isStatic)
2261 __ecereNameSpace__ecere__sys__GetLastDirectory(sourceFile, baseName);
2262 __ecereNameSpace__ecere__sys__ChangeCh(baseName, '.', '_');
2263 strcat(baseName, "}");
2264 strcat(baseName, baseType->_class->string);
2267 PrintType(baseType, baseName, 0x0, 0x1);
2268 string = QMkString(baseName);
2269 ListAdd(args, MkExpString(string));
2270 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2273 ListAdd(args, MkExpConstant("0"));
2275 if(((struct Specifier *)baseSpecs->first)->type == 0 && ((struct Specifier *)baseSpecs->first)->specifier == PRIVATE)
2276 inheritanceAccess = 2;
2279 ListAdd(args, MkExpConstant("0"));
2280 if(regClass->type == 1 || regClass->type == 0 || regClass->type == 5)
2282 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
2285 struct __ecereNameSpace__ecere__com__Class * base;
2287 for(base = regClass->base; base && base->type != 1000; base = base->next)
2289 for(member = base->membersAndProperties.first; member; member = member->next)
2290 if(!member->isProperty)
2296 if(regClass->type == 1 && symbol->declaredStruct && member)
2298 char baseStructName[1024];
2300 baseStructName[0] = (char)0;
2301 strcpy(baseStructName, (regClass->base->templateClass ? regClass->base->templateClass : regClass->base)->fullName);
2302 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))))));
2305 ListAdd(args, symbol->declaredStruct ? MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(symbol->structName), (((void *)0)))), (((void *)0)))) : MkExpConstant("0"));
2309 ListAdd(args, MkExpConstant("0"));
2312 char classDataStructName[1024];
2314 strcpy(classDataStructName, "__ecereClassData_");
2315 FullClassNameCat(classDataStructName, symbol->string, 0x0);
2316 ListAdd(args, symbol->classData ? MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(classDataStructName), (((void *)0)))), (((void *)0)))) : MkExpConstant("0"));
2318 if(regClass->type == 0 || regClass->type == 5)
2320 ListAdd(args, symbol->needConstructor ? MkExpIdentifier(MkIdentifier(symbol->constructorName)) : MkExpConstant("0"));
2321 ListAdd(args, symbol->needDestructor ? MkExpIdentifier(MkIdentifier(symbol->destructorName)) : MkExpConstant("0"));
2325 ListAdd(args, MkExpConstant("0"));
2326 ListAdd(args, MkExpConstant("0"));
2328 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2332 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2335 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2339 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2342 switch(inheritanceAccess)
2345 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2349 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2352 registerFunction = "eSystem_RegisterClass";
2353 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier("class")), '=', MkExpCall((exp = MkExpIdentifier(MkIdentifier(registerFunction))), args))));
2354 ListAdd(registerModuleBody->compound.statements, stmt);
2355 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)));
2356 ListAdd(registerModuleBody->compound.statements, stmt);
2357 if(external && external->type == 2 && external->_class->deleteWatchable)
2359 args = MkListOne(MkExpIdentifier(MkIdentifier("class")));
2360 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_DestructionWatchable")), args)));
2361 ListAdd(registerModuleBody->compound.statements, stmt);
2365 struct __ecereNameSpace__ecere__com__Class * base = regClass->base;
2368 for(c = 0; c < base->vTblSize; c++)
2370 struct Symbol * method = (struct Symbol *)regClass->_vTbl[c];
2372 if((void *)method != DummyMethod && base->_vTbl[c] != (void *)method)
2374 struct External * external = method->methodExternal;
2375 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2376 struct Identifier * id = external->function ? GetDeclId(external->function->declarator) : (((void *)0));
2378 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2380 char * string = QMkString(method->method->name);
2382 ListAdd(args, MkExpString(string));
2383 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2385 ListAdd(args, MkExpConstant("0"));
2386 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2387 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2388 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1));
2389 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMethod")), args)));
2390 ListAdd(registerModuleBody->compound.statements, stmt);
2397 for(c = regClass->base ? regClass->base->vTblSize : 0; c < regClass->vTblSize; c++)
2399 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)))
2401 if(method->type == 1 && method->_class == regClass && method->vid == c)
2404 struct Expression * exp;
2405 struct External * external = method->symbol ? ((struct Symbol *)method->symbol)->methodCodeExternal : (((void *)0));
2406 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2407 struct Identifier * id = (external && external->function) ? GetDeclId(external->function->declarator) : (((void *)0));
2409 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2411 char * string = QMkString(method->name);
2413 ListAdd(args, MkExpString(string));
2414 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2417 char * string = QMkString(method->dataTypeString);
2419 ListAdd(args, MkExpString(string));
2420 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2422 if(id && external->function->body)
2424 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2425 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1));
2429 ListAdd(args, (exp = MkExpConstant("0")));
2431 switch(method->memberAccess)
2434 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2437 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2441 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2444 strcpy(name, "__ecereVMethodID_");
2445 FullClassNameCat(name, method->_class->fullName, 0x0);
2447 strcat(name, method->name);
2448 exp = MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddVirtualMethod")), args);
2449 stmt = MkExpressionStmt(MkListOne(exp));
2450 DeclareMethod(method, name);
2451 ListAdd(registerModuleBody->compound.statements, stmt);
2456 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)))
2458 if(method->type == 1 && method->_class == regClass)
2460 else if(method->memberAccess == 1 || !method->dataTypeString)
2462 struct External * external = method->symbol ? ((struct Symbol *)method->symbol)->methodCodeExternal : (((void *)0));
2463 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2464 struct Identifier * id = (external && external->function) ? GetDeclId(external->function->declarator) : (((void *)0));
2466 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2468 char * string = QMkString(method->name);
2470 ListAdd(args, MkExpString(string));
2471 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2474 char * string = QMkString(method->dataTypeString);
2476 ListAdd(args, MkExpString(string));
2477 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2479 if(id && external->function->body)
2481 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2482 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1));
2486 ListAdd(args, (exp = MkExpConstant("0")));
2488 switch(method->memberAccess)
2491 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2494 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2498 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2501 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMethod")), args)));
2502 ListAdd(registerModuleBody->compound.statements, stmt);
2505 RegisterMembersAndProperties(regClass, 0x0, "class", registerModuleBody);
2508 struct __ecereNameSpace__ecere__sys__NamedLink * value;
2509 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
2510 struct __ecereNameSpace__ecere__com__EnumClassData * e = (regClass ? ((void *)(((char *)regClass->data) + enumClass->offsetClass)) : (((void *)0)));
2512 for(value = e->values.first; value; value = value->next)
2514 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2516 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2518 char * string = QMkString(value->name);
2520 ListAdd(args, MkExpString(string));
2521 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2526 sprintf(temp, "%d", value->data);
2527 ListAdd(args, MkExpConstant(temp));
2529 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eEnum_AddFixedValue")), args)));
2530 ListAdd(registerModuleBody->compound.statements, stmt);
2533 if(symbol->templateParams)
2535 struct TemplateParameter * param;
2537 for(param = (*symbol->templateParams).first; param; param = param->next)
2539 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2541 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2543 char * string = QMkString(param->identifier->string);
2545 ListAdd(args, MkExpString(string));
2546 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2548 ListAdd(args, MkExpIdentifier(MkIdentifier((param->type == 0) ? "type" : ((param->type == 1) ? "identifier" : "expression"))));
2554 char * typeString = param->dataType ? StringFromSpecDecl(param->dataType->specifiers, param->dataType->decl) : (((void *)0));
2555 char * string = QMkString(typeString);
2557 ListAdd(args, MkExpString(string));
2558 (__ecereNameSpace__ecere__com__eSystem_Delete(typeString), typeString = 0);
2559 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2564 char memberTypeString[132] = "TemplateMemberType::";
2565 unsigned int needClass = 0x1;
2567 ((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);
2568 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(memberTypeString))));
2572 if(param->defaultArgument)
2574 struct __ecereNameSpace__ecere__sys__OldList * members = MkList();
2580 char * typeString = param->defaultArgument->templateDatatype ? StringFromSpecDecl(param->defaultArgument->templateDatatype->specifiers, param->defaultArgument->templateDatatype->decl) : (((void *)0));
2581 char * string = QMkString(typeString);
2583 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(MkListOne(MkIdentifier("dataTypeString")), MkInitializerAssignment(MkExpString(string))));
2584 (__ecereNameSpace__ecere__com__eSystem_Delete(typeString), typeString = 0);
2585 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2590 char memberString[1024];
2593 memberString[0] = '\0';
2594 if(param->defaultArgument->identifier->_class)
2596 if(param->defaultArgument->identifier->_class->type == 8)
2597 strcpy(memberString, param->defaultArgument->identifier->_class->templateParameter->identifier->string);
2598 else if(param->defaultArgument->identifier->_class->name)
2599 strcpy(memberString, param->defaultArgument->identifier->_class->name);
2602 strcat(memberString, "::");
2603 strcat(memberString, param->defaultArgument->identifier->string);
2604 string = QMkString(memberString);
2605 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(MkListOne(MkIdentifier("dataTypeString")), MkInitializerAssignment(MkExpString(string))));
2606 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2615 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
2618 struct __ecereNameSpace__ecere__sys__OldList * ids = MkList();
2620 char * string = (((void *)0));
2622 op = GetOperand(param->defaultArgument->expression);
2623 ui64String = PrintUInt64(op.ui64);
2624 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ids), MkIdentifier("expression"));
2625 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ids), MkIdentifier("ui64"));
2626 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(ids, MkInitializerAssignment(MkExpConstant(ui64String))));
2627 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2628 (__ecereNameSpace__ecere__com__eSystem_Delete(ui64String), ui64String = 0);
2632 ListAdd(args, MkExpInstance(MkInstantiation(MkSpecifierName("ClassTemplateArgument"), (((void *)0)), MkListOne(MkMembersInitList(members)))));
2635 ListAdd(args, MkExpIdentifier(MkIdentifier("null")));
2636 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddTemplateParameter")), args)));
2637 ListAdd(registerModuleBody->compound.statements, stmt);
2639 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_DoneAddingTemplateParameters")), MkListOne(MkExpIdentifier(MkIdentifier("class"))))));
2640 ListAdd(registerModuleBody->compound.statements, stmt);
2642 if(definitions != (((void *)0)))
2644 for(def = definitions->first; def; def = def->next)
2646 if(def->type == 4 && def->propertyWatch)
2648 ListAdd(registerModuleBody->compound.statements, (struct Statement *)def->propertyWatch);
2649 def->propertyWatch = (((void *)0));
2651 else if(def->type == 5)
2653 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("designerClass")), '=', MkExpString(QMkString(def->designer))))), (((void *)0)));
2654 ListAdd(registerModuleBody->compound.statements, stmt);
2656 else if(def->type == 6)
2658 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("noExpansion")), '=', MkExpConstant("1")))), (((void *)0)));
2659 ListAdd(registerModuleBody->compound.statements, stmt);
2661 else if(def->type == 7)
2663 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("fixed")), '=', MkExpConstant("1")))), (((void *)0)));
2664 ListAdd(registerModuleBody->compound.statements, stmt);
2666 regClass->fixed = 0x1;
2668 else if(def->type == 8)
2670 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("defaultProperty")), '=', MkExpString(QMkString(def->defaultProperty->string))))), (((void *)0)));
2671 ListAdd(registerModuleBody->compound.statements, stmt);
2673 else if(def->type == 11)
2675 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2677 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2678 ListAdd(args, MkExpString(QMkString(def->id->string)));
2679 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(INT)), (((void *)0))), def->initializer->exp));
2680 def->initializer->exp = (((void *)0));
2681 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eClass_SetProperty")), args)));
2682 ListAdd(registerModuleBody->compound.statements, stmt);
2690 extern int strcmp(const char * , const char * );
2692 extern void PrintExpression(struct Expression * exp, char * string);
2694 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
2696 void ProcessClassDefinitions()
2698 struct External * external, * next;
2700 CreateRegisterModuleBody();
2703 for(external = (*ast).first; external; external = next)
2705 next = external->next;
2706 curExternal = external;
2707 if(external->type == 2)
2709 struct ClassDefinition * _class = external->_class;
2711 if(_class->definitions)
2713 ProcessClass(0, _class->definitions, _class->symbol, _class->baseSpecs, (((void *)0)), ast, external, _class->declMode);
2717 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2718 FreeExternal(external);
2721 else if(external->type == 0)
2723 if(external->symbol && !external->symbol->type->thisClass)
2724 external->symbol->type->staticMethod = 0x1;
2727 struct FunctionDefinition * function = external->function;
2728 struct Statement * stmt;
2729 struct __ecereNameSpace__ecere__sys__OldList * args;
2731 if(!strcmp(function->declarator->symbol->string, "__on_register_module"))
2733 ListAdd(registerModuleBody->compound.statements, function->body);
2734 function->body->compound.context->parent = registerModuleBody->compound.context;
2735 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2736 function->body = (((void *)0));
2737 FreeExternal(external);
2740 if(function->declMode != 2 && function->declMode != 1)
2743 CreateRegisterModuleBody();
2745 char * string = QMkString(function->declarator->symbol->string);
2747 ListAdd(args, MkExpString(string));
2748 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2752 char type[1024] = "";
2754 PrintType(function->declarator->symbol->type, type, 0x1, 0x1);
2755 string = QMkString(type);
2756 ListAdd(args, MkExpString(string));
2757 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2760 ListAdd(args, MkExpIdentifier(MkIdentifier(function->declarator->symbol->string)));
2762 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2763 switch(function->declMode)
2766 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2769 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2773 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2776 stmt = MkExpressionStmt(MkListOne(MkExpCall((MkExpIdentifier(MkIdentifier("eSystem_RegisterFunction"))), args)));
2777 ListAdd(registerModuleBody->compound.statements, stmt);
2780 else if(external->type == 1)
2782 struct Declaration * declaration = external->declaration;
2784 if(external->symbol)
2786 if(external->symbol->type && external->symbol->type->kind == 11 && !external->symbol->type->thisClass)
2787 external->symbol->type->staticMethod = 0x1;
2789 if(external->symbol && declaration->type == 1)
2791 if(declaration->specifiers)
2793 struct Specifier * specifier;
2794 unsigned int removeExternal = 0x0;
2796 for(specifier = (*declaration->specifiers).first; specifier; specifier = specifier->next)
2798 if((specifier->type == 2 || specifier->type == 3 || specifier->type == 4) && specifier->id && specifier->id->string && (declaration->declMode || specifier->baseSpecs || (specifier->type == 2 && specifier->definitions)))
2800 struct Symbol * symbol = FindClass(specifier->id->string);
2806 if(specifier->type == 2)
2810 removeExternal = 0x1;
2811 symbol->ctx = specifier->ctx;
2812 specifier->ctx = (((void *)0));
2813 ProcessClass(classType, specifier->definitions, symbol, specifier->baseSpecs, specifier->list, ast, external, declaration->declMode);
2817 if(inCompiler && removeExternal)
2819 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2820 FreeExternal(external);
2824 else if(declaration->type == 3)
2826 if(inCompiler && declaration->declMode != 3)
2828 struct Statement * stmt;
2829 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2831 CreateRegisterModuleBody();
2833 char * string = QMkString(declaration->id->string);
2835 ListAdd(args, MkExpString(string));
2836 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2840 char type[1024] = "";
2842 PrintExpression(declaration->exp, type);
2843 string = QMkString(type);
2844 ListAdd(args, MkExpString(string));
2845 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2847 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2848 switch(declaration->declMode)
2851 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2854 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2858 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2861 stmt = MkExpressionStmt(MkListOne(MkExpCall((MkExpIdentifier(MkIdentifier("eSystem_RegisterDefine"))), args)));
2862 ListAdd(registerModuleBody->compound.statements, stmt);
2870 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2872 struct __ecereNameSpace__ecere__com__GlobalFunction;
2874 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);
2876 void __ecereRegisterModule_pass1(struct __ecereNameSpace__ecere__com__Instance * module)
2878 struct __ecereNameSpace__ecere__com__Class * class;
2880 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetBuildingEcereCom", "void SetBuildingEcereCom(bool b)", SetBuildingEcereCom, module, 1);
2881 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetBuildingEcereCom", "bool GetBuildingEcereCom(void)", GetBuildingEcereCom, module, 1);
2882 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetBuildingEcereComModule", "void SetBuildingEcereComModule(bool b)", SetBuildingEcereComModule, module, 1);
2883 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetBuildingEcereComModule", "bool GetBuildingEcereComModule(void)", GetBuildingEcereComModule, module, 1);
2884 __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);
2885 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CreateRegisterModuleBody", "void CreateRegisterModuleBody(void)", CreateRegisterModuleBody, module, 2);
2886 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("RegisterMembersAndProperties", "void RegisterMembersAndProperties(ecere::com::Class regClass, bool isMember, char * className, Statement statement)", RegisterMembersAndProperties, module, 2);
2887 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetNameSpaceString", "void GetNameSpaceString(ecere::com::NameSpace ns, char * string)", GetNameSpaceString, module, 2);
2888 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessClassDefinitions", "void ProcessClassDefinitions(void)", ProcessClassDefinitions, module, 1);
2891 void __ecereUnregisterModule_pass1(struct __ecereNameSpace__ecere__com__Instance * module)