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;
151 struct Instantiation;
153 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
157 struct Declaration * prev;
158 struct Declaration * next;
165 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
166 struct __ecereNameSpace__ecere__sys__OldList * declarators;
168 struct Instantiation * inst;
171 struct Identifier * id;
172 struct Expression * exp;
175 struct Specifier * extStorage;
176 struct Symbol * symbol;
180 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
184 struct Statement * prev;
185 struct Statement * next;
190 struct __ecereNameSpace__ecere__sys__OldList * expressions;
193 struct Identifier * id;
194 struct Statement * stmt;
198 struct Expression * exp;
199 struct Statement * stmt;
203 struct __ecereNameSpace__ecere__sys__OldList * declarations;
204 struct __ecereNameSpace__ecere__sys__OldList * statements;
205 struct Context * context;
206 unsigned int isSwitch;
210 struct __ecereNameSpace__ecere__sys__OldList * exp;
211 struct Statement * stmt;
212 struct Statement * elseStmt;
216 struct __ecereNameSpace__ecere__sys__OldList * exp;
217 struct Statement * stmt;
221 struct __ecereNameSpace__ecere__sys__OldList * exp;
222 struct Statement * stmt;
226 struct __ecereNameSpace__ecere__sys__OldList * exp;
227 struct Statement * stmt;
231 struct Statement * init;
232 struct Statement * check;
233 struct __ecereNameSpace__ecere__sys__OldList * increment;
234 struct Statement * stmt;
238 struct Identifier * id;
242 struct Specifier * spec;
244 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
245 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
246 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
250 struct Expression * watcher;
251 struct Expression * object;
252 struct __ecereNameSpace__ecere__sys__OldList * watches;
256 struct Identifier * id;
257 struct __ecereNameSpace__ecere__sys__OldList * exp;
258 struct __ecereNameSpace__ecere__sys__OldList * filter;
259 struct Statement * stmt;
261 struct Declaration * decl;
265 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
269 struct TypeName * prev;
270 struct TypeName * next;
272 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
273 struct Declarator * declarator;
275 struct Expression * bitCount;
278 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
282 struct Initializer * prev;
283 struct Initializer * next;
288 struct Expression * exp;
289 struct __ecereNameSpace__ecere__sys__OldList * list;
291 unsigned int isConstant;
294 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
296 struct __ecereNameSpace__ecere__com__DataValue
314 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
318 struct Expression * prev;
319 struct Expression * next;
327 struct Identifier * identifier;
329 struct Statement * compound;
330 struct Instantiation * instance;
332 struct __ecereNameSpace__ecere__sys__OldList * list;
335 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
336 struct Declarator * decl;
340 struct Identifier * id;
344 struct Expression * exp;
345 struct __ecereNameSpace__ecere__sys__OldList * arguments;
346 struct Location argLoc;
350 struct Expression * exp;
351 struct __ecereNameSpace__ecere__sys__OldList * index;
355 struct Expression * exp;
356 struct Identifier * member;
358 unsigned int thisPtr;
363 struct Expression * exp1;
364 struct Expression * exp2;
366 struct TypeName * typeName;
367 struct Specifier * _class;
370 struct TypeName * typeName;
371 struct Expression * exp;
375 struct Expression * cond;
376 struct __ecereNameSpace__ecere__sys__OldList * exp;
377 struct Expression * elseExp;
381 struct TypeName * typeName;
382 struct Expression * size;
386 struct TypeName * typeName;
387 struct Expression * size;
388 struct Expression * exp;
393 struct Identifier * id;
397 struct Expression * ds;
398 struct Expression * name;
402 struct TypeName * typeName;
403 struct Initializer * initializer;
407 struct Expression * exp;
408 struct TypeName * typeName;
411 unsigned int debugValue;
412 struct __ecereNameSpace__ecere__com__DataValue val;
413 unsigned int address;
414 unsigned int hasAddress;
415 struct Type * expType;
416 struct Type * destType;
419 unsigned int byReference;
420 unsigned int isConstant;
421 unsigned int addedThis;
422 unsigned int needCast;
423 unsigned int thisPtr;
426 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
428 struct TemplateDatatype
430 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
431 struct Declarator * decl;
434 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
436 struct TemplateArgument
438 struct TemplateArgument * prev;
439 struct TemplateArgument * next;
441 struct Identifier * name;
445 struct Expression * expression;
446 struct Identifier * identifier;
447 struct TemplateDatatype * templateDatatype;
451 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
453 struct TemplateParameter
455 struct TemplateParameter * prev;
456 struct TemplateParameter * next;
459 struct Identifier * identifier;
462 struct TemplateDatatype * dataType;
465 struct TemplateArgument * defaultArgument;
466 char * dataTypeString;
467 struct Type * baseType;
470 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
474 struct Specifier * prev;
475 struct Specifier * next;
484 struct Symbol * symbol;
485 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
489 struct Identifier * id;
490 struct __ecereNameSpace__ecere__sys__OldList * list;
491 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
492 struct __ecereNameSpace__ecere__sys__OldList * definitions;
493 unsigned int addNameSpace;
494 struct Context * ctx;
496 struct Expression * expression;
497 struct Specifier * _class;
498 struct TemplateParameter * templateParameter;
502 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
506 struct Identifier * prev;
507 struct Identifier * next;
509 struct Symbol * classSym;
510 struct Specifier * _class;
512 struct Identifier * badID;
515 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
519 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
523 struct Declarator * prev;
524 struct Declarator * next;
527 struct Symbol * symbol;
528 struct Declarator * declarator;
531 struct Identifier * identifier;
534 struct Expression * exp;
535 struct Expression * posExp;
540 struct Expression * exp;
541 struct Specifier * enumClass;
545 struct __ecereNameSpace__ecere__sys__OldList * parameters;
549 struct Pointer * pointer;
558 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
560 struct FunctionDefinition
562 struct FunctionDefinition * prev;
563 struct FunctionDefinition * next;
565 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
566 struct Declarator * declarator;
567 struct __ecereNameSpace__ecere__sys__OldList * declarations;
568 struct Statement * body;
569 struct __ecereNameSpace__ecere__com__Class * _class;
570 struct __ecereNameSpace__ecere__sys__OldList attached;
573 struct Symbol * propSet;
575 unsigned int propertyNoThis;
578 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
582 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
586 struct External * prev;
587 struct External * next;
590 struct Symbol * symbol;
593 struct FunctionDefinition * function;
594 struct ClassDefinition * _class;
595 struct Declaration * declaration;
597 struct Identifier * id;
598 struct DBTableDef * table;
603 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
607 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
611 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
616 struct Symbol * parent;
617 struct Symbol * left;
618 struct Symbol * right;
623 struct __ecereNameSpace__ecere__com__Method * method;
624 struct __ecereNameSpace__ecere__com__Property * _property;
625 struct __ecereNameSpace__ecere__com__Class * registered;
633 struct External * pointerExternal;
634 struct External * structExternal;
638 struct External * externalGet;
639 struct External * externalSet;
640 struct External * externalPtr;
641 struct External * externalIsSet;
645 struct External * methodExternal;
646 struct External * methodCodeExternal;
649 unsigned int imported;
650 unsigned int declaredStructSym;
651 struct __ecereNameSpace__ecere__com__Class * _class;
652 unsigned int declaredStruct;
653 unsigned int needConstructor;
654 unsigned int needDestructor;
655 char * constructorName;
658 char * destructorName;
659 struct ModuleImport * module;
660 struct ClassImport * _import;
661 struct Location nameLoc;
662 unsigned int isParam;
663 unsigned int isRemote;
664 unsigned int isStruct;
665 unsigned int fireWatchersDone;
667 unsigned int classData;
668 unsigned int isStatic;
670 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
671 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
672 struct Context * ctx;
676 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
685 struct Symbol * _class;
688 struct __ecereNameSpace__ecere__sys__OldList members;
693 struct Type * returnType;
694 struct __ecereNameSpace__ecere__sys__OldList params;
695 struct Symbol * thisClass;
696 unsigned int staticMethod;
697 struct TemplateParameter * thisClassTemplate;
701 struct __ecereNameSpace__ecere__com__Method * method;
702 struct __ecereNameSpace__ecere__com__Class * methodClass;
703 struct __ecereNameSpace__ecere__com__Class * usedClass;
707 struct Type * arrayType;
709 struct Expression * arraySizeExp;
710 unsigned int freeExp;
711 struct Symbol * enumClass;
714 struct TemplateParameter * templateParameter;
716 unsigned int isSigned;
718 unsigned int constant;
725 unsigned int byReference;
726 unsigned int extraParam;
728 unsigned int directClassAccess;
729 unsigned int computing;
730 unsigned int dllExport;
732 unsigned int keepCast;
733 unsigned int passAsTemplate;
737 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
739 struct __ecereNameSpace__ecere__com__Class
741 struct __ecereNameSpace__ecere__com__Class * prev;
742 struct __ecereNameSpace__ecere__com__Class * next;
748 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
749 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
752 struct __ecereNameSpace__ecere__com__Class * base;
753 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
754 struct __ecereNameSpace__ecere__sys__BinaryTree members;
755 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
756 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
757 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
758 struct __ecereNameSpace__ecere__sys__OldList derivatives;
762 struct __ecereNameSpace__ecere__com__Instance * module;
763 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
764 char * dataTypeString;
765 struct Type * dataType;
767 int defaultAlignment;
768 void (* Initialize)();
770 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
771 char * designerClass;
772 unsigned int noExpansion;
773 char * defaultProperty;
774 unsigned int comRedefinition;
776 unsigned int isRemote;
777 unsigned int internalDecl;
779 unsigned int computeSize;
781 int destructionWatchOffset;
783 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
784 int inheritanceAccess;
787 struct __ecereNameSpace__ecere__sys__OldList conversions;
788 struct __ecereNameSpace__ecere__sys__OldList templateParams;
789 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
790 struct __ecereNameSpace__ecere__com__Class * templateClass;
791 struct __ecereNameSpace__ecere__sys__OldList templatized;
795 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
797 struct __ecereNameSpace__ecere__com__Instance
800 struct __ecereNameSpace__ecere__com__Class * _class;
804 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
806 struct __ecereNameSpace__ecere__com__DataMember
808 struct __ecereNameSpace__ecere__com__DataMember * prev;
809 struct __ecereNameSpace__ecere__com__DataMember * next;
811 unsigned int isProperty;
814 struct __ecereNameSpace__ecere__com__Class * _class;
815 char * dataTypeString;
816 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
817 struct Type * dataType;
821 struct __ecereNameSpace__ecere__sys__OldList members;
822 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
827 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
829 struct __ecereNameSpace__ecere__com__SerialBuffer
831 unsigned char * _buffer;
837 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
839 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
845 char * dataTypeString;
846 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
848 struct __ecereNameSpace__ecere__com__DataValue expression;
854 struct __ecereNameSpace__ecere__com__DataMember * member;
855 struct __ecereNameSpace__ecere__com__Property * prop;
856 struct __ecereNameSpace__ecere__com__Method * method;
862 typedef union YYSTYPE
867 struct Identifier * id;
868 struct Expression * exp;
869 struct Specifier * specifier;
870 struct __ecereNameSpace__ecere__sys__OldList * list;
871 struct Enumerator * enumerator;
872 struct Declarator * declarator;
873 struct Pointer * pointer;
874 struct Initializer * initializer;
875 struct InitDeclarator * initDeclarator;
876 struct TypeName * typeName;
877 struct Declaration * declaration;
878 struct Statement * stmt;
879 struct FunctionDefinition * function;
880 struct External * external;
881 struct Context * context;
882 struct AsmField * asmField;
883 struct Instantiation * instance;
884 struct MembersInit * membersInit;
885 struct MemberInit * memberInit;
886 struct ClassFunction * classFunction;
887 struct ClassDefinition * _class;
888 struct ClassDef * classDef;
889 struct PropertyDef * prop;
891 struct Symbol * symbol;
892 struct PropertyWatch * propertyWatch;
893 struct TemplateParameter * templateParameter;
894 struct TemplateArgument * templateArgument;
895 struct TemplateDatatype * templateDatatype;
896 struct DBTableEntry * dbtableEntry;
897 struct DBIndexItem * dbindexItem;
898 struct DBTableDef * dbtableDef;
901 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
905 struct Enumerator * prev;
906 struct Enumerator * next;
908 struct Identifier * id;
909 struct Expression * exp;
912 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
914 struct InitDeclarator;
916 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
920 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
924 struct ClassFunction * prev;
925 struct ClassFunction * next;
927 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
928 struct Declarator * declarator;
929 struct __ecereNameSpace__ecere__sys__OldList * declarations;
930 struct Statement * body;
931 struct __ecereNameSpace__ecere__com__Class * _class;
932 struct __ecereNameSpace__ecere__sys__OldList attached;
935 struct Symbol * propSet;
936 unsigned int isVirtual;
937 unsigned int isConstructor;
938 unsigned int isDestructor;
939 unsigned int dontMangle;
944 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
948 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
952 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
956 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
960 struct PropertyWatch * prev;
961 struct PropertyWatch * next;
963 struct Statement * compound;
964 struct __ecereNameSpace__ecere__sys__OldList * properties;
965 unsigned int deleteWatch;
968 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
972 struct ClassDef * prev;
973 struct ClassDef * next;
978 struct Declaration * decl;
979 struct ClassFunction * function;
980 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
981 struct PropertyDef * propertyDef;
982 struct PropertyWatch * propertyWatch;
984 struct Identifier * defaultProperty;
987 struct Identifier * id;
988 struct Initializer * initializer;
995 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
999 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1003 extern YYSTYPE yylval;
1005 extern struct Location yylloc;
1007 static struct Statement * registerModuleBody;
1009 static struct External * registerModuleExternal;
1011 static struct Statement * unregisterModuleBody;
1013 static struct External * unregisterModuleExternal;
1015 extern int propWatcherID;
1017 unsigned int buildingECERECOM = 0x0;
1019 void SetBuildingEcereCom(unsigned int b)
1021 buildingECERECOM = b;
1024 unsigned int GetBuildingEcereCom()
1026 return buildingECERECOM;
1029 unsigned int buildingECERECOMModule = 0x0;
1031 void SetBuildingEcereComModule(unsigned int b)
1033 buildingECERECOMModule = b;
1036 unsigned int GetBuildingEcereComModule()
1038 return buildingECERECOMModule;
1041 extern struct Identifier * GetDeclId(struct Declarator * decl);
1043 extern unsigned int inCompiler;
1045 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
1047 extern struct Specifier * MkSpecifier(int specifier);
1049 extern void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class);
1051 extern struct FunctionDefinition * MkFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * declarationList);
1053 extern void ProcessFunctionBody(struct FunctionDefinition * func, struct Statement * body);
1055 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
1057 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
1059 extern struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param);
1061 extern struct Type * ProcessTypeString(char * string, unsigned int staticMethod);
1063 extern struct Symbol * FindClass(char * name);
1065 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);
1067 extern void Compiler_Error(char * format, ...);
1069 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
1071 extern void FreeType(struct Type * type);
1073 extern void FreeExternal(struct External * external);
1075 extern struct Context * globalContext;
1077 extern struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols;
1079 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
1081 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* )(void * ));
1083 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1085 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
1087 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
1089 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
1091 struct External * ProcessClassFunction(struct __ecereNameSpace__ecere__com__Class * owningClass, struct ClassFunction * func, struct __ecereNameSpace__ecere__sys__OldList * defs, struct External * after, unsigned int makeStatic)
1093 struct Identifier * id = GetDeclId(func->declarator);
1094 struct Type * type = (((void *)0));
1095 struct Symbol * symbol;
1096 struct External * external = (((void *)0));
1098 if(defs && func->declarator)
1100 struct FunctionDefinition * function = (((void *)0));
1101 struct Symbol * propSymbol;
1102 int symid = func->declarator->symbol->id;
1103 int symidCode = func->declarator->symbol->idCode;
1107 if(!func->specifiers)
1108 func->specifiers = MkList();
1110 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*func->specifiers), (((void *)0)), MkSpecifier(286));
1112 propSymbol = func->declarator->symbol;
1113 ReplaceThisClassSpecifiers(func->specifiers, owningClass);
1114 if(propSymbol->externalGet == (struct External *)func)
1115 func->declarator->symbol = (((void *)0));
1116 else if(propSymbol->externalSet == (struct External *)func)
1118 func->declarator->symbol = (((void *)0));
1121 else if(propSymbol->externalIsSet == (struct External *)func)
1123 func->declarator->symbol = (((void *)0));
1127 function = MkFunction(func->specifiers, func->declarator, (((void *)0)));
1128 function->propSet = func->propSet;
1129 ProcessFunctionBody(function, func->body);
1130 external = MkExternalFunction(function);
1131 external->symbol = func->declarator->symbol;
1132 external->function->_class = func->_class;
1134 symbol = func->declarator->symbol;
1136 symbol->idCode = symidCode;
1137 if(!func->dontMangle)
1139 struct __ecereNameSpace__ecere__com__Method * method = func->declarator->symbol->method;
1141 func->declarator->symbol->methodExternal = external;
1142 if(method && method->symbol)
1143 ((struct Symbol *)method->symbol)->methodCodeExternal = external;
1144 if(method && method->type == 1)
1146 struct Type * methodDataType;
1148 ProcessMethodType(method);
1149 methodDataType = method->dataType;
1150 type = symbol->type;
1151 if(!type->staticMethod && !type->thisClass && !type->thisClassTemplate)
1153 if(method->dataType->thisClassTemplate)
1155 if(owningClass->templateArgs)
1157 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = FindTemplateArg(owningClass, method->dataType->thisClassTemplate);
1159 type->byReference = method->dataType->byReference;
1160 methodDataType = ProcessTypeString(method->dataTypeString, 0x0);
1161 type->thisClass = methodDataType->thisClass = arg ? FindClass((*arg).dataTypeString) : (((void *)0));
1164 else if(method->dataType->staticMethod)
1165 type->staticMethod = 0x1;
1166 else if(method->dataType->thisClass)
1168 type->thisClass = method->dataType->thisClass;
1169 type->byReference = method->dataType->byReference;
1173 if(!owningClass->symbol)
1174 owningClass->symbol = FindClass(owningClass->fullName);
1175 type->thisClass = owningClass->symbol;
1176 type->extraParam = 0x1;
1180 if(!MatchTypes(type, methodDataType, (((void *)0)), owningClass, method->_class, 0x1, 0x1, 0x1, 0x0))
1182 Compiler_Error("Incompatible virtual function %s\n", method->name);
1186 struct Type * typeParam;
1187 struct Declarator * funcDecl = GetFuncDecl(func->declarator);
1189 if(funcDecl->function.parameters)
1191 struct TypeName * param = (*funcDecl->function.parameters).first;
1193 for(typeParam = methodDataType->params.first; typeParam; typeParam = typeParam->next)
1195 if(typeParam->classObjectType)
1197 param->classObjectType = typeParam->classObjectType;
1198 if(param->declarator && param->declarator->symbol)
1199 param->declarator->symbol->type->classObjectType = typeParam->classObjectType;
1201 param = param->next;
1205 if(methodDataType != method->dataType)
1206 FreeType(methodDataType);
1210 type = symbol->type;
1211 if(!type->staticMethod && !type->thisClass)
1213 if(owningClass && !owningClass->symbol)
1214 owningClass->symbol = FindClass(owningClass->fullName);
1215 type->thisClass = owningClass ? FindClass(owningClass->fullName) : (((void *)0));
1221 if(symbol->type && !symbol->type->staticMethod && !symbol->type->thisClass)
1223 if(!owningClass->symbol)
1224 owningClass->symbol = FindClass(owningClass->fullName);
1225 symbol->type->thisClass = owningClass->symbol;
1227 if(propSymbol->externalSet == (struct External *)func && propSymbol->_property && propSymbol->_property->conversion)
1229 if(symbol->type->thisClass && symbol->type->classObjectType != 1)
1231 if(owningClass->type != 1)
1232 symbol->type->thisClass = (((void *)0));
1235 if(propSymbol->externalGet == (struct External *)func)
1237 propSymbol->externalGet = external;
1239 else if(propSymbol->externalSet == (struct External *)func)
1241 propSymbol->externalSet = external;
1243 else if(propSymbol->externalIsSet == (struct External *)func)
1245 propSymbol->externalIsSet = external;
1255 func->declarator = (((void *)0));
1256 func->specifiers = (((void *)0));
1257 func->body = (((void *)0));
1258 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1262 struct __ecereNameSpace__ecere__com__Method * method = func->declarator->symbol->method;
1264 if(method && method->symbol)
1265 ((struct Symbol *)method->symbol)->methodCodeExternal = (((void *)0));
1266 func->declarator = (((void *)0));
1267 func->specifiers = (((void *)0));
1268 FreeExternal(external);
1273 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
1274 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), symbol);
1275 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
1276 external->function->declarator = CopyDeclarator(external->function->declarator);
1277 external->function->specifiers = CopyList(external->function->specifiers, CopySpecifier);
1278 external->function->body = (((void *)0));
1284 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
1286 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
1288 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
1290 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
1292 extern struct Specifier * MkSpecifierName(char * name);
1294 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1296 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1298 extern struct Identifier * MkIdentifier(char * string);
1300 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1302 extern char * __ecereNameSpace__ecere__sys__GetLastDirectory(char * string, char * output);
1304 extern char * outputFile;
1306 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string);
1308 extern void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2);
1310 extern int sprintf(char * , char * , ...);
1312 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1314 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
1316 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1318 void CreateRegisterModuleBody()
1320 void * __ecereTemp1;
1322 if(!registerModuleBody && inCompiler)
1324 char registerName[1024], moduleName[274];
1325 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1326 struct Declarator * declarator;
1327 struct TypeName * moduleParam;
1329 registerModuleBody = MkCompoundStmt(MkList(), MkList());
1330 registerModuleBody->compound.context = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context), ((struct Context *)__ecereTemp1)->parent = globalContext, ((struct Context *)__ecereTemp1));
1331 ListAdd(registerModuleBody->compound.declarations, MkDeclaration(MkListOne(MkSpecifierName("ecere::com::Class")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("class")), (((void *)0))))));
1332 specifiers = MkList();
1333 ListAdd(specifiers, MkSpecifier(301));
1334 moduleParam = MkTypeName(MkListOne(MkSpecifierName("Module")), MkDeclaratorIdentifier(MkIdentifier("module")));
1335 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1336 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1337 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '.', '_');
1338 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, ' ', '_');
1339 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '-', '_');
1340 sprintf(registerName, "__ecereRegisterModule_%s", moduleName);
1341 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), MkListOne(moduleParam));
1343 struct FunctionDefinition * function = MkFunction(specifiers, declarator, (((void *)0)));
1345 ProcessFunctionBody(function, registerModuleBody);
1346 function->declMode = 0;
1349 ListAdd(ast, (registerModuleExternal = MkExternalFunction(function)));
1352 if(!unregisterModuleBody && inCompiler)
1354 char registerName[1024], moduleName[274];
1355 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1356 struct Declarator * declarator;
1357 struct TypeName * moduleParam;
1359 unregisterModuleBody = MkCompoundStmt(MkList(), MkList());
1360 unregisterModuleBody->compound.context = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context), ((struct Context *)__ecereTemp1)->parent = globalContext, ((struct Context *)__ecereTemp1));
1361 specifiers = MkList();
1362 ListAdd(specifiers, MkSpecifier(301));
1363 moduleParam = MkTypeName(MkListOne(MkSpecifierName("Module")), MkDeclaratorIdentifier(MkIdentifier("module")));
1364 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1365 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1366 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '.', '_');
1367 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, ' ', '_');
1368 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '-', '_');
1369 sprintf(registerName, "__ecereUnregisterModule_%s", moduleName);
1370 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), MkListOne(moduleParam));
1372 struct FunctionDefinition * function = MkFunction(specifiers, declarator, (((void *)0)));
1374 ProcessFunctionBody(function, unregisterModuleBody);
1375 function->declMode = 0;
1378 ListAdd(ast, (unregisterModuleExternal = MkExternalFunction(function)));
1383 extern struct Expression * MkExpIdentifier(struct Identifier * id);
1385 extern struct Expression * MkExpConstant(char * string);
1387 extern char * QMkString(char * source);
1389 extern struct Expression * MkExpString(char * string);
1391 extern char * strcpy(char * , const char * );
1393 extern void FullClassNameCat(char * output, char * className, unsigned int includeTemplateParams);
1395 extern char * strcat(char * , const char * );
1397 extern void MangleClassName(char * className);
1399 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
1401 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
1403 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
1405 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
1407 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1409 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1411 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
1413 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
1415 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
1417 struct __ecereNameSpace__ecere__com__BitMember
1419 struct __ecereNameSpace__ecere__com__BitMember * prev;
1420 struct __ecereNameSpace__ecere__com__BitMember * next;
1422 unsigned int isProperty;
1425 struct __ecereNameSpace__ecere__com__Class * _class;
1426 char * dataTypeString;
1427 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1428 struct Type * dataType;
1435 extern int ComputeTypeSize(struct Type * type);
1437 extern struct Context * curContext;
1439 extern struct Context * PushContext(void);
1441 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1443 extern void PopContext(struct Context * ctx);
1445 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
1447 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
1449 struct __ecereNameSpace__ecere__com__ClassProperty
1452 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1453 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1454 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1456 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, int);
1457 int (* Get)(struct __ecereNameSpace__ecere__com__Class *);
1458 char * dataTypeString;
1459 struct Type * dataType;
1460 unsigned int constant;
1463 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
1465 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
1467 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
1469 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
1471 void RegisterMembersAndProperties(struct __ecereNameSpace__ecere__com__Class * regClass, unsigned int isMember, char * className, struct Statement * statement)
1473 struct __ecereNameSpace__ecere__com__DataMember * dataMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)regClass : (((void *)0));
1474 struct __ecereNameSpace__ecere__com__DataMember * member;
1475 struct __ecereNameSpace__ecere__com__Property * prop;
1476 struct Expression * exp;
1477 struct Statement * stmt;
1478 char dataMemberSize[16];
1479 unsigned int lastOffset = 0;
1481 unsigned int privateMembers = 0x0;
1483 sprintf(dataMemberSize, "%d", sizeof(struct __ecereNameSpace__ecere__com__DataMember *));
1486 for(prop = regClass->conversions.first; prop; prop = prop->next)
1488 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1491 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1492 ListAdd(args, MkExpConstant("0"));
1494 char * string = QMkString(prop->dataTypeString);
1496 ListAdd(args, MkExpString(string));
1497 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1501 strcpy(name, "__ecereProp_");
1502 FullClassNameCat(name, regClass->fullName, 0x0);
1503 strcat(name, "_Set_");
1504 FullClassNameCat(name, prop->name, 0x1);
1505 MangleClassName(name);
1506 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1509 ListAdd(args, MkExpConstant("0"));
1512 strcpy(name, "__ecereProp_");
1513 FullClassNameCat(name, regClass->fullName, 0x0);
1514 strcat(name, "_Get_");
1515 FullClassNameCat(name, prop->name, 0x1);
1516 MangleClassName(name);
1517 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1520 ListAdd(args, MkExpConstant("0"));
1521 switch(prop->memberAccess)
1524 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1527 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1531 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1534 strcpy(name, "__ecereProp_");
1535 FullClassNameCat(name, regClass->fullName, 0x0);
1537 FullClassNameCat(name, prop->name, 0x1);
1538 MangleClassName(name);
1539 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args))));
1540 ListAdd(registerModuleBody->compound.statements, stmt);
1543 for(member = isMember ? dataMember->members.first : regClass->membersAndProperties.first; member; member = member->next)
1545 if(member->isProperty)
1547 prop = (struct __ecereNameSpace__ecere__com__Property *)member;
1549 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1550 char name[1024], nameM[1024];
1551 char * string = QMkString(prop->name);
1553 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1554 ListAdd(args, MkExpString(string));
1555 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1557 char * string = QMkString(prop->dataTypeString);
1559 ListAdd(args, MkExpString(string));
1560 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1564 strcpy(name, "__ecereProp_");
1565 FullClassNameCat(name, regClass->fullName, 0x0);
1566 strcat(name, "_Set_");
1567 FullClassNameCat(name, prop->name, 0x1);
1568 MangleClassName(name);
1569 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1572 ListAdd(args, MkExpConstant("0"));
1575 strcpy(name, "__ecereProp_");
1576 FullClassNameCat(name, regClass->fullName, 0x0);
1577 strcat(name, "_Get_");
1578 FullClassNameCat(name, prop->name, 0x1);
1579 MangleClassName(name);
1580 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1583 ListAdd(args, MkExpConstant("0"));
1584 switch(prop->memberAccess)
1587 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1590 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1594 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1597 strcpy(name, "__ecereProp_");
1598 FullClassNameCat(name, regClass->fullName, 0x0);
1600 FullClassNameCat(name, prop->name, 0x1);
1601 MangleClassName(name);
1602 strcpy(nameM, "__ecerePropM_");
1603 FullClassNameCat(nameM, regClass->fullName, 0x0);
1605 FullClassNameCat(nameM, prop->name, 0x1);
1606 MangleClassName(nameM);
1607 if(prop->dataTypeString)
1609 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args))));
1613 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddProperty")), args)));
1615 ListAdd(registerModuleBody->compound.statements, stmt);
1620 strcpy(name, "__ecereProp_");
1621 FullClassNameCat(name, regClass->fullName, 0x1);
1622 strcat(name, "_IsSet_");
1623 FullClassNameCat(name, prop->name, 0x0);
1624 MangleClassName(name);
1625 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier(nameM)), MkIdentifier("IsSet")), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(name))))));
1626 ListAdd(registerModuleBody->compound.statements, stmt);
1630 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier(nameM)), MkIdentifier("category")), '=', MkExpString(QMkString(prop->category)))));
1631 ListAdd(registerModuleBody->compound.statements, stmt);
1633 if(prop->dataTypeString)
1635 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
1637 ListAdd(list, MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', MkExpIdentifier(MkIdentifier(nameM))));
1638 ListAdd(list, MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0"))));
1639 stmt = MkIfStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("module")), MkIdentifier("application")), 269, MkExpMember(MkExpIdentifier(MkIdentifier("__thisModule")), MkIdentifier("application")))), MkExpressionStmt(list), (((void *)0)));
1640 ListAdd(registerModuleBody->compound.statements, stmt);
1641 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(nameM)), '=', MkExpCast(MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpConstant("0")))));
1642 ListAdd(unregisterModuleBody->compound.statements, stmt);
1646 else if(member->type == 0 && !isMember && regClass->type == 2)
1648 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)member;
1649 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1651 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1653 char * string = QMkString(bitMember->name);
1655 ListAdd(args, MkExpString(string));
1656 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1659 char * string = QMkString(bitMember->dataTypeString);
1661 ListAdd(args, MkExpString(string));
1662 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1667 sprintf(string, "%d", bitMember->size);
1668 ListAdd(args, (exp = MkExpConstant(string)));
1673 sprintf(string, "%d", bitMember->pos);
1674 ListAdd(args, (exp = MkExpConstant(string)));
1676 switch(member->memberAccess)
1679 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1682 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1686 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1689 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddBitMember")), args)));
1690 ListAdd(statement->compound.statements, stmt);
1692 else if(member->memberAccess == 1 || (member->type == 0 && !member->dataTypeString))
1694 struct __ecereNameSpace__ecere__sys__OldList * args;
1698 unsigned int offset = member->offset - lastOffset;
1701 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1705 sprintf(string, "\"__ecerePrivateData%d\"", privateID++);
1706 ListAdd(args, MkExpString(string));
1711 sprintf(string, "\"byte[%d]\"", offset);
1712 ListAdd(args, MkExpString(string));
1717 sprintf(string, "%d", offset);
1718 ListAdd(args, (exp = MkExpConstant(string)));
1720 ListAdd(args, (exp = MkExpConstant("1")));
1721 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1722 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier(isMember ? "eMember_AddDataMember" : "eClass_AddDataMember")), args)));
1723 ListAdd(statement->compound.statements, stmt);
1724 privateMembers = 0x0;
1726 if(member->type == 0)
1728 if(!member->dataType)
1729 member->dataType = ProcessTypeString(member->dataTypeString, 0x0);
1730 ComputeTypeSize(member->dataType);
1732 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1734 char * string = QMkString(member->name);
1736 ListAdd(args, MkExpString(string));
1737 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1740 char * string = QMkString(member->dataTypeString);
1742 ListAdd(args, MkExpString(string));
1743 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1748 sprintf(string, "%d", member->dataType->size);
1749 ListAdd(args, (exp = MkExpConstant(string)));
1754 sprintf(string, "%d", member->dataType->alignment);
1755 ListAdd(args, (exp = MkExpConstant(string)));
1757 switch(member->memberAccess)
1760 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1763 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1767 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1770 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier(isMember ? "eMember_AddDataMember" : "eClass_AddDataMember")), args)));
1771 ListAdd(statement->compound.statements, stmt);
1772 lastOffset = member->offset + member->dataType->size;
1776 static int memberCount = 0;
1777 struct Context * context;
1778 struct Statement * compound;
1779 char memberName[256];
1781 sprintf(memberName, "dataMember%d", memberCount);
1783 curContext = statement->compound.context;
1784 context = PushContext();
1785 args = MkListOne(MkExpIdentifier(MkIdentifier((member->type == 1) ? "unionMember" : "structMember")));
1786 switch(member->memberAccess)
1789 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
1792 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
1796 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
1799 compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifierName("DataMember")), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(memberName)), MkInitializerAssignment(MkExpCall(MkExpIdentifier(MkIdentifier("eMember_New")), args)))))), MkList());
1800 compound->compound.context = context;
1802 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1803 ListAdd(args, MkExpIdentifier(MkIdentifier(memberName)));
1804 RegisterMembersAndProperties((struct __ecereNameSpace__ecere__com__Class *)member, 0x1, memberName, compound);
1806 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eMember_AddMember")), args)));
1808 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMember")), args)));
1809 ListAdd(compound->compound.statements, stmt);
1810 PopContext(context);
1811 ListAdd(statement->compound.statements, compound);
1813 lastOffset = member->offset + member->memberOffset;
1817 privateMembers = 0x1;
1821 struct __ecereNameSpace__ecere__com__ClassProperty * classProperty;
1823 for(prop = regClass->membersAndProperties.first; prop; prop = prop->next)
1825 if(prop->isProperty && prop->isWatchable)
1827 struct __ecereNameSpace__ecere__sys__OldList * args;
1828 char name[1024], nameM[1024];
1830 strcpy(name, "__ecereProp_");
1831 FullClassNameCat(name, regClass->fullName, 0x1);
1833 FullClassNameCat(name, prop->name, 0x0);
1834 MangleClassName(name);
1835 strcpy(nameM, "__ecerePropM_");
1836 FullClassNameCat(nameM, regClass->fullName, 0x1);
1838 FullClassNameCat(nameM, prop->name, 0x0);
1839 MangleClassName(nameM);
1840 args = MkListOne(MkExpCondition(MkExpIdentifier(MkIdentifier(nameM)), MkListOne(MkExpIdentifier(MkIdentifier(nameM))), MkExpIdentifier(MkIdentifier(name))));
1841 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eProperty_Watchable")), args)));
1842 ListAdd(registerModuleBody->compound.statements, stmt);
1845 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)))
1847 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
1849 char * string = QMkString(classProperty->name);
1851 ListAdd(args, MkExpIdentifier(MkIdentifier(className)));
1852 ListAdd(args, MkExpString(string));
1853 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1855 char * string = QMkString(classProperty->dataTypeString);
1857 ListAdd(args, MkExpString(string));
1858 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
1860 if(classProperty->Set)
1862 strcpy(name, "__ecereClassProp_");
1863 FullClassNameCat(name, regClass->fullName, 0x1);
1864 strcat(name, "_Set_");
1865 strcat(name, classProperty->name);
1866 MangleClassName(name);
1867 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1870 ListAdd(args, MkExpConstant("0"));
1871 if(classProperty->Get)
1873 strcpy(name, "__ecereClassProp_");
1874 FullClassNameCat(name, regClass->fullName, 0x1);
1875 strcat(name, "_Get_");
1876 strcat(name, classProperty->name);
1877 MangleClassName(name);
1878 ListAdd(args, MkExpIdentifier(MkIdentifier(name)));
1881 ListAdd(args, MkExpConstant("0"));
1882 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddClassProperty")), args)));
1883 ListAdd(registerModuleBody->compound.statements, stmt);
1888 extern struct External * curExternal;
1890 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1892 struct __ecereNameSpace__ecere__com__NameSpace
1895 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1896 struct __ecereNameSpace__ecere__com__NameSpace * left;
1897 struct __ecereNameSpace__ecere__com__NameSpace * right;
1899 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1900 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1901 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1902 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1903 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1906 void GetNameSpaceString(struct __ecereNameSpace__ecere__com__NameSpace * ns, char * string)
1909 GetNameSpaceString(ns->parent, string);
1912 strcat(string, ns->name);
1913 strcat(string, "::");
1917 extern unsigned int parsingType;
1919 extern void ProcessExpressionType(struct Expression * exp);
1921 extern void ComputeExpression(struct Expression * exp);
1923 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
1927 unsigned int (* Add)(struct Expression *, struct Operand *, struct Operand *);
1928 unsigned int (* Sub)(struct Expression *, struct Operand *, struct Operand *);
1929 unsigned int (* Mul)(struct Expression *, struct Operand *, struct Operand *);
1930 unsigned int (* Div)(struct Expression *, struct Operand *, struct Operand *);
1931 unsigned int (* Mod)(struct Expression *, struct Operand *, struct Operand *);
1932 unsigned int (* Neg)(struct Expression *, struct Operand *);
1933 unsigned int (* Inc)(struct Expression *, struct Operand *);
1934 unsigned int (* Dec)(struct Expression *, struct Operand *);
1935 unsigned int (* Asign)(struct Expression *, struct Operand *, struct Operand *);
1936 unsigned int (* AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1937 unsigned int (* SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1938 unsigned int (* MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1939 unsigned int (* DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1940 unsigned int (* ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1941 unsigned int (* BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1942 unsigned int (* BitOr)(struct Expression *, struct Operand *, struct Operand *);
1943 unsigned int (* BitXor)(struct Expression *, struct Operand *, struct Operand *);
1944 unsigned int (* LShift)(struct Expression *, struct Operand *, struct Operand *);
1945 unsigned int (* RShift)(struct Expression *, struct Operand *, struct Operand *);
1946 unsigned int (* BitNot)(struct Expression *, struct Operand *);
1947 unsigned int (* AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1948 unsigned int (* OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1949 unsigned int (* XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1950 unsigned int (* LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1951 unsigned int (* RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1952 unsigned int (* Not)(struct Expression *, struct Operand *);
1953 unsigned int (* Equ)(struct Expression *, struct Operand *, struct Operand *);
1954 unsigned int (* Nqu)(struct Expression *, struct Operand *, struct Operand *);
1955 unsigned int (* And)(struct Expression *, struct Operand *, struct Operand *);
1956 unsigned int (* Or)(struct Expression *, struct Operand *, struct Operand *);
1957 unsigned int (* Grt)(struct Expression *, struct Operand *, struct Operand *);
1958 unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *);
1959 unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1960 unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1961 unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1964 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
1970 unsigned int ptrSize;
1988 extern struct Operand GetOperand(struct Expression * exp);
1990 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string, int value);
1992 extern int __ecereNameSpace__ecere__com__eEnum_AddValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string);
1994 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
1996 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
1998 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
2000 extern struct ClassDef * MkClassDefFunction(struct ClassFunction * function);
2002 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);
2004 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
2006 extern void FreePropertyWatch(struct PropertyWatch * watcher);
2008 extern char * sourceFile;
2010 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2012 extern void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
2014 extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
2016 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
2018 extern unsigned int DummyMethod(void);
2020 extern void DeclareMethod(struct __ecereNameSpace__ecere__com__Method * method, char * name);
2022 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char * name);
2024 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
2026 struct __ecereNameSpace__ecere__com__EnumClassData
2028 struct __ecereNameSpace__ecere__sys__OldList values;
2032 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
2034 struct __ecereNameSpace__ecere__sys__NamedLink
2036 struct __ecereNameSpace__ecere__sys__NamedLink * prev;
2037 struct __ecereNameSpace__ecere__sys__NamedLink * next;
2042 extern char * StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
2044 extern int strlen(const char * );
2046 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
2048 extern char * PrintUInt64(uint64 result);
2050 extern struct Expression * MkExpInstance(struct Instantiation * inst);
2052 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
2054 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
2056 int __ecereVMethodID_class_OnGetString;
2058 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__TemplateMemberType;
2060 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)
2062 void * __ecereTemp1;
2063 struct ClassDef * def;
2064 struct __ecereNameSpace__ecere__com__Class * regClass = symbol->registered;
2068 classType = regClass->type;
2069 if(classType == 4 && enumValues && (inCompiler || !buildingECERECOMModule))
2071 struct Enumerator * e;
2073 for(e = enumValues->first; e; e = e->next)
2077 struct Type * destType = (destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), destType->kind = 3, destType->refCount = 1, destType);
2079 e->exp->destType = destType;
2081 ProcessExpressionType(e->exp);
2083 if(!e->exp->expType)
2086 destType->_class = symbol;
2087 ProcessExpressionType(e->exp);
2089 ComputeExpression(e->exp);
2090 if(e->exp->isConstant && e->exp->type == 2)
2092 struct Operand op = GetOperand(e->exp);
2106 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(regClass, e->id->string, value);
2109 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
2112 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
2115 if(definitions != (((void *)0)))
2119 for(def = definitions->first; def; def = def->next)
2121 if(def->type == 4 && def->propertyWatch)
2123 struct PropertyWatch * propWatch = def->propertyWatch;
2124 struct ClassFunction * func;
2125 char watcherName[1024];
2126 struct Identifier * propID;
2127 struct Statement * stmt = MkExpressionStmt(MkList());
2128 struct Declarator * decl;
2130 sprintf(watcherName, "__ecerePropertySelfWatcher_%d", propWatcherID++);
2131 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
2133 strcat(watcherName, "_");
2134 strcat(watcherName, propID->string);
2136 decl = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifier(301)), (((void *)0)))));
2137 func = MkClassFunction(MkListOne(MkSpecifier(301)), (((void *)0)), decl, (((void *)0)));
2138 ProcessClassFunctionBody(func, propWatch->compound);
2139 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));
2140 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), decl->symbol);
2141 func->id = symbol->id;
2142 func->idCode = symbol->idCode;
2143 func->dontMangle = 0x1;
2145 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
2146 struct Declaration * decl;
2147 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
2149 ListAdd(specifiers, MkSpecifier(286));
2150 ListAdd(specifiers, MkSpecifier(301));
2151 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, externalDecl);
2152 decl = MkDeclaration(specifiers, MkListOne(MkInitDeclarator(MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(regClass->fullName)), (((void *)0))))), (((void *)0)))));
2153 externalDecl->declaration = decl;
2154 if(decl->symbol && !decl->symbol->methodExternal)
2156 decl->symbol->methodExternal = externalDecl;
2157 decl->symbol->id = symbol->id;
2158 decl->symbol->idCode = symbol->idCode;
2161 propWatch->compound = (((void *)0));
2162 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(definitions, (((void *)0)), MkClassDefFunction(func));
2164 stmt->expressions = MkList();
2165 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
2167 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(regClass, propID->string, privateModule);
2171 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2173 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2174 ListAdd(args, MkExpString(QMkString(propID->string)));
2175 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
2176 ListAdd(stmt->expressions, MkExpCall(MkExpIdentifier(MkIdentifier("eProperty_SelfWatch")), args));
2179 Compiler_Error("Property %s not found in class %s\n", propID->string, regClass->fullName);
2181 FreePropertyWatch(def->propertyWatch);
2182 def->propertyWatch = (struct PropertyWatch *)stmt;
2186 for(def = definitions->first; def; def = def->next)
2190 ProcessClassFunction(regClass, def->function, defs, external->prev, declMode == 3);
2194 if(inCompiler && symbol->id != (((int)0x7fffffff)) && regClass)
2196 struct Statement * stmt;
2197 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2198 struct __ecereNameSpace__ecere__com__Method * method;
2199 struct Expression * exp;
2200 char * registerFunction = (((void *)0));
2201 int inheritanceAccess = 1;
2203 CreateRegisterModuleBody();
2204 curExternal = registerModuleExternal;
2205 switch(regClass->type)
2208 ListAdd(args, MkExpIdentifier(MkIdentifier("structClass")));
2211 ListAdd(args, MkExpIdentifier(MkIdentifier("bitClass")));
2214 ListAdd(args, MkExpIdentifier(MkIdentifier("enumClass")));
2217 ListAdd(args, MkExpIdentifier(MkIdentifier("noHeadClass")));
2220 ListAdd(args, MkExpIdentifier(MkIdentifier("unitClass")));
2223 ListAdd(args, MkExpIdentifier(MkIdentifier("normalClass")));
2227 char nameSpace[1024] = "";
2228 char className[1024] = "";
2231 GetNameSpaceString(regClass->nameSpace, nameSpace);
2234 __ecereNameSpace__ecere__sys__GetLastDirectory(sourceFile, className);
2235 __ecereNameSpace__ecere__sys__ChangeCh(className, '.', '_');
2236 strcat(className, "}");
2238 strcat(className, nameSpace);
2239 strcat(className, regClass->name);
2240 string = QMkString(className);
2241 ListAdd(args, MkExpString(string));
2242 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2244 if(baseSpecs != (((void *)0)))
2246 struct Type * baseType = ProcessType(baseSpecs, (((void *)0)));
2248 if(baseType->kind != 9 && baseType->kind != 10)
2250 char baseName[1024] = "";
2253 if(baseType->kind == 8 && baseType->_class && baseType->_class->isStatic)
2255 __ecereNameSpace__ecere__sys__GetLastDirectory(sourceFile, baseName);
2256 __ecereNameSpace__ecere__sys__ChangeCh(baseName, '.', '_');
2257 strcat(baseName, "}");
2258 strcat(baseName, baseType->_class->string);
2261 PrintType(baseType, baseName, 0x0, 0x1);
2262 string = QMkString(baseName);
2263 ListAdd(args, MkExpString(string));
2264 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2267 ListAdd(args, MkExpConstant("0"));
2269 if(((struct Specifier *)baseSpecs->first)->type == 0 && ((struct Specifier *)baseSpecs->first)->specifier == 336)
2270 inheritanceAccess = 2;
2273 ListAdd(args, MkExpConstant("0"));
2274 if(regClass->type == 1 || regClass->type == 0 || regClass->type == 5)
2276 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
2279 struct __ecereNameSpace__ecere__com__Class * base;
2281 for(base = regClass->base; base && base->type != 1000; base = base->next)
2283 for(member = base->membersAndProperties.first; member; member = member->next)
2284 if(!member->isProperty)
2290 if(regClass->type == 1 && symbol->declaredStruct && member)
2292 char baseStructName[1024];
2294 baseStructName[0] = (char)0;
2295 strcpy(baseStructName, (regClass->base->templateClass ? regClass->base->templateClass : regClass->base)->fullName);
2296 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))))));
2299 ListAdd(args, symbol->declaredStruct ? MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(symbol->structName), (((void *)0)))), (((void *)0)))) : MkExpConstant("0"));
2303 ListAdd(args, MkExpConstant("0"));
2306 char classDataStructName[1024];
2308 strcpy(classDataStructName, "__ecereClassData_");
2309 FullClassNameCat(classDataStructName, symbol->string, 0x0);
2310 ListAdd(args, symbol->classData ? MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(classDataStructName), (((void *)0)))), (((void *)0)))) : MkExpConstant("0"));
2312 if(regClass->type == 0 || regClass->type == 5)
2314 ListAdd(args, symbol->needConstructor ? MkExpIdentifier(MkIdentifier(symbol->constructorName)) : MkExpConstant("0"));
2315 ListAdd(args, symbol->needDestructor ? MkExpIdentifier(MkIdentifier(symbol->destructorName)) : MkExpConstant("0"));
2319 ListAdd(args, MkExpConstant("0"));
2320 ListAdd(args, MkExpConstant("0"));
2322 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2326 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2329 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2333 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2336 switch(inheritanceAccess)
2339 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2343 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2346 registerFunction = "eSystem_RegisterClass";
2347 stmt = MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier("class")), '=', MkExpCall((exp = MkExpIdentifier(MkIdentifier(registerFunction))), args))));
2348 ListAdd(registerModuleBody->compound.statements, stmt);
2349 stmt = MkIfStmt(MkListOne(MkExpOp(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("module")), MkIdentifier("application")), 269, MkExpMember(MkExpIdentifier(MkIdentifier("__thisModule")), MkIdentifier("application"))), 271, MkExpIdentifier(MkIdentifier("class")))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(symbol->className)), '=', MkExpIdentifier(MkIdentifier("class"))))), (((void *)0)));
2350 ListAdd(registerModuleBody->compound.statements, stmt);
2351 if(external && external->type == 2 && external->_class->deleteWatchable)
2353 args = MkListOne(MkExpIdentifier(MkIdentifier("class")));
2354 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_DestructionWatchable")), args)));
2355 ListAdd(registerModuleBody->compound.statements, stmt);
2359 struct __ecereNameSpace__ecere__com__Class * base = regClass->base;
2362 for(c = 0; c < base->vTblSize; c++)
2364 struct Symbol * method = (struct Symbol *)regClass->_vTbl[c];
2366 if((void *)method != DummyMethod && base->_vTbl[c] != (void *)method)
2368 struct External * external = method->methodExternal;
2369 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2370 struct Identifier * id = external->function ? GetDeclId(external->function->declarator) : (((void *)0));
2372 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2374 char * string = QMkString(method->method->name);
2376 ListAdd(args, MkExpString(string));
2377 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2379 ListAdd(args, MkExpConstant("0"));
2380 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2381 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2382 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1));
2383 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMethod")), args)));
2384 ListAdd(registerModuleBody->compound.statements, stmt);
2391 for(c = regClass->base ? regClass->base->vTblSize : 0; c < regClass->vTblSize; c++)
2393 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)))
2395 if(method->type == 1 && method->_class == regClass && method->vid == c)
2398 struct Expression * exp;
2399 struct External * external = method->symbol ? ((struct Symbol *)method->symbol)->methodCodeExternal : (((void *)0));
2400 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2401 struct Identifier * id = (external && external->function) ? GetDeclId(external->function->declarator) : (((void *)0));
2403 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2405 char * string = QMkString(method->name);
2407 ListAdd(args, MkExpString(string));
2408 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2411 char * string = QMkString(method->dataTypeString);
2413 ListAdd(args, MkExpString(string));
2414 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2416 if(id && external->function->body)
2418 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2419 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1));
2423 ListAdd(args, (exp = MkExpConstant("0")));
2425 switch(method->memberAccess)
2428 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2431 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2435 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2438 strcpy(name, "__ecereVMethodID_");
2439 FullClassNameCat(name, method->_class->fullName, 0x0);
2441 strcat(name, method->name);
2442 exp = MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddVirtualMethod")), args);
2443 stmt = MkExpressionStmt(MkListOne(exp));
2444 DeclareMethod(method, name);
2445 ListAdd(registerModuleBody->compound.statements, stmt);
2450 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)))
2452 if(method->type == 1 && method->_class == regClass)
2454 else if(method->memberAccess == 1 || !method->dataTypeString)
2456 struct External * external = method->symbol ? ((struct Symbol *)method->symbol)->methodCodeExternal : (((void *)0));
2457 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2458 struct Identifier * id = (external && external->function) ? GetDeclId(external->function->declarator) : (((void *)0));
2460 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2462 char * string = QMkString(method->name);
2464 ListAdd(args, MkExpString(string));
2465 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2468 char * string = QMkString(method->dataTypeString);
2470 ListAdd(args, MkExpString(string));
2471 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2473 if(id && external->function->body)
2475 ListAdd(args, (exp = MkExpIdentifier(MkIdentifier(id->string))));
2476 exp->expType = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), ((struct Type *)__ecereTemp1)->refCount = 1, ((struct Type *)__ecereTemp1));
2480 ListAdd(args, (exp = MkExpConstant("0")));
2482 switch(method->memberAccess)
2485 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2488 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2492 ListAdd(args, MkExpIdentifier(MkIdentifier("publicAccess")));
2495 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddMethod")), args)));
2496 ListAdd(registerModuleBody->compound.statements, stmt);
2499 RegisterMembersAndProperties(regClass, 0x0, "class", registerModuleBody);
2502 struct __ecereNameSpace__ecere__sys__NamedLink * value;
2503 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
2504 struct __ecereNameSpace__ecere__com__EnumClassData * e = (regClass ? ((void *)(((char *)regClass->data) + enumClass->offsetClass)) : (((void *)0)));
2506 for(value = e->values.first; value; value = value->next)
2508 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2510 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2512 char * string = QMkString(value->name);
2514 ListAdd(args, MkExpString(string));
2515 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2520 sprintf(temp, "%d", value->data);
2521 ListAdd(args, MkExpConstant(temp));
2523 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eEnum_AddFixedValue")), args)));
2524 ListAdd(registerModuleBody->compound.statements, stmt);
2527 if(symbol->templateParams)
2529 struct TemplateParameter * param;
2531 for(param = (*symbol->templateParams).first; param; param = param->next)
2533 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2535 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2537 char * string = QMkString(param->identifier->string);
2539 ListAdd(args, MkExpString(string));
2540 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2542 ListAdd(args, MkExpIdentifier(MkIdentifier((param->type == 0) ? "type" : ((param->type == 1) ? "identifier" : "expression"))));
2548 char * typeString = param->dataType ? StringFromSpecDecl(param->dataType->specifiers, param->dataType->decl) : (((void *)0));
2549 char * string = QMkString(typeString);
2551 ListAdd(args, MkExpString(string));
2552 (__ecereNameSpace__ecere__com__eSystem_Delete(typeString), typeString = 0);
2553 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2558 char memberTypeString[132] = "TemplateMemberType::";
2559 unsigned int needClass = 0x1;
2561 ((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);
2562 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(301)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(memberTypeString))));
2566 if(param->defaultArgument)
2568 struct __ecereNameSpace__ecere__sys__OldList * members = MkList();
2574 char * typeString = param->defaultArgument->templateDatatype ? StringFromSpecDecl(param->defaultArgument->templateDatatype->specifiers, param->defaultArgument->templateDatatype->decl) : (((void *)0));
2575 char * string = QMkString(typeString);
2577 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(MkListOne(MkIdentifier("dataTypeString")), MkInitializerAssignment(MkExpString(string))));
2578 (__ecereNameSpace__ecere__com__eSystem_Delete(typeString), typeString = 0);
2579 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2584 char memberString[1024];
2587 memberString[0] = '\0';
2588 if(param->defaultArgument->identifier->_class)
2590 if(param->defaultArgument->identifier->_class->type == 8)
2591 strcpy(memberString, param->defaultArgument->identifier->_class->templateParameter->identifier->string);
2592 else if(param->defaultArgument->identifier->_class->name)
2593 strcpy(memberString, param->defaultArgument->identifier->_class->name);
2596 strcat(memberString, "::");
2597 strcat(memberString, param->defaultArgument->identifier->string);
2598 string = QMkString(memberString);
2599 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(MkListOne(MkIdentifier("dataTypeString")), MkInitializerAssignment(MkExpString(string))));
2600 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2609 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
2612 struct __ecereNameSpace__ecere__sys__OldList * ids = MkList();
2614 char * string = (((void *)0));
2616 op = GetOperand(param->defaultArgument->expression);
2617 ui64String = PrintUInt64(op.ui64);
2618 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ids), MkIdentifier("expression"));
2619 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ids), MkIdentifier("ui64"));
2620 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*members), MkMemberInit(ids, MkInitializerAssignment(MkExpConstant(ui64String))));
2621 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2622 (__ecereNameSpace__ecere__com__eSystem_Delete(ui64String), ui64String = 0);
2626 ListAdd(args, MkExpInstance(MkInstantiation(MkSpecifierName("ClassTemplateArgument"), (((void *)0)), MkListOne(MkMembersInitList(members)))));
2629 ListAdd(args, MkExpIdentifier(MkIdentifier("null")));
2630 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_AddTemplateParameter")), args)));
2631 ListAdd(registerModuleBody->compound.statements, stmt);
2633 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("eClass_DoneAddingTemplateParameters")), MkListOne(MkExpIdentifier(MkIdentifier("class"))))));
2634 ListAdd(registerModuleBody->compound.statements, stmt);
2636 if(definitions != (((void *)0)))
2638 for(def = definitions->first; def; def = def->next)
2640 if(def->type == 4 && def->propertyWatch)
2642 ListAdd(registerModuleBody->compound.statements, (struct Statement *)def->propertyWatch);
2643 def->propertyWatch = (((void *)0));
2645 else if(def->type == 5)
2647 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("designerClass")), '=', MkExpString(QMkString(def->designer))))), (((void *)0)));
2648 ListAdd(registerModuleBody->compound.statements, stmt);
2650 else if(def->type == 6)
2652 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("noExpansion")), '=', MkExpConstant("1")))), (((void *)0)));
2653 ListAdd(registerModuleBody->compound.statements, stmt);
2655 else if(def->type == 7)
2657 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("fixed")), '=', MkExpConstant("1")))), (((void *)0)));
2658 ListAdd(registerModuleBody->compound.statements, stmt);
2660 regClass->fixed = 0x1;
2662 else if(def->type == 8)
2664 stmt = MkIfStmt(MkListOne(MkExpIdentifier(MkIdentifier("class"))), MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("class")), MkIdentifier("defaultProperty")), '=', MkExpString(QMkString(def->defaultProperty->string))))), (((void *)0)));
2665 ListAdd(registerModuleBody->compound.statements, stmt);
2667 else if(def->type == 11)
2669 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2671 ListAdd(args, MkExpIdentifier(MkIdentifier("class")));
2672 ListAdd(args, MkExpString(QMkString(def->id->string)));
2673 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(291)), (((void *)0))), def->initializer->exp));
2674 def->initializer->exp = (((void *)0));
2675 stmt = MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eClass_SetProperty")), args)));
2676 ListAdd(registerModuleBody->compound.statements, stmt);
2684 extern int strcmp(const char * , const char * );
2686 extern void PrintExpression(struct Expression * exp, char * string);
2688 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
2690 void ProcessClassDefinitions()
2692 struct External * external, * next;
2694 CreateRegisterModuleBody();
2697 for(external = (*ast).first; external; external = next)
2699 next = external->next;
2700 curExternal = external;
2701 if(external->type == 2)
2703 struct ClassDefinition * _class = external->_class;
2705 if(_class->definitions)
2707 ProcessClass(0, _class->definitions, _class->symbol, _class->baseSpecs, (((void *)0)), ast, external, _class->declMode);
2711 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2712 FreeExternal(external);
2715 else if(external->type == 0)
2717 if(external->symbol && !external->symbol->type->thisClass)
2718 external->symbol->type->staticMethod = 0x1;
2721 struct FunctionDefinition * function = external->function;
2722 struct Statement * stmt;
2723 struct __ecereNameSpace__ecere__sys__OldList * args;
2725 if(!strcmp(function->declarator->symbol->string, "__on_register_module"))
2727 ListAdd(registerModuleBody->compound.statements, function->body);
2728 function->body->compound.context->parent = registerModuleBody->compound.context;
2729 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2730 function->body = (((void *)0));
2731 FreeExternal(external);
2734 if(function->declMode != 2 && function->declMode != 1)
2737 CreateRegisterModuleBody();
2739 char * string = QMkString(function->declarator->symbol->string);
2741 ListAdd(args, MkExpString(string));
2742 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2746 char type[1024] = "";
2748 PrintType(function->declarator->symbol->type, type, 0x1, 0x1);
2749 string = QMkString(type);
2750 ListAdd(args, MkExpString(string));
2751 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2754 ListAdd(args, MkExpIdentifier(MkIdentifier(function->declarator->symbol->string)));
2756 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2757 switch(function->declMode)
2760 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2763 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2767 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2770 stmt = MkExpressionStmt(MkListOne(MkExpCall((MkExpIdentifier(MkIdentifier("eSystem_RegisterFunction"))), args)));
2771 ListAdd(registerModuleBody->compound.statements, stmt);
2774 else if(external->type == 1)
2776 struct Declaration * declaration = external->declaration;
2778 if(external->symbol)
2780 if(external->symbol->type && external->symbol->type->kind == 11 && !external->symbol->type->thisClass)
2781 external->symbol->type->staticMethod = 0x1;
2783 if(external->symbol && declaration->type == 1)
2785 if(declaration->specifiers)
2787 struct Specifier * specifier;
2788 unsigned int removeExternal = 0x0;
2790 for(specifier = (*declaration->specifiers).first; specifier; specifier = specifier->next)
2792 if((specifier->type == 2 || specifier->type == 3 || specifier->type == 4) && specifier->id && specifier->id->string && (declaration->declMode || specifier->baseSpecs || (specifier->type == 2 && specifier->definitions)))
2794 struct Symbol * symbol = FindClass(specifier->id->string);
2800 if(specifier->type == 2)
2804 removeExternal = 0x1;
2805 symbol->ctx = specifier->ctx;
2806 specifier->ctx = (((void *)0));
2807 ProcessClass(classType, specifier->definitions, symbol, specifier->baseSpecs, specifier->list, ast, external, declaration->declMode);
2811 if(inCompiler && removeExternal)
2813 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
2814 FreeExternal(external);
2818 else if(declaration->type == 3)
2820 if(inCompiler && declaration->declMode != 3)
2822 struct Statement * stmt;
2823 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
2825 CreateRegisterModuleBody();
2827 char * string = QMkString(declaration->id->string);
2829 ListAdd(args, MkExpString(string));
2830 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2834 char type[1024] = "";
2836 PrintExpression(declaration->exp, type);
2837 string = QMkString(type);
2838 ListAdd(args, MkExpString(string));
2839 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
2841 ListAdd(args, MkExpIdentifier(MkIdentifier("module")));
2842 switch(declaration->declMode)
2845 ListAdd(args, MkExpIdentifier(MkIdentifier("staticAccess")));
2848 ListAdd(args, MkExpIdentifier(MkIdentifier("privateAccess")));
2852 ListAdd(args, MkExpIdentifier(MkIdentifier(buildingECERECOMModule ? "baseSystemAccess" : "publicAccess")));
2855 stmt = MkExpressionStmt(MkListOne(MkExpCall((MkExpIdentifier(MkIdentifier("eSystem_RegisterDefine"))), args)));
2856 ListAdd(registerModuleBody->compound.statements, stmt);
2864 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2866 struct __ecereNameSpace__ecere__com__GlobalFunction;
2868 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);
2870 void __ecereRegisterModule_pass1(struct __ecereNameSpace__ecere__com__Instance * module)
2872 struct __ecereNameSpace__ecere__com__Class * class;
2874 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetBuildingEcereCom", "void SetBuildingEcereCom(bool b)", SetBuildingEcereCom, module, 1);
2875 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetBuildingEcereCom", "bool GetBuildingEcereCom(void)", GetBuildingEcereCom, module, 1);
2876 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetBuildingEcereComModule", "void SetBuildingEcereComModule(bool b)", SetBuildingEcereComModule, module, 1);
2877 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetBuildingEcereComModule", "bool GetBuildingEcereComModule(void)", GetBuildingEcereComModule, module, 1);
2878 __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);
2879 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CreateRegisterModuleBody", "void CreateRegisterModuleBody(void)", CreateRegisterModuleBody, module, 2);
2880 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("RegisterMembersAndProperties", "void RegisterMembersAndProperties(ecere::com::Class regClass, bool isMember, char * className, Statement statement)", RegisterMembersAndProperties, module, 2);
2881 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetNameSpaceString", "void GetNameSpaceString(ecere::com::NameSpace ns, char * string)", GetNameSpaceString, module, 2);
2882 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessClassDefinitions", "void ProcessClassDefinitions(void)", ProcessClassDefinitions, module, 1);
2885 void __ecereUnregisterModule_pass1(struct __ecereNameSpace__ecere__com__Instance * module)