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;
149 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
153 struct Instantiation * prev;
154 struct Instantiation * next;
156 struct Specifier * _class;
157 struct Expression * exp;
158 struct __ecereNameSpace__ecere__sys__OldList * members;
159 struct Symbol * symbol;
160 unsigned int fullSet;
161 unsigned int isConstant;
162 unsigned char * data;
163 struct Location nameLoc;
164 struct Location insideLoc;
168 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
172 struct Declaration * prev;
173 struct Declaration * next;
180 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
181 struct __ecereNameSpace__ecere__sys__OldList * declarators;
183 struct Instantiation * inst;
186 struct Identifier * id;
187 struct Expression * exp;
190 struct Specifier * extStorage;
191 struct Symbol * symbol;
195 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
199 struct Statement * prev;
200 struct Statement * next;
205 struct __ecereNameSpace__ecere__sys__OldList * expressions;
208 struct Identifier * id;
209 struct Statement * stmt;
213 struct Expression * exp;
214 struct Statement * stmt;
218 struct __ecereNameSpace__ecere__sys__OldList * declarations;
219 struct __ecereNameSpace__ecere__sys__OldList * statements;
220 struct Context * context;
221 unsigned int isSwitch;
225 struct __ecereNameSpace__ecere__sys__OldList * exp;
226 struct Statement * stmt;
227 struct Statement * elseStmt;
231 struct __ecereNameSpace__ecere__sys__OldList * exp;
232 struct Statement * stmt;
236 struct __ecereNameSpace__ecere__sys__OldList * exp;
237 struct Statement * stmt;
241 struct __ecereNameSpace__ecere__sys__OldList * exp;
242 struct Statement * stmt;
246 struct Statement * init;
247 struct Statement * check;
248 struct __ecereNameSpace__ecere__sys__OldList * increment;
249 struct Statement * stmt;
253 struct Identifier * id;
257 struct Specifier * spec;
259 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
260 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
261 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
265 struct Expression * watcher;
266 struct Expression * object;
267 struct __ecereNameSpace__ecere__sys__OldList * watches;
271 struct Identifier * id;
272 struct __ecereNameSpace__ecere__sys__OldList * exp;
273 struct __ecereNameSpace__ecere__sys__OldList * filter;
274 struct Statement * stmt;
276 struct Declaration * decl;
280 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
284 struct TypeName * prev;
285 struct TypeName * next;
287 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
288 struct Declarator * declarator;
290 struct Expression * bitCount;
293 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
297 struct Initializer * prev;
298 struct Initializer * next;
303 struct Expression * exp;
304 struct __ecereNameSpace__ecere__sys__OldList * list;
306 unsigned int isConstant;
309 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
311 struct __ecereNameSpace__ecere__com__DataValue
329 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
333 struct Expression * prev;
334 struct Expression * next;
342 struct Identifier * identifier;
344 struct Statement * compound;
345 struct Instantiation * instance;
347 struct __ecereNameSpace__ecere__sys__OldList * list;
350 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
351 struct Declarator * decl;
355 struct Identifier * id;
359 struct Expression * exp;
360 struct __ecereNameSpace__ecere__sys__OldList * arguments;
361 struct Location argLoc;
365 struct Expression * exp;
366 struct __ecereNameSpace__ecere__sys__OldList * index;
370 struct Expression * exp;
371 struct Identifier * member;
373 unsigned int thisPtr;
378 struct Expression * exp1;
379 struct Expression * exp2;
381 struct TypeName * typeName;
382 struct Specifier * _class;
385 struct TypeName * typeName;
386 struct Expression * exp;
390 struct Expression * cond;
391 struct __ecereNameSpace__ecere__sys__OldList * exp;
392 struct Expression * elseExp;
396 struct TypeName * typeName;
397 struct Expression * size;
401 struct TypeName * typeName;
402 struct Expression * size;
403 struct Expression * exp;
408 struct Identifier * id;
412 struct Expression * ds;
413 struct Expression * name;
417 struct TypeName * typeName;
418 struct Initializer * initializer;
422 struct Expression * exp;
423 struct TypeName * typeName;
426 unsigned int debugValue;
427 struct __ecereNameSpace__ecere__com__DataValue val;
428 unsigned int address;
429 unsigned int hasAddress;
430 struct Type * expType;
431 struct Type * destType;
434 unsigned int byReference;
435 unsigned int isConstant;
436 unsigned int addedThis;
437 unsigned int needCast;
438 unsigned int thisPtr;
441 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
443 struct TemplateDatatype;
445 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
447 struct TemplateArgument;
449 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
451 struct TemplateParameter;
453 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
457 struct Specifier * prev;
458 struct Specifier * next;
467 struct Symbol * symbol;
468 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
472 struct Identifier * id;
473 struct __ecereNameSpace__ecere__sys__OldList * list;
474 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
475 struct __ecereNameSpace__ecere__sys__OldList * definitions;
476 unsigned int addNameSpace;
477 struct Context * ctx;
479 struct Expression * expression;
480 struct Specifier * _class;
481 struct TemplateParameter * templateParameter;
485 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
489 struct Identifier * prev;
490 struct Identifier * next;
492 struct Symbol * classSym;
493 struct Specifier * _class;
495 struct Identifier * badID;
498 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
502 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
506 struct Declarator * prev;
507 struct Declarator * next;
510 struct Symbol * symbol;
511 struct Declarator * declarator;
514 struct Identifier * identifier;
517 struct Expression * exp;
518 struct Expression * posExp;
523 struct Expression * exp;
524 struct Specifier * enumClass;
528 struct __ecereNameSpace__ecere__sys__OldList * parameters;
532 struct Pointer * pointer;
541 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
543 struct FunctionDefinition
545 struct FunctionDefinition * prev;
546 struct FunctionDefinition * next;
548 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
549 struct Declarator * declarator;
550 struct __ecereNameSpace__ecere__sys__OldList * declarations;
551 struct Statement * body;
552 struct __ecereNameSpace__ecere__com__Class * _class;
553 struct __ecereNameSpace__ecere__sys__OldList attached;
556 struct Symbol * propSet;
558 unsigned int propertyNoThis;
561 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
565 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
569 struct External * prev;
570 struct External * next;
573 struct Symbol * symbol;
576 struct FunctionDefinition * function;
577 struct ClassDefinition * _class;
578 struct Declaration * declaration;
580 struct Identifier * id;
581 struct DBTableDef * table;
586 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
590 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
594 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
599 struct Symbol * parent;
600 struct Symbol * left;
601 struct Symbol * right;
606 struct __ecereNameSpace__ecere__com__Method * method;
607 struct __ecereNameSpace__ecere__com__Property * _property;
608 struct __ecereNameSpace__ecere__com__Class * registered;
616 struct External * pointerExternal;
617 struct External * structExternal;
621 struct External * externalGet;
622 struct External * externalSet;
623 struct External * externalPtr;
624 struct External * externalIsSet;
628 struct External * methodExternal;
629 struct External * methodCodeExternal;
632 unsigned int imported;
633 unsigned int declaredStructSym;
634 struct __ecereNameSpace__ecere__com__Class * _class;
635 unsigned int declaredStruct;
636 unsigned int needConstructor;
637 unsigned int needDestructor;
638 char * constructorName;
641 char * destructorName;
642 struct ModuleImport * module;
643 struct ClassImport * _import;
644 struct Location nameLoc;
645 unsigned int isParam;
646 unsigned int isRemote;
647 unsigned int isStruct;
648 unsigned int fireWatchersDone;
650 unsigned int classData;
651 unsigned int isStatic;
653 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
654 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
655 struct Context * ctx;
659 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
668 struct Symbol * _class;
671 struct __ecereNameSpace__ecere__sys__OldList members;
676 struct Type * returnType;
677 struct __ecereNameSpace__ecere__sys__OldList params;
678 struct Symbol * thisClass;
679 unsigned int staticMethod;
680 struct TemplateParameter * thisClassTemplate;
684 struct __ecereNameSpace__ecere__com__Method * method;
685 struct __ecereNameSpace__ecere__com__Class * methodClass;
686 struct __ecereNameSpace__ecere__com__Class * usedClass;
690 struct Type * arrayType;
692 struct Expression * arraySizeExp;
693 unsigned int freeExp;
694 struct Symbol * enumClass;
697 struct TemplateParameter * templateParameter;
699 unsigned int isSigned;
701 unsigned int constant;
708 unsigned int byReference;
709 unsigned int extraParam;
711 unsigned int directClassAccess;
712 unsigned int computing;
713 unsigned int dllExport;
715 unsigned int keepCast;
716 unsigned int passAsTemplate;
720 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
722 struct __ecereNameSpace__ecere__com__Class
724 struct __ecereNameSpace__ecere__com__Class * prev;
725 struct __ecereNameSpace__ecere__com__Class * next;
731 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
732 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
735 struct __ecereNameSpace__ecere__com__Class * base;
736 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
737 struct __ecereNameSpace__ecere__sys__BinaryTree members;
738 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
739 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
740 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
741 struct __ecereNameSpace__ecere__sys__OldList derivatives;
745 struct __ecereNameSpace__ecere__com__Instance * module;
746 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
747 char * dataTypeString;
748 struct Type * dataType;
750 int defaultAlignment;
751 void (* Initialize)();
753 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
754 char * designerClass;
755 unsigned int noExpansion;
756 char * defaultProperty;
757 unsigned int comRedefinition;
759 unsigned int isRemote;
760 unsigned int internalDecl;
762 unsigned int computeSize;
764 int destructionWatchOffset;
766 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
767 int inheritanceAccess;
770 struct __ecereNameSpace__ecere__sys__OldList conversions;
771 struct __ecereNameSpace__ecere__sys__OldList templateParams;
772 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
773 struct __ecereNameSpace__ecere__com__Class * templateClass;
774 struct __ecereNameSpace__ecere__sys__OldList templatized;
778 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
780 struct __ecereNameSpace__ecere__com__Instance
783 struct __ecereNameSpace__ecere__com__Class * _class;
787 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
789 struct __ecereNameSpace__ecere__com__DataMember
791 struct __ecereNameSpace__ecere__com__DataMember * prev;
792 struct __ecereNameSpace__ecere__com__DataMember * next;
794 unsigned int isProperty;
797 struct __ecereNameSpace__ecere__com__Class * _class;
798 char * dataTypeString;
799 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
800 struct Type * dataType;
804 struct __ecereNameSpace__ecere__sys__OldList members;
805 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
810 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
812 struct __ecereNameSpace__ecere__com__SerialBuffer
814 unsigned char * _buffer;
820 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
822 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
828 char * dataTypeString;
829 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
831 struct __ecereNameSpace__ecere__com__DataValue expression;
837 struct __ecereNameSpace__ecere__com__DataMember * member;
838 struct __ecereNameSpace__ecere__com__Property * prop;
839 struct __ecereNameSpace__ecere__com__Method * method;
845 typedef union YYSTYPE
850 struct Identifier * id;
851 struct Expression * exp;
852 struct Specifier * specifier;
853 struct __ecereNameSpace__ecere__sys__OldList * list;
854 struct Enumerator * enumerator;
855 struct Declarator * declarator;
856 struct Pointer * pointer;
857 struct Initializer * initializer;
858 struct InitDeclarator * initDeclarator;
859 struct TypeName * typeName;
860 struct Declaration * declaration;
861 struct Statement * stmt;
862 struct FunctionDefinition * function;
863 struct External * external;
864 struct Context * context;
865 struct AsmField * asmField;
866 struct Instantiation * instance;
867 struct MembersInit * membersInit;
868 struct MemberInit * memberInit;
869 struct ClassFunction * classFunction;
870 struct ClassDefinition * _class;
871 struct ClassDef * classDef;
872 struct PropertyDef * prop;
874 struct Symbol * symbol;
875 struct PropertyWatch * propertyWatch;
876 struct TemplateParameter * templateParameter;
877 struct TemplateArgument * templateArgument;
878 struct TemplateDatatype * templateDatatype;
879 struct DBTableEntry * dbtableEntry;
880 struct DBIndexItem * dbindexItem;
881 struct DBTableDef * dbtableDef;
884 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
888 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
890 struct InitDeclarator;
892 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
896 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
900 struct ClassFunction * prev;
901 struct ClassFunction * next;
903 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
904 struct Declarator * declarator;
905 struct __ecereNameSpace__ecere__sys__OldList * declarations;
906 struct Statement * body;
907 struct __ecereNameSpace__ecere__com__Class * _class;
908 struct __ecereNameSpace__ecere__sys__OldList attached;
911 struct Symbol * propSet;
912 unsigned int isVirtual;
913 unsigned int isConstructor;
914 unsigned int isDestructor;
915 unsigned int dontMangle;
920 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
924 struct MembersInit * prev;
925 struct MembersInit * next;
930 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
931 struct ClassFunction * function;
935 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
939 struct MemberInit * prev;
940 struct MemberInit * next;
942 struct Location realLoc;
943 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
944 struct Initializer * initializer;
946 unsigned int variable;
947 unsigned int takeOutExp;
950 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
954 struct PropertyDef * prev;
955 struct PropertyDef * next;
957 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
958 struct Declarator * declarator;
959 struct Identifier * id;
960 struct Statement * getStmt;
961 struct Statement * setStmt;
962 struct Statement * issetStmt;
963 struct Symbol * symbol;
964 unsigned int conversion;
965 unsigned int isWatchable;
969 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
971 struct PropertyWatch;
973 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
977 struct ClassDef * prev;
978 struct ClassDef * next;
983 struct Declaration * decl;
984 struct ClassFunction * function;
985 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
986 struct PropertyDef * propertyDef;
987 struct PropertyWatch * propertyWatch;
989 struct Identifier * defaultProperty;
992 struct Identifier * id;
993 struct Initializer * initializer;
1000 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1002 struct DBTableEntry;
1004 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1008 extern YYSTYPE yylval;
1010 extern struct Location yylloc;
1012 extern struct External * curExternal;
1014 void MangleClassName(char * className)
1020 for(c = 0; (ch = className[c]); c++)
1059 output[d] = (char)0;
1062 extern char * strcat(char * , const char * );
1064 extern int strlen(const char * );
1066 void FullClassNameCat(char * output, char * className, unsigned int includeTemplateParams)
1072 for(c = 0; (ch = className[c]) && ch != '<'; c++)
1076 strcat(output, "__ecereNameSpace__");
1080 len = strlen(output);
1081 for(c = 0; (ch = className[c]); c++)
1084 output[len++] = '_';
1086 output[len++] = '_';
1089 output[len++] = '_';
1090 output[len++] = 'P';
1091 output[len++] = 'T';
1092 output[len++] = 'R';
1093 output[len++] = '_';
1097 output[len++] = '_';
1098 output[len++] = 'E';
1099 output[len++] = 'Q';
1100 output[len++] = 'U';
1101 output[len++] = '_';
1105 if(!includeTemplateParams)
1107 output[len++] = '_';
1108 output[len++] = 'T';
1109 output[len++] = 'P';
1110 output[len++] = 'L';
1111 output[len++] = '_';
1115 output[len++] = '_';
1119 output[len++] = '__';
1124 output[len++] = (char)0;
1127 extern int AddMembers(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember, unsigned int * retSize, struct __ecereNameSpace__ecere__com__Class * topClass);
1129 static void AddSimpleBaseMembers(struct __ecereNameSpace__ecere__sys__OldList * list, struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * topClass)
1131 if(_class->type != 1000)
1132 AddMembers(list, _class, 0x0, (((void *)0)), topClass);
1135 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1137 struct __ecereNameSpace__ecere__com__NameSpace
1140 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1141 struct __ecereNameSpace__ecere__com__NameSpace * left;
1142 struct __ecereNameSpace__ecere__com__NameSpace * right;
1144 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1145 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1146 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1147 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1148 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1151 static unsigned int NameSpaceContained(struct __ecereNameSpace__ecere__com__NameSpace * ns, struct __ecereNameSpace__ecere__com__NameSpace * parent)
1155 else if((*ns).parent)
1156 return NameSpaceContained((*ns).parent, parent);
1161 extern void Compiler_Error(char * format, ...);
1163 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
1165 struct __ecereNameSpace__ecere__com__Module
1167 struct __ecereNameSpace__ecere__com__Instance * application;
1168 struct __ecereNameSpace__ecere__sys__OldList classes;
1169 struct __ecereNameSpace__ecere__sys__OldList defines;
1170 struct __ecereNameSpace__ecere__sys__OldList functions;
1171 struct __ecereNameSpace__ecere__sys__OldList modules;
1172 struct __ecereNameSpace__ecere__com__Instance * prev;
1173 struct __ecereNameSpace__ecere__com__Instance * next;
1178 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1179 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1182 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
1184 struct __ecereNameSpace__ecere__com__Application
1189 unsigned int isGUIApp;
1190 struct __ecereNameSpace__ecere__sys__OldList allModules;
1191 char * parsedCommand;
1192 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
1195 extern unsigned int ModuleAccess(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor);
1197 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
1199 static void CheckPublicClass(struct Symbol * classSym, int access, char * word)
1201 struct __ecereNameSpace__ecere__com__Class * regClass = classSym ? classSym->registered : (((void *)0));
1205 if(regClass->templateClass)
1206 regClass = regClass->templateClass;
1207 if(classSym->isStatic && access != 3)
1209 Compiler_Error("Non-static %s making use of a static class\n", word);
1211 else if(access == 1)
1213 if(!NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->application + 296)))->systemNameSpace))
1215 if(NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->privateNameSpace) || !ModuleAccess(privateModule, regClass->module))
1216 Compiler_Error("Public %s making use of a private class\n", word);
1222 static void CheckPublicTypeName(struct TypeName * type, int access)
1224 if(type->qualifiers)
1226 struct Specifier * spec;
1228 for(spec = (*type->qualifiers).first; spec; spec = spec->next)
1232 struct Symbol * classSym = spec->symbol;
1234 CheckPublicClass(classSym, access, "define");
1240 static void CheckPublicExpression(struct Expression * exp, int access);
1242 static void CheckPublicInitializer(struct Initializer * init, int access)
1247 CheckPublicExpression(init->exp, access);
1251 struct Initializer * i;
1253 for(i = (*init->list).first; i; i = i->next)
1254 CheckPublicInitializer(i, access);
1260 static void CheckPublicExpression(struct Expression * exp, int access)
1274 CheckPublicExpression(exp->op.exp1, access);
1276 CheckPublicExpression(exp->op.exp2, access);
1280 struct Expression * e;
1282 for(e = (*exp->list).first; e; e = e->next)
1283 CheckPublicExpression(e, access);
1288 struct Expression * e;
1290 CheckPublicExpression(exp->index.exp, access);
1291 for(e = (*exp->index.index).first; e; e = e->next)
1292 CheckPublicExpression(e, access);
1297 struct Expression * e;
1299 CheckPublicExpression(exp->call.exp, access);
1300 if(exp->call.arguments)
1302 for(e = (*exp->call.arguments).first; e; e = e->next)
1303 CheckPublicExpression(e, access);
1309 CheckPublicExpression(exp->member.exp, access);
1314 CheckPublicExpression(exp->member.exp, access);
1318 CheckPublicTypeName(exp->typeName, access);
1322 struct Type * type = exp->expType;
1324 CheckPublicTypeName(exp->cast.typeName, access);
1326 CheckPublicExpression(exp->cast.exp, access);
1331 struct Expression * e;
1333 CheckPublicExpression(exp->cond.cond, access);
1334 for(e = (*exp->cond.exp).first; e; e = e->next)
1335 CheckPublicExpression(e, access);
1336 CheckPublicExpression(exp->cond.elseExp, access);
1341 CheckPublicExpression(exp->_new.size, access);
1345 CheckPublicExpression(exp->_renew.size, access);
1346 CheckPublicExpression(exp->_renew.exp, access);
1350 struct MembersInit * members;
1352 CheckPublicClass(exp->instance->_class->symbol, access, "define");
1353 for(members = (*exp->instance->members).first; members; members = members->next)
1355 if(members->type == 0)
1357 struct MemberInit * member;
1359 for(member = (*members->dataMembers).first; member; member = member->next)
1361 CheckPublicInitializer(member->initializer, access);
1371 static void CheckPublicDataType(struct Type * type, int access, char * word)
1379 CheckPublicClass(type->_class, access, word);
1389 struct Type * param;
1391 CheckPublicDataType(type->returnType, access, word);
1392 for(param = type->params.first; param; param = param->next)
1393 CheckPublicDataType(param, access, word);
1394 CheckPublicClass(type->thisClass, access, word);
1398 CheckPublicDataType(type->arrayType, access, word);
1400 CheckPublicClass(type->enumClass, access, word);
1404 CheckPublicDataType(type->type, access, word);
1413 CheckPublicClass(type->_class, access, word);
1420 extern struct Identifier * GetDeclId(struct Declarator * decl);
1422 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BTNamedLink;
1424 struct __ecereNameSpace__ecere__com__BTNamedLink
1427 struct __ecereNameSpace__ecere__com__BTNamedLink * parent;
1428 struct __ecereNameSpace__ecere__com__BTNamedLink * left;
1429 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
1434 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMember(struct __ecereNameSpace__ecere__com__Class * _class, char * name, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember ** subMemberStack, int * subMemberStackPos);
1436 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char * key);
1438 static void CheckMembersDefinitions(struct __ecereNameSpace__ecere__com__Class * regClass, struct __ecereNameSpace__ecere__com__DataMember * member, struct __ecereNameSpace__ecere__sys__OldList * definitions, int access)
1440 if(definitions != (((void *)0)))
1442 struct ClassDef * def;
1444 for(def = definitions->first; def; def = def->next)
1448 struct Declaration * decl = def->decl;
1449 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1454 struct Declarator * d;
1456 if(decl->declarators)
1458 for(d = (*decl->declarators).first; d; d = d->next)
1460 struct Identifier * declId = GetDeclId(d);
1466 struct __ecereNameSpace__ecere__com__BTNamedLink * link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&member->membersAlpha, declId->string);
1468 dataMember = link ? link->data : (((void *)0));
1471 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(regClass, declId->string, privateModule, (((void *)0)), (((void *)0)));
1473 CheckPublicDataType(dataMember->dataType, (def->memberAccess == 2) ? 2 : access, "class data member");
1477 else if(decl->specifiers)
1479 struct Specifier * spec;
1481 for(spec = (*decl->specifiers).first; spec; spec = spec->next)
1483 if(spec->type == 3 || spec->type == 4)
1485 if(spec->definitions && !spec->id)
1487 CheckMembersDefinitions(regClass, member, spec->definitions, (def->memberAccess == 2) ? 2 : access);
1489 else if(spec->definitions && spec->id)
1493 struct __ecereNameSpace__ecere__com__BTNamedLink * link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&member->membersAlpha, spec->id->string);
1495 dataMember = link ? link->data : (((void *)0));
1498 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(regClass, spec->id->string, privateModule, (((void *)0)), (((void *)0)));
1500 CheckPublicDataType(dataMember->dataType, (def->memberAccess == 2) ? 2 : access, "class data member");
1506 else if(decl->type == 2)
1508 CheckPublicClass(decl->inst->_class->symbol, (def->memberAccess == 2) ? 2 : access, "class member instance");
1515 extern unsigned int inCompiler;
1517 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
1519 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char * name);
1521 extern struct Symbol * FindClass(char * name);
1523 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);
1525 extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_AddProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name, char * dataType, void * setStmt, void * getStmt, int declMode);
1527 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, char * name, char * type, unsigned int size, unsigned int alignment, int declMode);
1529 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_FindMethod(struct __ecereNameSpace__ecere__com__Class * _class, char * name, struct __ecereNameSpace__ecere__com__Instance * module);
1531 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, char * name, char * type, void * function, int declMode);
1533 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
1535 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
1537 extern struct ClassDef * MkClassDefDeclaration(struct Declaration * decl);
1539 extern struct Specifier * MkSpecifierName(char * name);
1541 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1543 extern struct Identifier * MkIdentifier(char * string);
1545 extern struct Declaration * MkStructDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * declarators, struct Specifier * extStorage);
1547 extern struct Expression * QMkExpId(char * id);
1549 extern void FreeDeclarator(struct Declarator * decl);
1551 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* )(void * ));
1553 extern void FreeSpecifier(struct Specifier * spec);
1555 extern char * __ecereNameSpace__ecere__sys__CopyString(char * string);
1557 extern struct Type * MkClassType(char * name);
1559 extern char * strcpy(char * , const char * );
1561 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
1563 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
1565 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
1567 extern void FreeExternal(struct External * external);
1569 extern int declMode;
1571 extern char * strstr(char * , const char * );
1573 extern char * sourceFile;
1575 extern struct Specifier * MkSpecifier(int specifier);
1577 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1579 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1581 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
1583 extern struct Context * PushContext(void);
1585 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
1587 extern struct Expression * CopyExpression(struct Expression * exp);
1589 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
1591 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
1593 extern void PopContext(struct Context * ctx);
1595 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1597 extern struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols;
1599 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
1601 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
1603 extern struct ClassDef * MkClassDefFunction(struct ClassFunction * function);
1605 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1607 extern struct Expression * MkExpInstance(struct Instantiation * inst);
1609 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
1611 extern struct Expression * MkExpIdentifier(struct Identifier * id);
1613 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
1615 extern void FreeInitializer(struct Initializer * initializer);
1617 extern struct Statement * MkReturnStmt(struct __ecereNameSpace__ecere__sys__OldList * exp);
1619 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1621 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* )(void * ));
1623 extern struct Declarator * PlugDeclarator(struct Declarator * decl, struct Declarator * baseDecl);
1625 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
1627 extern int sprintf(char * , char * , ...);
1629 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
1631 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
1633 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1635 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
1637 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
1639 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1641 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1643 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
1645 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 Location * loc, struct __ecereNameSpace__ecere__sys__OldList * defs, void * after, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators)
1647 void * __ecereTemp1;
1648 char structName[1024];
1649 char className[1024];
1650 char constructorName[1024];
1651 char destructorName[1024];
1652 struct __ecereNameSpace__ecere__com__Class * regClass;
1653 struct ClassFunction * destructor = (((void *)0)), * constructor = (((void *)0));
1654 unsigned int redefinition = 0x0;
1655 unsigned int isUnion = classType == 6;
1656 struct External * external = (((void *)0));
1657 struct ClassDef * def;
1658 struct __ecereNameSpace__ecere__sys__OldList * list;
1659 struct __ecereNameSpace__ecere__sys__OldList * classDataList;
1664 classDataList = MkList();
1666 regClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, symbol->string);
1669 classType = regClass->type;
1673 if(!NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->privateNameSpace) && regClass->inheritanceAccess == 1)
1675 if(!regClass->base->symbol)
1676 regClass->base->symbol = FindClass(regClass->base->fullName);
1677 CheckPublicClass(regClass->base->symbol, 1, "class");
1679 else if(!symbol->isStatic && regClass->base)
1681 if(!regClass->base->symbol)
1682 regClass->base->symbol = FindClass(regClass->base->fullName);
1683 CheckPublicClass(regClass->base->symbol, 2, "class");
1686 if(definitions != (((void *)0)))
1688 for(def = definitions->first; def; def = def->next)
1692 struct __ecereNameSpace__ecere__com__DataMember * member;
1693 struct __ecereNameSpace__ecere__com__Property * prop;
1694 struct __ecereNameSpace__ecere__com__Method * method;
1696 if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(regClass, def->id->string, privateModule)))
1698 __ecereNameSpace__ecere__com__eClass_AddProperty(regClass, def->id->string, (((void *)0)), (((void *)0)), (((void *)0)), def->memberAccess);
1700 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(regClass, def->id->string, privateModule, (((void *)0)), (((void *)0)))))
1702 __ecereNameSpace__ecere__com__eClass_AddDataMember(regClass, def->id->string, (((void *)0)), 0, 0, def->memberAccess);
1704 else if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(regClass, def->id->string, privateModule)))
1706 __ecereNameSpace__ecere__com__eClass_AddMethod(regClass, def->id->string, (((void *)0)), (((void *)0)), def->memberAccess);
1711 Compiler_Error("Couldn't find member %s to override\n", def->id->string);
1718 external = MkExternalDeclaration((((void *)0)));
1719 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1720 curExternal = external;
1721 curExternal->symbol = symbol;
1723 if((classType == 1 || classType == 5) && inCompiler)
1725 AddSimpleBaseMembers(list, regClass->base, regClass);
1727 if(definitions != (((void *)0)))
1731 if(!NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->privateNameSpace))
1732 CheckMembersDefinitions(regClass, (((void *)0)), definitions, 1);
1733 else if(!symbol->isStatic)
1734 CheckMembersDefinitions(regClass, (((void *)0)), definitions, 2);
1736 for(def = definitions->first; def; def = def->next)
1740 struct Declaration * decl = def->decl;
1744 if(inCompiler && classType != 2)
1746 ListAdd(list, MkClassDefDeclaration(decl));
1747 def->decl = (((void *)0));
1750 else if(decl->type == 2)
1752 struct Instantiation * inst = decl->inst;
1753 struct Expression * exp = inst->exp;
1754 struct Symbol * classSym;
1758 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
1759 struct Declarator * d;
1761 ListAdd(specifiers, MkSpecifierName(inst->_class->name));
1762 d = MkDeclaratorIdentifier(MkIdentifier(exp->identifier->string));
1765 struct __ecereNameSpace__ecere__sys__OldList * declarators = MkList();
1767 ListAdd(declarators, d);
1768 decl = MkStructDeclaration(specifiers, declarators, (((void *)0)));
1769 ListAdd(list, MkClassDefDeclaration(decl));
1771 exp->member.member = exp->identifier;
1772 exp->member.exp = QMkExpId("this");
1773 exp->member.memberType = 3;
1774 exp->member.thisPtr = 0x1;
1779 FreeList(specifiers, FreeSpecifier);
1782 classSym = inst->_class->symbol;
1783 if(classSym && classSym->registered && (classSym->registered->type == 1 || classSym->registered->type == 2 || classSym->registered->type == 3))
1785 if(inst->members && (*inst->members).count)
1786 symbol->needConstructor = 0x1;
1790 symbol->needConstructor = 0x1;
1791 symbol->needDestructor = 0x1;
1795 else if(def->type == 9)
1797 struct Declaration * decl = def->decl;
1801 if(inCompiler && classType != 2)
1803 ListAdd(classDataList, MkClassDefDeclaration(decl));
1804 def->decl = (((void *)0));
1808 else if(def->type == 1)
1809 symbol->needConstructor = 0x1;
1810 else if(def->type == 4)
1811 symbol->needConstructor = 0x1;
1812 else if(def->type == 0)
1814 struct ClassFunction * func = def->function;
1816 if(func->isDestructor)
1821 Compiler_Error("redefinition of destructor for class %s\n", symbol->string);
1825 symbol->needDestructor = 0x1;
1827 if(!inCompiler && func->body)
1829 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
1831 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&func->body->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
1835 if(func->isConstructor)
1840 Compiler_Error("redefinition of constructor for class %s\n", symbol->string);
1844 symbol->needConstructor = 0x1;
1846 if(!inCompiler && func->body)
1848 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
1850 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&func->body->compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
1859 external->symbol = (((void *)0));
1862 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * declarators = (initDeclarators != (((void *)0))) ? initDeclarators : MkList();
1864 strcpy(structName, symbol->string);
1865 symbol->structName = __ecereNameSpace__ecere__sys__CopyString(structName);
1866 ListAdd(specs, MkStructOrUnion(3, MkIdentifier(structName), isUnion ? MkListOne(MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkStructOrUnion(4, (((void *)0)), list)), (((void *)0)), (((void *)0))))) : list));
1867 external->symbol = symbol;
1868 symbol->structExternal = external;
1869 external->declaration = MkDeclaration(specs, declarators);
1871 symbol->declaredStruct = 0x1;
1875 curExternal = external->prev;
1876 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(defs, external);
1877 FreeExternal(external);
1878 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
1880 if((*classDataList).count)
1882 char classDataStructName[1024];
1883 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1884 struct External * external;
1886 strcpy(classDataStructName, "__ecereClassData_");
1887 FullClassNameCat(classDataStructName, symbol->string, 0x0);
1889 ListAdd(specs, MkStructOrUnion(3, MkIdentifier(classDataStructName), classDataList));
1890 external = MkExternalDeclaration(MkDeclaration(specs, (((void *)0))));
1891 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1893 symbol->classData = 0x1;
1896 (__ecereNameSpace__ecere__com__eSystem_Delete(classDataList), classDataList = 0);
1901 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * declarators = MkList();
1903 strcpy(className, "__ecereClass_");
1904 FullClassNameCat(className, symbol->string, 0x1);
1905 MangleClassName(className);
1906 symbol->className = __ecereNameSpace__ecere__sys__CopyString(className);
1907 if(!strstr(sourceFile, ".main.ec"))
1908 ListAdd(specs, MkSpecifier(286));
1909 ListAdd(specs, MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
1910 ListAdd(declarators, MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(className))), (((void *)0))));
1911 symbol->methodExternal = MkExternalDeclaration(MkDeclaration(specs, declarators));
1912 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, symbol->methodExternal);
1913 after = symbol->methodExternal;
1915 if(symbol->needDestructor)
1917 struct ClassFunction * function;
1918 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1919 struct Declarator * decl;
1920 struct Statement * body;
1921 struct Context * context;
1922 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0)), * statements;
1924 strcpy(destructorName, "__ecereDestructor_");
1925 FullClassNameCat(destructorName, symbol->string, 0x0);
1926 symbol->destructorName = __ecereNameSpace__ecere__sys__CopyString(destructorName);
1927 ListAdd(specs, MkSpecifier(301));
1928 context = PushContext();
1929 statements = MkList();
1930 if(definitions != (((void *)0)))
1932 for(def = definitions->first; def; def = def->next)
1934 if(def->type == 2 && def->decl && def->decl->type == 2)
1936 struct Instantiation * inst = def->decl->inst;
1937 struct Symbol * classSym = inst->_class->symbol;
1939 if(inst->exp && (!classSym || !classSym->registered || classSym->registered->type == 0))
1941 struct Expression * exp = MkExpOp((((void *)0)), 328, CopyExpression(inst->exp));
1943 ListAdd(statements, MkExpressionStmt(MkListOne(exp)));
1945 if(inst->exp && (!classSym || !classSym->registered || classSym->registered->type == 5))
1947 struct Expression * exp = MkExpOp((((void *)0)), 328, CopyExpression(inst->exp));
1949 ListAdd(statements, MkExpressionStmt(MkListOne(exp)));
1954 if(destructor && destructor->body)
1956 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*statements), (((void *)0)), destructor->body);
1957 destructor->body->compound.context->parent = context;
1958 destructor->body = (((void *)0));
1960 body = MkCompoundStmt(declarations, statements);
1961 PopContext(context);
1962 body->compound.context = context;
1963 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(destructorName)), (((void *)0)));
1964 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));
1965 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), decl->symbol);
1966 function = MkClassFunction(specs, (((void *)0)), decl, (((void *)0)));
1967 ProcessClassFunctionBody(function, body);
1968 function->id = symbol->id;
1969 function->idCode = symbol->idCode;
1970 function->dontMangle = 0x1;
1971 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, (((void *)0)), MkClassDefFunction(function));
1973 if(symbol->needConstructor && inCompiler)
1975 struct ClassFunction * function;
1976 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1977 struct Declarator * decl;
1978 struct Statement * body;
1979 struct Context * context;
1980 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0)), * statements;
1982 strcpy(constructorName, "__ecereConstructor_");
1983 FullClassNameCat(constructorName, symbol->string, 0x0);
1984 symbol->constructorName = __ecereNameSpace__ecere__sys__CopyString(constructorName);
1985 ListAdd(specs, MkSpecifierName("bool"));
1986 context = PushContext();
1987 statements = MkList();
1988 if(definitions != (((void *)0)))
1990 for(def = definitions->first; def; def = def->next)
1992 if(def->type == 2 && def->decl && def->decl->type == 2)
1994 struct Instantiation * inst = def->decl->inst;
1995 struct Symbol * classSym = inst->_class->symbol;
1997 if(inst->exp && (!classSym || !classSym->registered || classSym->registered->type == 0 || classSym->registered->type == 5))
1999 struct Instantiation * newInst = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
2002 newInst->members = (((void *)0));
2003 newInst->exp = CopyExpression(inst->exp);
2004 newInst->_class = CopySpecifier(inst->_class);
2005 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpInstance(newInst))));
2008 if(inst->exp && (!classSym || !classSym->registered || classSym->registered->type == 0))
2010 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_IncRef")), MkListOne(CopyExpression(inst->exp))))));
2014 for(def = definitions->first; def; def = def->next)
2016 if(def->type == 1 && def->defProperties)
2018 struct MemberInit * propertyDef;
2020 for(propertyDef = (*def->defProperties).first; propertyDef; propertyDef = propertyDef->next)
2022 struct Expression * memberExp;
2023 struct Identifier * id = (*propertyDef->identifiers).first;
2027 memberExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), id);
2028 for(id = id->next; id; id = id->next)
2029 memberExp = MkExpMember(memberExp, id);
2030 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(memberExp, '=', (propertyDef->initializer && propertyDef->initializer->type == 0 ? propertyDef->initializer->exp : (((void *)0)))))));
2032 if(propertyDef->initializer)
2034 if(propertyDef->initializer->type == 0)
2035 propertyDef->initializer->exp = (((void *)0));
2036 FreeInitializer(propertyDef->initializer);
2038 propertyDef->initializer = (((void *)0));
2039 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*propertyDef->identifiers));
2043 for(def = definitions->first; def; def = def->next)
2045 if(def->type == 2 && def->decl && def->decl->type == 2)
2047 struct Instantiation * inst = def->decl->inst;
2048 struct Symbol * classSym = inst->_class->symbol;
2050 if(inst->exp || (!classSym || !classSym->registered || classSym->registered->type == 0 || classSym->registered->type == 5))
2052 if(!(inst->exp && (!classSym || !classSym->registered || classSym->registered->type == 0 || classSym->registered->type == 5)) || (inst->members && (*inst->members).count))
2054 def->decl->inst = (((void *)0));
2055 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpInstance(inst))));
2061 if(constructor && constructor->body)
2063 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*statements), constructor->body);
2064 constructor->body->compound.context->parent = context;
2065 constructor->body = (((void *)0));
2067 ListAdd(statements, MkReturnStmt(MkListOne(MkExpIdentifier(MkIdentifier("true")))));
2068 body = MkCompoundStmt(declarations, statements);
2069 PopContext(context);
2070 body->compound.context = context;
2071 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(constructorName)), (((void *)0)));
2072 decl->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2073 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), decl->symbol);
2074 decl->symbol->id = symbol->id;
2075 decl->symbol->idCode = symbol->idCode;
2076 function = MkClassFunction(specs, (((void *)0)), decl, (((void *)0)));
2077 ProcessClassFunctionBody(function, body);
2078 function->id = symbol->id;
2079 function->idCode = symbol->idCode;
2080 function->dontMangle = 0x1;
2081 if(definitions != (((void *)0)))
2082 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, (((void *)0)), MkClassDefFunction(function));
2085 if(definitions != (((void *)0)))
2087 for(def = definitions->first; def; def = def->next)
2089 if(def->type == 3 && def->propertyDef)
2091 struct PropertyDef * propertyDef = def->propertyDef;
2092 struct ClassDef * after = def;
2093 struct ClassDef * newDef;
2097 yylloc = propertyDef->loc;
2098 if(!NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->privateNameSpace) && def->memberAccess == 1)
2099 CheckPublicDataType(propertyDef->symbol->type, 1, "class property");
2100 else if(!symbol->isStatic)
2101 CheckPublicDataType(propertyDef->symbol->type, 2, "class property");
2105 struct ClassFunction * func;
2106 struct Declarator * decl;
2108 struct __ecereNameSpace__ecere__sys__OldList * params;
2110 if(propertyDef->getStmt && propertyDef->id)
2112 strcpy(name, "__ecereProp_");
2113 FullClassNameCat(name, symbol->string, 0x0);
2114 strcat(name, "_Get_");
2115 FullClassNameCat(name, propertyDef->id->string, 0x1);
2116 MangleClassName(name);
2118 if(propertyDef->symbol->type && propertyDef->symbol->type->kind == 8 && propertyDef->symbol->type->_class && propertyDef->symbol->type->_class->registered && propertyDef->symbol->type->_class->registered->type == 1)
2120 ListAdd(params, MkTypeName(CopyList(propertyDef->specifiers, CopySpecifier), MkDeclaratorIdentifier(MkIdentifier("value"))));
2121 decl = PlugDeclarator(propertyDef->declarator, MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(name)), params));
2122 func = MkClassFunction(MkListOne(MkSpecifier(301)), (((void *)0)), decl, (((void *)0)));
2126 decl = PlugDeclarator(propertyDef->declarator, MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(name)), params));
2127 func = MkClassFunction(CopyList(propertyDef->specifiers, CopySpecifier), (((void *)0)), decl, (((void *)0)));
2129 ProcessClassFunctionBody(func, propertyDef->getStmt);
2130 func->declarator->symbol = propertyDef->symbol;
2131 propertyDef->symbol->externalGet = (struct External *)func;
2132 func->dontMangle = 0x1;
2133 newDef = MkClassDefFunction(func);
2134 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, after, newDef);
2137 propertyDef->getStmt = (((void *)0));
2139 func->body = (((void *)0));
2141 if(propertyDef->setStmt && propertyDef->id)
2143 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2145 strcpy(name, "__ecereProp_");
2146 FullClassNameCat(name, symbol->string, 0x0);
2147 strcat(name, "_Set_");
2148 FullClassNameCat(name, propertyDef->id->string, 0x1);
2149 MangleClassName(name);
2151 ListAdd(params, MkTypeName(CopyList(propertyDef->specifiers, CopySpecifier), PlugDeclarator(propertyDef->declarator, MkDeclaratorIdentifier(MkIdentifier("value")))));
2152 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(name)), params);
2153 if(!propertyDef->symbol->_property || !propertyDef->symbol->_property->conversion)
2154 ListAdd(specifiers, MkSpecifier(301));
2157 if(regClass->type == 1)
2158 ListAdd(specifiers, MkSpecifier(301));
2160 ListAdd(specifiers, MkSpecifierName(regClass->fullName));
2162 func = MkClassFunction(specifiers, (((void *)0)), decl, (((void *)0)));
2163 ProcessClassFunctionBody(func, propertyDef->setStmt);
2164 func->dontMangle = 0x1;
2165 func->declarator->symbol = propertyDef->symbol;
2166 propertyDef->symbol->externalSet = (struct External *)func;
2167 if(!propertyDef->conversion && regClass->type == 0)
2168 func->propSet = propertyDef->symbol;
2169 newDef = MkClassDefFunction(func);
2170 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, after, newDef);
2173 propertyDef->setStmt = (((void *)0));
2175 func->body = (((void *)0));
2177 if(propertyDef->issetStmt && propertyDef->id)
2179 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2181 strcpy(name, "__ecereProp_");
2182 FullClassNameCat(name, symbol->string, 0x0);
2183 strcat(name, "_IsSet_");
2184 FullClassNameCat(name, propertyDef->id->string, 0x1);
2185 MangleClassName(name);
2187 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(name)), params);
2188 ListAdd(specifiers, MkSpecifierName("bool"));
2189 func = MkClassFunction(specifiers, (((void *)0)), decl, (((void *)0)));
2190 ProcessClassFunctionBody(func, propertyDef->issetStmt);
2191 func->dontMangle = 0x1;
2192 func->declarator->symbol = propertyDef->symbol;
2193 propertyDef->symbol->externalIsSet = (struct External *)func;
2194 newDef = MkClassDefFunction(func);
2195 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, after, newDef);
2198 propertyDef->issetStmt = (((void *)0));
2200 func->body = (((void *)0));
2202 if(propertyDef->id && inCompiler)
2204 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(symbol->registered, propertyDef->id->string, privateModule);
2205 struct Declaration * decl;
2206 struct External * external;
2207 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2209 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(286));
2210 ListAdd(specifiers, MkSpecifierName("Property"));
2211 strcpy(name, "__ecereProp_");
2212 FullClassNameCat(name, symbol->string, 0x0);
2214 FullClassNameCat(name, propertyDef->id->string, 0x1);
2215 MangleClassName(name);
2217 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2219 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))));
2220 strcpy(name, "__ecerePropM_");
2221 FullClassNameCat(name, symbol->string, 0x0);
2223 FullClassNameCat(name, propertyDef->id->string, 0x1);
2224 MangleClassName(name);
2225 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))));
2226 decl = MkDeclaration(specifiers, list);
2228 external = MkExternalDeclaration(decl);
2229 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal ? curExternal->prev : (((void *)0)), external);
2230 external->symbol = propertyDef->symbol;
2231 propertyDef->symbol->externalPtr = external;
2232 if(inCompiler && prop && prop->symbol)
2233 ((struct Symbol *)prop->symbol)->externalPtr = external;
2238 else if(def->type == 10 && def->propertyDef)
2240 struct PropertyDef * propertyDef = def->propertyDef;
2241 struct ClassDef * after = def;
2242 struct ClassDef * newDef;
2247 yylloc = propertyDef->loc;
2248 if(!NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->privateNameSpace))
2249 CheckPublicDataType(propertyDef->symbol->type, 1, "classwide property");
2250 else if(!symbol->isStatic)
2251 CheckPublicDataType(propertyDef->symbol->type, 2, "classwide property");
2254 struct ClassFunction * func;
2255 struct Declarator * decl;
2257 struct __ecereNameSpace__ecere__sys__OldList * params;
2259 if(propertyDef->getStmt && propertyDef->id)
2261 struct Declarator * declId;
2263 sprintf(name, "class::__ecereClassProp_");
2264 FullClassNameCat(name, symbol->string, 0x0);
2265 strcat(name, "_Get_");
2266 strcat(name, propertyDef->id->string);
2267 MangleClassName(name);
2269 declId = MkDeclaratorIdentifier(MkIdentifier(name));
2270 if(propertyDef->symbol->type && propertyDef->symbol->type->kind == 8 && propertyDef->symbol->type->_class && propertyDef->symbol->type->_class->registered && propertyDef->symbol->type->_class->registered->type == 1)
2272 ListAdd(params, MkTypeName(CopyList(propertyDef->specifiers, CopySpecifier), MkDeclaratorIdentifier(MkIdentifier("value"))));
2273 decl = PlugDeclarator(propertyDef->declarator, MkDeclaratorFunction(declId, params));
2274 func = MkClassFunction(MkListOne(MkSpecifier(301)), (((void *)0)), decl, (((void *)0)));
2278 decl = PlugDeclarator(propertyDef->declarator, MkDeclaratorFunction(declId, params));
2279 func = MkClassFunction(CopyList(propertyDef->specifiers, CopySpecifier), (((void *)0)), decl, (((void *)0)));
2281 ProcessClassFunctionBody(func, propertyDef->getStmt);
2282 func->declarator->symbol = propertyDef->symbol;
2283 propertyDef->symbol->externalGet = (struct External *)func;
2284 func->dontMangle = 0x1;
2285 newDef = MkClassDefFunction(func);
2286 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, after, newDef);
2289 propertyDef->getStmt = (((void *)0));
2291 func->body = (((void *)0));
2293 if(propertyDef->setStmt && propertyDef->id)
2295 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2297 strcpy(name, "class::__ecereClassProp_");
2298 FullClassNameCat(name, symbol->string, 0x0);
2299 strcat(name, "_Set_");
2300 strcat(name, propertyDef->id->string);
2301 MangleClassName(name);
2303 ListAdd(params, MkTypeName(CopyList(propertyDef->specifiers, CopySpecifier), PlugDeclarator(propertyDef->declarator, MkDeclaratorIdentifier(MkIdentifier("value")))));
2304 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(name)), params);
2305 ListAdd(specifiers, MkSpecifier(301));
2306 func = MkClassFunction(specifiers, (((void *)0)), decl, (((void *)0)));
2307 ProcessClassFunctionBody(func, propertyDef->setStmt);
2308 func->dontMangle = 0x1;
2309 func->declarator->symbol = propertyDef->symbol;
2310 propertyDef->symbol->externalSet = (struct External *)func;
2311 newDef = MkClassDefFunction(func);
2312 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, after, newDef);
2315 propertyDef->setStmt = (((void *)0));
2317 func->body = (((void *)0));
2322 else if(def->type == 0 && def->function->declarator)
2324 struct ClassFunction * func = def->function;
2326 func->_class = regClass;
2327 if(!func->dontMangle)
2329 struct Declarator * funcDecl = GetFuncDecl(func->declarator);
2330 struct Identifier * id = GetDeclId(funcDecl);
2331 struct __ecereNameSpace__ecere__com__Method * method;
2333 if(!funcDecl->function.parameters || !(*funcDecl->function.parameters).first)
2335 if(!funcDecl->function.parameters)
2336 funcDecl->function.parameters = MkList();
2337 ListAdd(funcDecl->function.parameters, MkTypeName(MkListOne(MkSpecifier(301)), (((void *)0))));
2339 method = __ecereNameSpace__ecere__com__eClass_FindMethod(regClass, id->string, privateModule);
2340 FreeSpecifier(id->_class);
2341 id->_class = (((void *)0));
2342 if(inCompiler && method)
2344 char * newId = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (strlen(id->string) + strlen("__ecereMethod___ecereNameSpace__") + strlen(symbol->string) + 2));
2347 ProcessMethodType(method);
2349 if(!NameSpaceContained(regClass->nameSpace, &((struct __ecereNameSpace__ecere__com__Module *)(((char *)regClass->module + 12)))->privateNameSpace) && method->memberAccess == 1)
2350 CheckPublicDataType(method->dataType, 1, "class method");
2351 strcpy(newId, "__ecereMethod_");
2352 FullClassNameCat(newId, symbol->string, 0x0);
2354 strcat(newId, id->string);
2355 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
2357 if(method->type != 1)
2361 (__ecereNameSpace__ecere__com__eSystem_Delete(((struct Symbol *)method->symbol)->string), ((struct Symbol *)method->symbol)->string = 0);
2362 ((struct Symbol *)method->symbol)->string = __ecereNameSpace__ecere__sys__CopyString(newId);
2372 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2374 void PreProcessClassDefinitions()
2376 struct External * external, * next;
2378 curExternal = (((void *)0));
2381 for(external = (*ast).first; external; external = next)
2383 next = external->next;
2384 curExternal = external;
2385 if(external->type == 2)
2387 struct ClassDefinition * _class = external->_class;
2389 if(_class->definitions)
2391 ProcessClass(0, _class->definitions, _class->symbol, _class->baseSpecs, (((void *)0)), &_class->loc, ast, external->prev, (((void *)0)));
2394 else if(external->type == 1)
2396 struct Declaration * declaration = external->declaration;
2398 if(declaration->type == 1)
2400 if(declaration->specifiers)
2402 struct Specifier * specifier;
2404 for(specifier = (*declaration->specifiers).first; specifier; specifier = specifier->next)
2406 if((specifier->type == 2 || specifier->type == 3 || specifier->type == 4) && specifier->id && specifier->id->string && (declaration->declMode || specifier->baseSpecs || (specifier->type == 2 && specifier->definitions)))
2408 struct Symbol * symbol = FindClass(specifier->id->string);
2412 ProcessClass((specifier->type == 4) ? 6 : 0, specifier->definitions, symbol, specifier->baseSpecs, specifier->list, &specifier->loc, ast, external->prev, declaration->declarators);
2413 declaration->declarators = (((void *)0));
2419 else if(inCompiler && declaration->type == 3)
2421 yylloc = declaration->loc;
2422 if(declaration->declMode == 1)
2423 CheckPublicExpression(declaration->exp, 1);
2424 else if(declaration->declMode != 3)
2425 CheckPublicExpression(declaration->exp, 2);
2428 else if(external->type == 3)
2431 else if(inCompiler && external->type == 0)
2433 yylloc = external->function->loc;
2434 if(!external->function->type)
2435 external->function->type = ProcessType(external->function->specifiers, external->function->declarator);
2436 if(external->function->declMode == 1)
2437 CheckPublicDataType(external->function->type, 1, "function");
2438 else if(external->function->declMode != 3)
2439 CheckPublicDataType(external->function->type, 2, "function");
2445 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2447 struct __ecereNameSpace__ecere__com__GlobalFunction;
2449 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);
2451 void __ecereRegisterModule_pass0(struct __ecereNameSpace__ecere__com__Instance * module)
2453 struct __ecereNameSpace__ecere__com__Class * class;
2455 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MangleClassName", "void MangleClassName(char * className)", MangleClassName, module, 1);
2456 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FullClassNameCat", "void FullClassNameCat(char * output, char * className, bool includeTemplateParams)", FullClassNameCat, module, 1);
2457 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PreProcessClassDefinitions", "void PreProcessClassDefinitions(void)", PreProcessClassDefinitions, module, 1);
2460 void __ecereUnregisterModule_pass0(struct __ecereNameSpace__ecere__com__Instance * module)