4f7f5e77c6be6374f2f07d277c80a85bfa41de4d
[sdk] / compiler / bootstrap / ecp / bootstrap / ecp.c
1 /* Code generated from eC source file: ecp.ec */
2 #if defined(__GNUC__)
3 typedef long long int64;
4 typedef unsigned long long uint64;
5 #ifndef _WIN32
6 #define __declspec(x)
7 #endif
8 #elif defined(__TINYC__)
9 #include <stdarg.h>
10 #define __builtin_va_list va_list
11 #define __builtin_va_start va_start
12 #define __builtin_va_end va_end
13 #ifdef _WIN32
14 #define strcasecmp stricmp
15 #define strncasecmp strnicmp
16 #define __declspec(x) __attribute__((x))
17 #else
18 #define __declspec(x)
19 #endif
20 typedef long long int64;
21 typedef unsigned long long uint64;
22 #else
23 typedef __int64 int64;
24 typedef unsigned __int64 uint64;
25 #endif
26 #ifdef __BIG_ENDIAN__
27 #define __ENDIAN_PAD(x) (8 - (x))
28 #else
29 #define __ENDIAN_PAD(x) 0
30 #endif
31 #include <stdint.h>
32 #include <sys/types.h>
33
34 #if /*defined(_W64) || */(defined(__WORDSIZE) && __WORDSIZE == 8) || defined(__x86_64__)
35 #define _64BIT 1
36 #else
37 #define _64BIT 0
38 #endif
39
40 #define arch_PointerSize                  sizeof(void *)
41 #define structSize_Instance               (_64BIT ? 24 : 12)
42 #define structSize_Module                 (_64BIT ? 560 : 300)
43 #define structSize_OldList                (_64BIT ? 32 : 20)
44
45 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
46
47 extern void *  __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
48
49 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsigned int size);
50
51 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
52
53 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
54
55 struct __ecereNameSpace__ecere__sys__BTNode;
56
57 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
58
59 struct __ecereNameSpace__ecere__sys__BinaryTree
60 {
61 struct __ecereNameSpace__ecere__sys__BTNode * root;
62 int count;
63 int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
64 void (*  FreeKey)(void *  key);
65 } __attribute__ ((gcc_struct));
66
67 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
68
69 struct __ecereNameSpace__ecere__sys__OldList
70 {
71 void *  first;
72 void *  last;
73 int count;
74 unsigned int offset;
75 unsigned int circ;
76 } __attribute__ ((gcc_struct));
77
78 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
79
80 struct __ecereNameSpace__ecere__com__Method
81 {
82 char *  name;
83 struct __ecereNameSpace__ecere__com__Method * parent;
84 struct __ecereNameSpace__ecere__com__Method * left;
85 struct __ecereNameSpace__ecere__com__Method * right;
86 int depth;
87 int (*  function)();
88 int vid;
89 int type;
90 struct __ecereNameSpace__ecere__com__Class * _class;
91 void *  symbol;
92 char *  dataTypeString;
93 struct Type * dataType;
94 int memberAccess;
95 } __attribute__ ((gcc_struct));
96
97 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
98
99 struct __ecereNameSpace__ecere__com__Property
100 {
101 struct __ecereNameSpace__ecere__com__Property * prev;
102 struct __ecereNameSpace__ecere__com__Property * next;
103 char *  name;
104 unsigned int isProperty;
105 int memberAccess;
106 int id;
107 struct __ecereNameSpace__ecere__com__Class * _class;
108 char *  dataTypeString;
109 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
110 struct Type * dataType;
111 void (*  Set)(void * , int);
112 int (*  Get)(void * );
113 unsigned int (*  IsSet)(void * );
114 void *  data;
115 void *  symbol;
116 int vid;
117 unsigned int conversion;
118 unsigned int watcherOffset;
119 char *  category;
120 unsigned int compiled;
121 unsigned int selfWatchable;
122 unsigned int isWatchable;
123 } __attribute__ ((gcc_struct));
124
125 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
126
127 struct CodePosition
128 {
129 int line;
130 int charPos;
131 int pos;
132 int included;
133 } __attribute__ ((gcc_struct));
134
135 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
136
137 struct Location
138 {
139 struct CodePosition start;
140 struct CodePosition end;
141 } __attribute__ ((gcc_struct));
142
143 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
144
145 struct Attrib;
146
147 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
148
149 struct ExtDecl;
150
151 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
152
153 struct ClassDefinition
154 {
155 struct ClassDefinition * prev;
156 struct ClassDefinition * next;
157 struct Location loc;
158 struct Specifier * _class;
159 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
160 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
161 struct Symbol * symbol;
162 struct Location blockStart;
163 struct Location nameLoc;
164 int endid;
165 int declMode;
166 unsigned int deleteWatchable;
167 } __attribute__ ((gcc_struct));
168
169 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
170
171 struct Context
172 {
173 struct Context * parent;
174 struct __ecereNameSpace__ecere__sys__BinaryTree types;
175 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
176 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
177 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
178 int nextID;
179 int simpleID;
180 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
181 struct ClassDefinition * classDef;
182 unsigned int templateTypesOnly;
183 unsigned int hasNameSpace;
184 } __attribute__ ((gcc_struct));
185
186 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
187
188 struct Instantiation
189 {
190 struct Instantiation * prev;
191 struct Instantiation * next;
192 struct Location loc;
193 struct Specifier * _class;
194 struct Expression * exp;
195 struct __ecereNameSpace__ecere__sys__OldList *  members;
196 struct Symbol * symbol;
197 unsigned int fullSet;
198 unsigned int isConstant;
199 unsigned char *  data;
200 struct Location nameLoc;
201 struct Location insideLoc;
202 unsigned int built;
203 } __attribute__ ((gcc_struct));
204
205 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
206
207 struct Declaration
208 {
209 struct Declaration * prev;
210 struct Declaration * next;
211 struct Location loc;
212 int type;
213 union
214 {
215 struct
216 {
217 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
218 struct __ecereNameSpace__ecere__sys__OldList *  declarators;
219 } __attribute__ ((gcc_struct));
220 struct Instantiation * inst;
221 struct
222 {
223 struct Identifier * id;
224 struct Expression * exp;
225 } __attribute__ ((gcc_struct));
226 } __attribute__ ((gcc_struct));
227 struct Specifier * extStorage;
228 struct Symbol * symbol;
229 int declMode;
230 } __attribute__ ((gcc_struct));
231
232 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
233
234 struct Statement;
235
236 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
237
238 struct TypeName;
239
240 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
241
242 struct Initializer;
243
244 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
245
246 struct __ecereNameSpace__ecere__com__DataValue
247 {
248 union
249 {
250 char c;
251 unsigned char uc;
252 short s;
253 unsigned short us;
254 int i;
255 unsigned int ui;
256 void *  p;
257 float f;
258 double d;
259 long long i64;
260 uint64 ui64;
261 } __attribute__ ((gcc_struct));
262 } __attribute__ ((gcc_struct));
263
264 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
265
266 struct Expression
267 {
268 struct Expression * prev;
269 struct Expression * next;
270 struct Location loc;
271 int type;
272 union
273 {
274 struct
275 {
276 char *  constant;
277 struct Identifier * identifier;
278 } __attribute__ ((gcc_struct));
279 struct Statement * compound;
280 struct Instantiation * instance;
281 char *  string;
282 struct __ecereNameSpace__ecere__sys__OldList *  list;
283 struct
284 {
285 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
286 struct Declarator * decl;
287 } __attribute__ ((gcc_struct)) _classExp;
288 struct
289 {
290 struct Identifier * id;
291 } __attribute__ ((gcc_struct)) classData;
292 struct
293 {
294 struct Expression * exp;
295 struct __ecereNameSpace__ecere__sys__OldList * arguments;
296 struct Location argLoc;
297 } __attribute__ ((gcc_struct)) call;
298 struct
299 {
300 struct Expression * exp;
301 struct __ecereNameSpace__ecere__sys__OldList * index;
302 } __attribute__ ((gcc_struct)) index;
303 struct
304 {
305 struct Expression * exp;
306 struct Identifier * member;
307 int memberType;
308 unsigned int thisPtr;
309 } __attribute__ ((gcc_struct)) member;
310 struct
311 {
312 int op;
313 struct Expression * exp1;
314 struct Expression * exp2;
315 } __attribute__ ((gcc_struct)) op;
316 struct TypeName * typeName;
317 struct Specifier * _class;
318 struct
319 {
320 struct TypeName * typeName;
321 struct Expression * exp;
322 } __attribute__ ((gcc_struct)) cast;
323 struct
324 {
325 struct Expression * cond;
326 struct __ecereNameSpace__ecere__sys__OldList * exp;
327 struct Expression * elseExp;
328 } __attribute__ ((gcc_struct)) cond;
329 struct
330 {
331 struct TypeName * typeName;
332 struct Expression * size;
333 } __attribute__ ((gcc_struct)) _new;
334 struct
335 {
336 struct TypeName * typeName;
337 struct Expression * size;
338 struct Expression * exp;
339 } __attribute__ ((gcc_struct)) _renew;
340 struct
341 {
342 char * table;
343 struct Identifier * id;
344 } __attribute__ ((gcc_struct)) db;
345 struct
346 {
347 struct Expression * ds;
348 struct Expression * name;
349 } __attribute__ ((gcc_struct)) dbopen;
350 struct
351 {
352 struct TypeName * typeName;
353 struct Initializer * initializer;
354 } __attribute__ ((gcc_struct)) initializer;
355 struct
356 {
357 struct Expression * exp;
358 struct TypeName * typeName;
359 } __attribute__ ((gcc_struct)) vaArg;
360 } __attribute__ ((gcc_struct));
361 unsigned int debugValue;
362 struct __ecereNameSpace__ecere__com__DataValue val;
363 uint64 address;
364 unsigned int hasAddress;
365 struct Type * expType;
366 struct Type * destType;
367 unsigned int usage;
368 int tempCount;
369 unsigned int byReference;
370 unsigned int isConstant;
371 unsigned int addedThis;
372 unsigned int needCast;
373 unsigned int thisPtr;
374 } __attribute__ ((gcc_struct));
375
376 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
377
378 struct TemplateDatatype
379 {
380 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
381 struct Declarator * decl;
382 } __attribute__ ((gcc_struct));
383
384 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
385
386 struct TemplateArgument
387 {
388 struct TemplateArgument * prev;
389 struct TemplateArgument * next;
390 struct Location loc;
391 struct Identifier * name;
392 int type;
393 union
394 {
395 struct Expression * expression;
396 struct Identifier * identifier;
397 struct TemplateDatatype * templateDatatype;
398 } __attribute__ ((gcc_struct));
399 } __attribute__ ((gcc_struct));
400
401 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
402
403 struct TemplateParameter
404 {
405 struct TemplateParameter * prev;
406 struct TemplateParameter * next;
407 struct Location loc;
408 int type;
409 struct Identifier * identifier;
410 union
411 {
412 struct TemplateDatatype * dataType;
413 int memberType;
414 } __attribute__ ((gcc_struct));
415 struct TemplateArgument * defaultArgument;
416 char *  dataTypeString;
417 struct Type * baseType;
418 } __attribute__ ((gcc_struct));
419
420 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
421
422 struct Specifier
423 {
424 struct Specifier * prev;
425 struct Specifier * next;
426 struct Location loc;
427 int type;
428 union
429 {
430 int specifier;
431 struct
432 {
433 struct ExtDecl * extDecl;
434 char *  name;
435 struct Symbol * symbol;
436 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
437 } __attribute__ ((gcc_struct));
438 struct
439 {
440 struct Identifier * id;
441 struct __ecereNameSpace__ecere__sys__OldList *  list;
442 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
443 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
444 unsigned int addNameSpace;
445 struct Context * ctx;
446 struct ExtDecl * extDeclStruct;
447 } __attribute__ ((gcc_struct));
448 struct Expression * expression;
449 struct Specifier * _class;
450 struct TemplateParameter * templateParameter;
451 } __attribute__ ((gcc_struct));
452 } __attribute__ ((gcc_struct));
453
454 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
455
456 struct Identifier
457 {
458 struct Identifier * prev;
459 struct Identifier * next;
460 struct Location loc;
461 struct Symbol * classSym;
462 struct Specifier * _class;
463 char *  string;
464 struct Identifier * badID;
465 } __attribute__ ((gcc_struct));
466
467 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
468
469 struct Declarator
470 {
471 struct Declarator * prev;
472 struct Declarator * next;
473 struct Location loc;
474 int type;
475 struct Symbol * symbol;
476 struct Declarator * declarator;
477 union
478 {
479 struct Identifier * identifier;
480 struct
481 {
482 struct Expression * exp;
483 struct Expression * posExp;
484 struct Attrib * attrib;
485 } __attribute__ ((gcc_struct)) structDecl;
486 struct
487 {
488 struct Expression * exp;
489 struct Specifier * enumClass;
490 } __attribute__ ((gcc_struct)) array;
491 struct
492 {
493 struct __ecereNameSpace__ecere__sys__OldList * parameters;
494 } __attribute__ ((gcc_struct)) function;
495 struct
496 {
497 struct __ecereNameSpace__ecere__com__Instance * pointer;
498 } __attribute__ ((gcc_struct)) pointer;
499 struct
500 {
501 struct ExtDecl * extended;
502 } __attribute__ ((gcc_struct)) extended;
503 } __attribute__ ((gcc_struct));
504 } __attribute__ ((gcc_struct));
505
506 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
507
508 struct FunctionDefinition
509 {
510 struct FunctionDefinition * prev;
511 struct FunctionDefinition * next;
512 struct Location loc;
513 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
514 struct Declarator * declarator;
515 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
516 struct Statement * body;
517 struct __ecereNameSpace__ecere__com__Class * _class;
518 struct __ecereNameSpace__ecere__sys__OldList attached;
519 int declMode;
520 struct Type * type;
521 struct Symbol * propSet;
522 int tempCount;
523 unsigned int propertyNoThis;
524 } __attribute__ ((gcc_struct));
525
526 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
527
528 struct DBTableDef;
529
530 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
531
532 struct External
533 {
534 struct External * prev;
535 struct External * next;
536 struct Location loc;
537 int type;
538 struct Symbol * symbol;
539 union
540 {
541 struct FunctionDefinition * function;
542 struct ClassDefinition * _class;
543 struct Declaration * declaration;
544 char *  importString;
545 struct Identifier * id;
546 struct DBTableDef * table;
547 } __attribute__ ((gcc_struct));
548 int importType;
549 } __attribute__ ((gcc_struct));
550
551 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
552
553 struct ModuleImport;
554
555 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
556
557 struct ClassImport;
558
559 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
560
561 struct Symbol
562 {
563 char *  string;
564 struct Symbol * parent;
565 struct Symbol * left;
566 struct Symbol * right;
567 int depth;
568 struct Type * type;
569 union
570 {
571 struct __ecereNameSpace__ecere__com__Method * method;
572 struct __ecereNameSpace__ecere__com__Property * _property;
573 struct __ecereNameSpace__ecere__com__Class * registered;
574 } __attribute__ ((gcc_struct));
575 int id;
576 int idCode;
577 union
578 {
579 struct
580 {
581 struct External * pointerExternal;
582 struct External * structExternal;
583 } __attribute__ ((gcc_struct));
584 struct
585 {
586 struct External * externalGet;
587 struct External * externalSet;
588 struct External * externalPtr;
589 struct External * externalIsSet;
590 } __attribute__ ((gcc_struct));
591 struct
592 {
593 struct External * methodExternal;
594 struct External * methodCodeExternal;
595 } __attribute__ ((gcc_struct));
596 } __attribute__ ((gcc_struct));
597 unsigned int imported;
598 unsigned int declaredStructSym;
599 struct __ecereNameSpace__ecere__com__Class * _class;
600 unsigned int declaredStruct;
601 unsigned int needConstructor;
602 unsigned int needDestructor;
603 char *  constructorName;
604 char *  structName;
605 char *  className;
606 char *  destructorName;
607 struct ModuleImport * module;
608 struct ClassImport * _import;
609 struct Location nameLoc;
610 unsigned int isParam;
611 unsigned int isRemote;
612 unsigned int isStruct;
613 unsigned int fireWatchersDone;
614 int declaring;
615 unsigned int classData;
616 unsigned int isStatic;
617 char *  shortName;
618 struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
619 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
620 struct Context * ctx;
621 int isIterator;
622 struct Expression * propCategory;
623 } __attribute__ ((gcc_struct));
624
625 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
626
627 struct Type
628 {
629 struct Type * prev;
630 struct Type * next;
631 int refCount;
632 union
633 {
634 struct Symbol * _class;
635 struct
636 {
637 struct __ecereNameSpace__ecere__sys__OldList members;
638 char *  enumName;
639 } __attribute__ ((gcc_struct));
640 struct
641 {
642 struct Type * returnType;
643 struct __ecereNameSpace__ecere__sys__OldList params;
644 struct Symbol * thisClass;
645 unsigned int staticMethod;
646 struct TemplateParameter * thisClassTemplate;
647 } __attribute__ ((gcc_struct));
648 struct
649 {
650 struct __ecereNameSpace__ecere__com__Method * method;
651 struct __ecereNameSpace__ecere__com__Class * methodClass;
652 struct __ecereNameSpace__ecere__com__Class * usedClass;
653 } __attribute__ ((gcc_struct));
654 struct
655 {
656 struct Type * arrayType;
657 int arraySize;
658 struct Expression * arraySizeExp;
659 unsigned int freeExp;
660 struct Symbol * enumClass;
661 } __attribute__ ((gcc_struct));
662 struct Type * type;
663 struct TemplateParameter * templateParameter;
664 } __attribute__ ((gcc_struct));
665 int kind;
666 unsigned int size;
667 char *  name;
668 char *  typeName;
669 int classObjectType;
670 int alignment;
671 unsigned int offset;
672 int bitFieldCount;
673 int count;
674 unsigned int isSigned : 1;
675 unsigned int constant : 1;
676 unsigned int truth : 1;
677 unsigned int byReference : 1;
678 unsigned int extraParam : 1;
679 unsigned int directClassAccess : 1;
680 unsigned int computing : 1;
681 unsigned int keepCast : 1;
682 unsigned int passAsTemplate : 1;
683 unsigned int dllExport : 1;
684 unsigned int attrStdcall : 1;
685 unsigned int declaredWithStruct : 1;
686 unsigned int typedByReference : 1;
687 } __attribute__ ((gcc_struct));
688
689 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
690
691 struct __ecereNameSpace__ecere__com__Class
692 {
693 struct __ecereNameSpace__ecere__com__Class * prev;
694 struct __ecereNameSpace__ecere__com__Class * next;
695 char *  name;
696 int offset;
697 int structSize;
698 int (* *  _vTbl)();
699 int vTblSize;
700 int (*  Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
701 void (*  Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
702 int offsetClass;
703 int sizeClass;
704 struct __ecereNameSpace__ecere__com__Class * base;
705 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
706 struct __ecereNameSpace__ecere__sys__BinaryTree members;
707 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
708 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
709 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
710 struct __ecereNameSpace__ecere__sys__OldList derivatives;
711 int memberID;
712 int startMemberID;
713 int type;
714 struct __ecereNameSpace__ecere__com__Instance * module;
715 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
716 char *  dataTypeString;
717 struct Type * dataType;
718 int typeSize;
719 int defaultAlignment;
720 void (*  Initialize)();
721 int memberOffset;
722 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
723 char *  designerClass;
724 unsigned int noExpansion;
725 char *  defaultProperty;
726 unsigned int comRedefinition;
727 int count;
728 unsigned int isRemote;
729 unsigned int internalDecl;
730 void *  data;
731 unsigned int computeSize;
732 int structAlignment;
733 int destructionWatchOffset;
734 unsigned int fixed;
735 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
736 int inheritanceAccess;
737 char *  fullName;
738 void *  symbol;
739 struct __ecereNameSpace__ecere__sys__OldList conversions;
740 struct __ecereNameSpace__ecere__sys__OldList templateParams;
741 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
742 struct __ecereNameSpace__ecere__com__Class * templateClass;
743 struct __ecereNameSpace__ecere__sys__OldList templatized;
744 int numParams;
745 unsigned int isInstanceClass;
746 unsigned int byValueSystemClass;
747 } __attribute__ ((gcc_struct));
748
749 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
750
751 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
752
753 struct __ecereNameSpace__ecere__com__Instance
754 {
755 int (* *  _vTbl)();
756 struct __ecereNameSpace__ecere__com__Class * _class;
757 int _refCount;
758 } __attribute__ ((gcc_struct));
759
760 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
761
762 struct __ecereNameSpace__ecere__com__DataMember
763 {
764 struct __ecereNameSpace__ecere__com__DataMember * prev;
765 struct __ecereNameSpace__ecere__com__DataMember * next;
766 char *  name;
767 unsigned int isProperty;
768 int memberAccess;
769 int id;
770 struct __ecereNameSpace__ecere__com__Class * _class;
771 char *  dataTypeString;
772 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
773 struct Type * dataType;
774 int type;
775 int offset;
776 int memberID;
777 struct __ecereNameSpace__ecere__sys__OldList members;
778 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
779 int memberOffset;
780 int structAlignment;
781 } __attribute__ ((gcc_struct));
782
783 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
784
785 struct __ecereNameSpace__ecere__com__SerialBuffer
786 {
787 unsigned char *  _buffer;
788 unsigned int count;
789 unsigned int _size;
790 unsigned int pos;
791 } __attribute__ ((gcc_struct));
792
793 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
794
795 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
796 {
797 union
798 {
799 struct
800 {
801 char *  dataTypeString;
802 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
803 } __attribute__ ((gcc_struct));
804 struct __ecereNameSpace__ecere__com__DataValue expression;
805 struct
806 {
807 char *  memberString;
808 union
809 {
810 struct __ecereNameSpace__ecere__com__DataMember * member;
811 struct __ecereNameSpace__ecere__com__Property * prop;
812 struct __ecereNameSpace__ecere__com__Method * method;
813 } __attribute__ ((gcc_struct));
814 } __attribute__ ((gcc_struct));
815 } __attribute__ ((gcc_struct));
816 } __attribute__ ((gcc_struct));
817
818 enum yytokentype
819 {
820 IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, LONG = 294, SIGNED = 295, UNSIGNED = 296, FLOAT = 297, DOUBLE = 298, CONST = 299, VOLATILE = 300, VOID = 301, VALIST = 302, STRUCT = 303, UNION = 304, ENUM = 305, ELLIPSIS = 306, CASE = 307, DEFAULT = 308, IF = 309, SWITCH = 310, WHILE = 311, DO = 312, FOR = 313, GOTO = 314, CONTINUE = 315, BREAK = 316, RETURN = 317, IFX = 318, ELSE = 319, CLASS = 320, THISCLASS = 321, CLASS_NAME = 322, PROPERTY = 323, SETPROP = 324, GETPROP = 325, NEWOP = 326, RENEW = 327, DELETE = 328, EXT_DECL = 329, EXT_STORAGE = 330, IMPORT = 331, DEFINE = 332, VIRTUAL = 333, ATTRIB = 334, PUBLIC = 335, PRIVATE = 336, TYPED_OBJECT = 337, ANY_OBJECT = 338, _INCREF = 339, EXTENSION = 340, ASM = 341, TYPEOF = 342, WATCH = 343, STOPWATCHING = 344, FIREWATCHERS = 345, WATCHABLE = 346, CLASS_DESIGNER = 347, CLASS_NO_EXPANSION = 348, CLASS_FIXED = 349, ISPROPSET = 350, CLASS_DEFAULT_PROPERTY = 351, PROPERTY_CATEGORY = 352, CLASS_DATA = 353, CLASS_PROPERTY = 354, SUBCLASS = 355, NAMESPACE = 356, NEW0OP = 357, RENEW0 = 358, VAARG = 359, DBTABLE = 360, DBFIELD = 361, DBINDEX = 362, DATABASE_OPEN = 363, ALIGNOF = 364, ATTRIB_DEP = 365, __ATTRIB = 366, BOOL = 367, _BOOL = 368, _COMPLEX = 369, _IMAGINARY = 370, RESTRICT = 371
821 };
822
823 typedef union YYSTYPE
824 {
825 int specifierType;
826 int i;
827 int declMode;
828 struct Identifier * id;
829 struct Expression * exp;
830 struct Specifier * specifier;
831 struct __ecereNameSpace__ecere__sys__OldList * list;
832 struct Enumerator * enumerator;
833 struct Declarator * declarator;
834 struct __ecereNameSpace__ecere__com__Instance * pointer;
835 struct Initializer * initializer;
836 struct InitDeclarator * initDeclarator;
837 struct TypeName * typeName;
838 struct Declaration * declaration;
839 struct Statement * stmt;
840 struct FunctionDefinition * function;
841 struct External * external;
842 struct Context * context;
843 struct __ecereNameSpace__ecere__com__Instance * asmField;
844 struct Attrib * attrib;
845 struct ExtDecl * extDecl;
846 struct Attribute * attribute;
847 struct Instantiation * instance;
848 struct MembersInit * membersInit;
849 struct MemberInit * memberInit;
850 struct ClassFunction * classFunction;
851 struct ClassDefinition * _class;
852 struct ClassDef * classDef;
853 struct PropertyDef * prop;
854 char * string;
855 struct Symbol * symbol;
856 struct PropertyWatch * propertyWatch;
857 struct TemplateParameter * templateParameter;
858 struct TemplateArgument * templateArgument;
859 struct TemplateDatatype * templateDatatype;
860 struct __ecereNameSpace__ecere__com__Instance * dbtableEntry;
861 struct __ecereNameSpace__ecere__com__Instance * dbindexItem;
862 struct DBTableDef * dbtableDef;
863 } __attribute__ ((gcc_struct)) YYSTYPE;
864
865 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
866
867 struct Enumerator
868 {
869 struct Enumerator * prev;
870 struct Enumerator * next;
871 struct Location loc;
872 struct Identifier * id;
873 struct Expression * exp;
874 } __attribute__ ((gcc_struct));
875
876 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
877
878 struct InitDeclarator
879 {
880 struct InitDeclarator * prev;
881 struct InitDeclarator * next;
882 struct Location loc;
883 struct Declarator * declarator;
884 struct Initializer * initializer;
885 } __attribute__ ((gcc_struct));
886
887 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
888
889 struct Attribute;
890
891 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
892
893 struct ClassFunction
894 {
895 struct ClassFunction * prev;
896 struct ClassFunction * next;
897 struct Location loc;
898 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
899 struct Declarator * declarator;
900 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
901 struct Statement * body;
902 struct __ecereNameSpace__ecere__com__Class * _class;
903 struct __ecereNameSpace__ecere__sys__OldList attached;
904 int declMode;
905 struct Type * type;
906 struct Symbol * propSet;
907 unsigned int isVirtual;
908 unsigned int isConstructor;
909 unsigned int isDestructor;
910 unsigned int dontMangle;
911 int id;
912 int idCode;
913 } __attribute__ ((gcc_struct));
914
915 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
916
917 struct MembersInit;
918
919 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
920
921 struct MemberInit;
922
923 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
924
925 struct PropertyDef
926 {
927 struct PropertyDef * prev;
928 struct PropertyDef * next;
929 struct Location loc;
930 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
931 struct Declarator * declarator;
932 struct Identifier * id;
933 struct Statement * getStmt;
934 struct Statement * setStmt;
935 struct Statement * issetStmt;
936 struct Symbol * symbol;
937 unsigned int conversion;
938 unsigned int isWatchable;
939 struct Expression * category;
940 } __attribute__ ((gcc_struct));
941
942 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
943
944 struct PropertyWatch;
945
946 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
947
948 struct ClassDef
949 {
950 struct ClassDef * prev;
951 struct ClassDef * next;
952 struct Location loc;
953 int type;
954 union
955 {
956 struct Declaration * decl;
957 struct ClassFunction * function;
958 struct __ecereNameSpace__ecere__sys__OldList *  defProperties;
959 struct PropertyDef * propertyDef;
960 struct PropertyWatch * propertyWatch;
961 char *  designer;
962 struct Identifier * defaultProperty;
963 struct
964 {
965 struct Identifier * id;
966 struct Initializer * initializer;
967 } __attribute__ ((gcc_struct));
968 } __attribute__ ((gcc_struct));
969 int memberAccess;
970 void *  object;
971 } __attribute__ ((gcc_struct));
972
973 extern YYSTYPE yylval;
974
975 extern struct Location yylloc;
976
977 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Definition;
978
979 struct Definition
980 {
981 struct Definition * prev;
982 struct Definition * next;
983 char *  name;
984 int type;
985 } __attribute__ ((gcc_struct));
986
987 struct ClassDefine
988 {
989 struct Definition * prev;
990 struct Definition * next;
991 char *  name;
992 int type;
993 char * base;
994 struct __ecereNameSpace__ecere__sys__OldList propertiesAndMembers;
995 struct __ecereNameSpace__ecere__sys__OldList classProperties;
996 struct __ecereNameSpace__ecere__sys__OldList methods;
997 unsigned int isRemote;
998 unsigned int isWatchable;
999 unsigned int fixed;
1000 unsigned int isStatic;
1001 unsigned int noExpansion;
1002 } __attribute__ ((gcc_struct));
1003
1004 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefine;
1005
1006 struct Define
1007 {
1008 struct Definition * prev;
1009 struct Definition * next;
1010 char *  name;
1011 int type;
1012 struct Expression * exp;
1013 } __attribute__ ((gcc_struct));
1014
1015 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Define;
1016
1017 struct FunctionDefine
1018 {
1019 struct Definition * prev;
1020 struct Definition * next;
1021 char *  name;
1022 int type;
1023 char * dataType;
1024 } __attribute__ ((gcc_struct));
1025
1026 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefine;
1027
1028 struct DataDefine
1029 {
1030 struct Definition * prev;
1031 struct Definition * next;
1032 char *  name;
1033 int type;
1034 char * dataType;
1035 } __attribute__ ((gcc_struct));
1036
1037 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_DataDefine;
1038
1039 struct MethodDefine
1040 {
1041 struct MethodDefine * prev, * next;
1042 char * name;
1043 int memberAccess;
1044 char * type;
1045 unsigned int isVirtual;
1046 } __attribute__ ((gcc_struct));
1047
1048 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_MethodDefine;
1049
1050 struct PropertyDefine
1051 {
1052 struct PropertyDefine * prev, * next;
1053 char * name;
1054 int isProperty;
1055 char * type;
1056 unsigned int isWatchable;
1057 int memberAccess;
1058 unsigned int isVirtual;
1059 unsigned int hasSet, hasGet;
1060 } __attribute__ ((gcc_struct));
1061
1062 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDefine;
1063
1064 struct DataMemberDefine
1065 {
1066 struct DataMemberDefine * prev, * next;
1067 char * name;
1068 int isProperty;
1069 char * type;
1070 struct __ecereNameSpace__ecere__sys__OldList dataMembers;
1071 struct __ecereNameSpace__ecere__sys__OldList classProperties;
1072 int memberAccess;
1073 int memberType;
1074 int size, bitPos;
1075 } __attribute__ ((gcc_struct));
1076
1077 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_DataMemberDefine;
1078
1079 void FreeMethodDefine(struct MethodDefine * method)
1080 {
1081 (__ecereNameSpace__ecere__com__eSystem_Delete(method->name), method->name = 0);
1082 (__ecereNameSpace__ecere__com__eSystem_Delete(method->type), method->type = 0);
1083 }
1084
1085 void FreeDataMemberDefine(struct DataMemberDefine * dataMember)
1086 {
1087 (__ecereNameSpace__ecere__com__eSystem_Delete(dataMember->name), dataMember->name = 0);
1088 (__ecereNameSpace__ecere__com__eSystem_Delete(dataMember->type), dataMember->type = 0);
1089 }
1090
1091 void FreeDataDefine(struct DataDefine * data)
1092 {
1093 (__ecereNameSpace__ecere__com__eSystem_Delete(data->name), data->name = 0);
1094 (__ecereNameSpace__ecere__com__eSystem_Delete(data->type), data->type = 0);
1095 }
1096
1097 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (*  freeFn)(void * ));
1098
1099 void FreeDefinition(struct Definition * definition)
1100 {
1101 (__ecereNameSpace__ecere__com__eSystem_Delete(definition->name), definition->name = 0);
1102 switch(definition->type)
1103 {
1104 case 1:
1105 {
1106 struct ClassDefine * classDefine = (struct ClassDefine *)definition;
1107
1108 (__ecereNameSpace__ecere__com__eSystem_Delete(classDefine->base), classDefine->base = 0);
1109 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&classDefine->methods, FreeMethodDefine);
1110 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&classDefine->propertiesAndMembers, FreeDataMemberDefine);
1111 break;
1112 }
1113 case 3:
1114 (__ecereNameSpace__ecere__com__eSystem_Delete(((struct FunctionDefine *)definition)->dataType), ((struct FunctionDefine *)definition)->dataType = 0);
1115 break;
1116 case 4:
1117 (__ecereNameSpace__ecere__com__eSystem_Delete(((struct DataDefine *)definition)->dataType), ((struct DataDefine *)definition)->dataType = 0);
1118 break;
1119 case 2:
1120 break;
1121 }
1122 }
1123
1124 static unsigned int globalInstance = 0x0;
1125
1126 static struct Context * globalContext;
1127
1128 static struct __ecereNameSpace__ecere__sys__OldList defines, imports, precompDefines;
1129
1130 static struct __ecereNameSpace__ecere__com__Instance * privateModule;
1131
1132 struct __ecereNameSpace__ecere__sys__OldList _excludedSymbols = 
1133 {
1134 0, 0, 0, (unsigned int)&((struct Symbol *)(void * )0)->left, 0
1135 };
1136
1137 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1138
1139 struct __ecereNameSpace__ecere__com__NameSpace
1140 {
1141 char *  name;
1142 struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
1143 struct __ecereNameSpace__ecere__com__NameSpace *  left;
1144 struct __ecereNameSpace__ecere__com__NameSpace *  right;
1145 int depth;
1146 struct __ecereNameSpace__ecere__com__NameSpace *  parent;
1147 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1148 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1149 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1150 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1151 } __attribute__ ((gcc_struct));
1152
1153 static struct __ecereNameSpace__ecere__com__NameSpace globalData;
1154
1155 extern struct Identifier * GetDeclId(struct Declarator * decl);
1156
1157 extern char *  __ecereNameSpace__ecere__sys__CopyString(char *  string);
1158
1159 extern void ProcessExpressionType(struct Expression * exp);
1160
1161 extern void ComputeExpression(struct Expression * exp);
1162
1163 extern int strtol(char * , char * * , int base);
1164
1165 extern void FreeExpression(struct Expression * exp);
1166
1167 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
1168
1169 extern void PrintType(struct Type * type, char *  string, unsigned int printName, unsigned int fullName);
1170
1171 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
1172
1173 struct __ecereNameSpace__ecere__com__BitMember
1174 {
1175 struct __ecereNameSpace__ecere__com__BitMember * prev;
1176 struct __ecereNameSpace__ecere__com__BitMember * next;
1177 char *  name;
1178 unsigned int isProperty;
1179 int memberAccess;
1180 int id;
1181 struct __ecereNameSpace__ecere__com__Class * _class;
1182 char *  dataTypeString;
1183 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1184 struct Type * dataType;
1185 int type;
1186 int size;
1187 int pos;
1188 uint64 mask;
1189 } __attribute__ ((gcc_struct));
1190
1191 extern struct __ecereNameSpace__ecere__com__BitMember * __ecereNameSpace__ecere__com__eClass_AddBitMember(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, int bitSize, int bitPos, int declMode);
1192
1193 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eMember_AddDataMember(struct __ecereNameSpace__ecere__com__DataMember * member, char *  name, char *  type, unsigned int size, unsigned int alignment, int declMode);
1194
1195 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);
1196
1197 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eMember_New(int type, int declMode);
1198
1199 extern unsigned int __ecereNameSpace__ecere__com__eMember_AddMember(struct __ecereNameSpace__ecere__com__DataMember * addTo, struct __ecereNameSpace__ecere__com__DataMember * dataMember);
1200
1201 extern unsigned int __ecereNameSpace__ecere__com__eClass_AddMember(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__DataMember * dataMember);
1202
1203 extern struct __ecereNameSpace__ecere__sys__OldList *  MkListOne(void *  item);
1204
1205 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1206
1207 extern char *  StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
1208
1209 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);
1210
1211 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
1212
1213 struct __ecereNameSpace__ecere__com__ClassProperty
1214 {
1215 char *  name;
1216 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1217 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1218 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1219 int depth;
1220 void (*  Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
1221 long long (*  Get)(struct __ecereNameSpace__ecere__com__Class *);
1222 char *  dataTypeString;
1223 struct Type * dataType;
1224 unsigned int constant;
1225 } __attribute__ ((gcc_struct));
1226
1227 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_AddClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  dataType, void *  setStmt, void *  getStmt);
1228
1229 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);
1230
1231 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);
1232
1233 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1234
1235 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
1236
1237 static void AddDefinitions(struct ClassDefine * classDefine, struct DataMemberDefine * parentMemberDefine, struct __ecereNameSpace__ecere__com__Class * regClass, struct __ecereNameSpace__ecere__com__DataMember * member, struct __ecereNameSpace__ecere__sys__OldList * definitions)
1238 {
1239 if(definitions != (((void *)0)))
1240 {
1241 struct ClassDef * def;
1242
1243 for(def = definitions->first; def; def = def->next)
1244 {
1245 if(def->type == 2)
1246 {
1247 struct Declaration * decl = def->decl;
1248 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1249 struct Type * dataType;
1250 struct DataMemberDefine * dataMemberDefine;
1251
1252 if(decl->type == 0)
1253 {
1254 struct Declarator * d;
1255
1256 if(decl->declarators)
1257 {
1258 for(d = (*decl->declarators).first; d; d = d->next)
1259 {
1260 struct Identifier * declId = GetDeclId(d);
1261
1262 if(declId)
1263 {
1264 dataMemberDefine = __extension__ ({
1265 struct DataMemberDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataMemberDefine);
1266
1267 __ecereInstance1->isProperty = 3, __ecereInstance1->memberType = 0, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(declId->string), __ecereInstance1;
1268 });
1269 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&parentMemberDefine->dataMembers, dataMemberDefine);
1270 if(regClass && regClass->type == 2)
1271 {
1272 struct Expression * sizeExp = d->structDecl.exp, * posExp = d->structDecl.posExp;
1273 int bitSize = 0, bitPos = -1;
1274 char dataTypeString[1024];
1275
1276 dataTypeString[0] = '\0';
1277 if(sizeExp)
1278 {
1279 ProcessExpressionType(sizeExp);
1280 ComputeExpression(sizeExp);
1281 if(sizeExp->isConstant)
1282 bitSize = strtol(sizeExp->constant, (((void *)0)), 0);
1283 FreeExpression(sizeExp);
1284 }
1285 if(posExp)
1286 {
1287 ProcessExpressionType(posExp);
1288 ComputeExpression(posExp);
1289 if(posExp->isConstant)
1290 bitPos = strtol(posExp->constant, (((void *)0)), 0);
1291 FreeExpression(posExp);
1292 }
1293 d->structDecl.exp = (((void *)0));
1294 d->structDecl.posExp = (((void *)0));
1295 dataType = ProcessType(decl->specifiers, d);
1296 PrintType(dataType, dataTypeString, 0x0, 0x1);
1297 {
1298 struct __ecereNameSpace__ecere__com__BitMember * member = __ecereNameSpace__ecere__com__eClass_AddBitMember(regClass, declId->string, dataTypeString, 0, 0, def->memberAccess);
1299
1300 member->size = bitSize;
1301 member->pos = bitPos;
1302 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)member;
1303 }
1304 if(dataMember)
1305 dataMember->dataType = dataType;
1306 dataMemberDefine->size = bitSize;
1307 dataMemberDefine->bitPos = bitPos;
1308 dataMemberDefine->type = __ecereNameSpace__ecere__sys__CopyString(dataTypeString);
1309 }
1310 else
1311 {
1312 {
1313 char typeString[1024];
1314
1315 typeString[0] = '\0';
1316 dataType = ProcessType(decl->specifiers, d);
1317 PrintType(dataType, typeString, 0x0, 0x1);
1318 if(member)
1319 dataMember = __ecereNameSpace__ecere__com__eMember_AddDataMember(member, declId->string, typeString, 0, 0, def->memberAccess);
1320 else
1321 dataMember = __ecereNameSpace__ecere__com__eClass_AddDataMember(regClass, declId->string, typeString, 0, 0, def->memberAccess);
1322 if(dataMember)
1323 dataMember->dataType = dataType;
1324 dataMemberDefine->type = __ecereNameSpace__ecere__sys__CopyString(typeString);
1325 }
1326 }
1327 dataMemberDefine->memberAccess = def->memberAccess;
1328 }
1329 }
1330 }
1331 else if(decl->specifiers)
1332 {
1333 struct Specifier * spec;
1334
1335 for(spec = (*decl->specifiers).first; spec; spec = spec->next)
1336 {
1337 if(spec->type == 3 || spec->type == 4)
1338 {
1339 if(spec->definitions && !spec->id)
1340 {
1341 struct __ecereNameSpace__ecere__com__DataMember * dataMember = __ecereNameSpace__ecere__com__eMember_New((spec->type == 4) ? 1 : 2, def->memberAccess);
1342
1343 dataMemberDefine = __extension__ ({
1344 struct DataMemberDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataMemberDefine);
1345
1346 __ecereInstance1->isProperty = 3, __ecereInstance1->memberType = (spec->type == 4) ? 1 : 2, __ecereInstance1;
1347 });
1348 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&parentMemberDefine->dataMembers, dataMemberDefine);
1349 AddDefinitions((((void *)0)), dataMemberDefine, (((void *)0)), dataMember, spec->definitions);
1350 if(member)
1351 __ecereNameSpace__ecere__com__eMember_AddMember(member, dataMember);
1352 else
1353 __ecereNameSpace__ecere__com__eClass_AddMember(regClass, dataMember);
1354 }
1355 else if(spec->definitions && spec->id && (*spec->definitions).count)
1356 {
1357 {
1358 struct Identifier * id = spec->id;
1359 char typeString[1024];
1360
1361 typeString[0] = '\0';
1362 spec->id = (((void *)0));
1363 decl->declarators = MkListOne(MkDeclaratorIdentifier(id));
1364 dataType = ProcessType(decl->specifiers, (((void *)0)));
1365 PrintType(dataType, typeString, 0x0, 0x1);
1366 if(member)
1367 dataMember = __ecereNameSpace__ecere__com__eMember_AddDataMember(member, id->string, typeString, 0, 0, def->memberAccess);
1368 else
1369 dataMember = __ecereNameSpace__ecere__com__eClass_AddDataMember(regClass, id->string, typeString, 0, 0, def->memberAccess);
1370 if(dataMember)
1371 dataMember->dataType = dataType;
1372 }
1373 }
1374 }
1375 }
1376 }
1377 }
1378 else if(decl->type == 2)
1379 {
1380 struct Instantiation * inst = decl->inst;
1381 struct Expression * exp = inst->exp;
1382
1383 if(exp)
1384 {
1385 {
1386 char * string = exp->identifier->string;
1387
1388 {
1389 struct Type * dataType = (dataType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dataType->kind = 8, dataType->_class = inst->_class->symbol, dataType->refCount = 1, dataType);
1390
1391 if(member)
1392 dataMember = __ecereNameSpace__ecere__com__eMember_AddDataMember(member, string, inst->_class->name, 0, 0, def->memberAccess);
1393 else
1394 dataMember = __ecereNameSpace__ecere__com__eClass_AddDataMember(regClass, string, inst->_class->name, 0, 0, def->memberAccess);
1395 if(dataMember)
1396 dataMember->dataType = dataType;
1397 }
1398 dataMemberDefine = __extension__ ({
1399 struct DataMemberDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataMemberDefine);
1400
1401 __ecereInstance1->isProperty = 3, __ecereInstance1->memberType = 0, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = __ecereNameSpace__ecere__sys__CopyString(inst->_class->name), __ecereInstance1;
1402 });
1403 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&parentMemberDefine->dataMembers, dataMemberDefine);
1404 }
1405 }
1406 }
1407 }
1408 else if(def->type == 3 && def->propertyDef)
1409 {
1410 struct PropertyDef * propertyDef = def->propertyDef;
1411
1412 {
1413 struct __ecereNameSpace__ecere__com__Property * prop;
1414 struct PropertyDefine * propDefine;
1415
1416 {
1417 char * dataTypeString = StringFromSpecDecl(propertyDef->specifiers, propertyDef->declarator);
1418
1419 prop = __ecereNameSpace__ecere__com__eClass_AddProperty(regClass, propertyDef->conversion ? (((void *)0)) : propertyDef->id->string, dataTypeString, propertyDef->setStmt, propertyDef->getStmt, def->memberAccess);
1420 if(prop)
1421 {
1422 prop->IsSet = (void *)propertyDef->issetStmt;
1423 prop->compiled = 0x0;
1424 }
1425 (__ecereNameSpace__ecere__com__eSystem_Delete(dataTypeString), dataTypeString = 0);
1426 }
1427 if(prop)
1428 {
1429 prop->symbol = __extension__ ({
1430 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
1431
1432 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(propertyDef->symbol->string), __ecereInstance1->id = propertyDef->symbol->id, __ecereInstance1->type = propertyDef->symbol->type, __ecereInstance1;
1433 });
1434 if(propertyDef->symbol->type)
1435 propertyDef->symbol->type->refCount++;
1436 propDefine = __extension__ ({
1437 struct PropertyDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyDefine);
1438
1439 __ecereInstance1->isProperty = 1, __ecereInstance1->name = prop->conversion ? (((void *)0)) : __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->type = __ecereNameSpace__ecere__sys__CopyString(prop->dataTypeString), __ecereInstance1->isVirtual = 0x0, __ecereInstance1->memberAccess = def->memberAccess, __ecereInstance1->hasSet = propertyDef->setStmt ? 0x1 : 0x0, __ecereInstance1->hasGet = propertyDef->getStmt ? 0x1 : 0x0, __ecereInstance1->isWatchable = propertyDef->isWatchable, __ecereInstance1;
1440 });
1441 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classDefine->propertiesAndMembers, propDefine);
1442 }
1443 }
1444 }
1445 else if(def->type == 10 && def->propertyDef)
1446 {
1447 struct PropertyDef * propertyDef = def->propertyDef;
1448
1449 {
1450 struct __ecereNameSpace__ecere__com__ClassProperty * prop;
1451 struct PropertyDefine * propDefine;
1452
1453 {
1454 char * dataTypeString = StringFromSpecDecl(propertyDef->specifiers, propertyDef->declarator);
1455
1456 prop = __ecereNameSpace__ecere__com__eClass_AddClassProperty(regClass, propertyDef->id->string, dataTypeString, propertyDef->setStmt, propertyDef->getStmt);
1457 (__ecereNameSpace__ecere__com__eSystem_Delete(dataTypeString), dataTypeString = 0);
1458 }
1459 if(prop)
1460 {
1461 propDefine = __extension__ ({
1462 struct PropertyDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyDefine);
1463
1464 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->type = __ecereNameSpace__ecere__sys__CopyString(prop->dataTypeString), __ecereInstance1->hasSet = propertyDef->setStmt ? 0x1 : 0x0, __ecereInstance1->hasGet = propertyDef->getStmt ? 0x1 : 0x0, __ecereInstance1;
1465 });
1466 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classDefine->classProperties, propDefine);
1467 }
1468 }
1469 }
1470 else if(def->type == 7)
1471 {
1472 classDefine->fixed = 0x1;
1473 }
1474 else if(def->type == 6)
1475 {
1476 classDefine->noExpansion = 0x1;
1477 }
1478 else if(def->type == 13)
1479 {
1480 struct __ecereNameSpace__ecere__com__DataMember * member;
1481 struct __ecereNameSpace__ecere__com__Property * prop;
1482 struct __ecereNameSpace__ecere__com__Method * method;
1483
1484 if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(regClass, def->id->string, privateModule)))
1485 {
1486 struct PropertyDefine * propDefine;
1487
1488 prop = __ecereNameSpace__ecere__com__eClass_AddProperty(regClass, def->id->string, (((void *)0)), (((void *)0)), (((void *)0)), def->memberAccess);
1489 if(prop)
1490 {
1491 propDefine = __extension__ ({
1492 struct PropertyDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyDefine);
1493
1494 __ecereInstance1->isProperty = 1, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->memberAccess = def->memberAccess, __ecereInstance1;
1495 });
1496 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classDefine->propertiesAndMembers, propDefine);
1497 }
1498 }
1499 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(regClass, def->id->string, privateModule, (((void *)0)), (((void *)0)))))
1500 {
1501 struct DataMemberDefine * dataMemberDefine;
1502
1503 member = __ecereNameSpace__ecere__com__eClass_AddDataMember(regClass, def->id->string, (((void *)0)), 0, 0, def->memberAccess);
1504 dataMemberDefine = __extension__ ({
1505 struct DataMemberDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataMemberDefine);
1506
1507 __ecereInstance1->isProperty = 3, __ecereInstance1->memberType = 0, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(def->id->string), __ecereInstance1->memberAccess = def->memberAccess, __ecereInstance1;
1508 });
1509 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&parentMemberDefine->dataMembers, dataMemberDefine);
1510 }
1511 }
1512 }
1513 }
1514 }
1515
1516 extern void FreeType(struct Type * type);
1517
1518 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char *  name, char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
1519
1520 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, void *  function, int declMode);
1521
1522 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);
1523
1524 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);
1525
1526 extern char *  strcpy(char * , const char * );
1527
1528 extern char *  strcat(char * , const char * );
1529
1530 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
1531
1532 struct OpTable
1533 {
1534 unsigned int (*  Add)(struct Expression *, struct Operand *, struct Operand *);
1535 unsigned int (*  Sub)(struct Expression *, struct Operand *, struct Operand *);
1536 unsigned int (*  Mul)(struct Expression *, struct Operand *, struct Operand *);
1537 unsigned int (*  Div)(struct Expression *, struct Operand *, struct Operand *);
1538 unsigned int (*  Mod)(struct Expression *, struct Operand *, struct Operand *);
1539 unsigned int (*  Neg)(struct Expression *, struct Operand *);
1540 unsigned int (*  Inc)(struct Expression *, struct Operand *);
1541 unsigned int (*  Dec)(struct Expression *, struct Operand *);
1542 unsigned int (*  Asign)(struct Expression *, struct Operand *, struct Operand *);
1543 unsigned int (*  AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1544 unsigned int (*  SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1545 unsigned int (*  MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1546 unsigned int (*  DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1547 unsigned int (*  ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1548 unsigned int (*  BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1549 unsigned int (*  BitOr)(struct Expression *, struct Operand *, struct Operand *);
1550 unsigned int (*  BitXor)(struct Expression *, struct Operand *, struct Operand *);
1551 unsigned int (*  LShift)(struct Expression *, struct Operand *, struct Operand *);
1552 unsigned int (*  RShift)(struct Expression *, struct Operand *, struct Operand *);
1553 unsigned int (*  BitNot)(struct Expression *, struct Operand *);
1554 unsigned int (*  AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1555 unsigned int (*  OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1556 unsigned int (*  XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1557 unsigned int (*  LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1558 unsigned int (*  RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1559 unsigned int (*  Not)(struct Expression *, struct Operand *);
1560 unsigned int (*  Equ)(struct Expression *, struct Operand *, struct Operand *);
1561 unsigned int (*  Nqu)(struct Expression *, struct Operand *, struct Operand *);
1562 unsigned int (*  And)(struct Expression *, struct Operand *, struct Operand *);
1563 unsigned int (*  Or)(struct Expression *, struct Operand *, struct Operand *);
1564 unsigned int (*  Grt)(struct Expression *, struct Operand *, struct Operand *);
1565 unsigned int (*  Sma)(struct Expression *, struct Operand *, struct Operand *);
1566 unsigned int (*  GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1567 unsigned int (*  SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1568 unsigned int (*  Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1569 } __attribute__ ((gcc_struct));
1570
1571 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
1572
1573 struct Operand
1574 {
1575 int kind;
1576 struct Type * type;
1577 unsigned int ptrSize;
1578 union
1579 {
1580 char c;
1581 unsigned char uc;
1582 short s;
1583 unsigned short us;
1584 int i;
1585 unsigned int ui;
1586 float f;
1587 double d;
1588 long long i64;
1589 uint64 ui64;
1590 } __attribute__ ((gcc_struct));
1591 struct OpTable ops;
1592 } __attribute__ ((gcc_struct));
1593
1594 extern struct Operand GetOperand(struct Expression * exp);
1595
1596 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateParameter;
1597
1598 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
1599 {
1600 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
1601 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
1602 char *  name;
1603 int type;
1604 union
1605 {
1606 char *  dataTypeString;
1607 int memberType;
1608 } __attribute__ ((gcc_struct));
1609 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
1610 void *  param;
1611 } __attribute__ ((gcc_struct));
1612
1613 extern struct __ecereNameSpace__ecere__com__ClassTemplateParameter * __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, int type, void *  info, struct __ecereNameSpace__ecere__com__ClassTemplateArgument * defaultArg);
1614
1615 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, unsigned int isWatchable, int declMode)
1616 {
1617 struct __ecereNameSpace__ecere__com__Class * regClass;
1618 struct ClassDef * def;
1619 struct ClassDefine * classDefine;
1620 char baseName[1024];
1621 unsigned int unitType = 0x0;
1622 unsigned int wouldBeEnum = 0x0;
1623 int inheritanceAccess = 1;
1624
1625 baseName[0] = '\0';
1626 if(baseSpecs != (((void *)0)))
1627 {
1628 struct Type * baseType = ProcessType(baseSpecs, (((void *)0)));
1629
1630 PrintType(baseType, baseName, 0x0, 0x1);
1631 if(baseType->kind == 8)
1632 {
1633 if(baseType->_class->registered && classType == 0)
1634 {
1635 if(baseType->_class->registered->type == 3)
1636 classType = 3;
1637 else if(baseType->_class->registered->type == 2)
1638 classType = 2;
1639 else if(baseType->_class->registered->type == 5)
1640 classType = 5;
1641 else if(baseType->_class->registered->type == 4)
1642 {
1643 wouldBeEnum = 0x1;
1644 }
1645 }
1646 }
1647 else if(baseType->kind == 9 || baseType->kind == 10)
1648 {
1649 classType = 5;
1650 baseName[0] = '\0';
1651 }
1652 else
1653 unitType = 0x1;
1654 FreeType(baseType);
1655 if(((struct Specifier *)baseSpecs->first)->type == 0 && ((struct Specifier *)baseSpecs->first)->specifier == PRIVATE)
1656 inheritanceAccess = 2;
1657 }
1658 if(classType == 0)
1659 {
1660 if(unitType)
1661 classType = 3;
1662 if(definitions != (((void *)0)))
1663 {
1664 for(def = definitions->first; def; def = def->next)
1665 {
1666 if(def->type == 2)
1667 {
1668 struct Declaration * decl = def->decl;
1669
1670 if(decl->type == 0)
1671 {
1672 if(unitType)
1673 {
1674 classType = 2;
1675 break;
1676 }
1677 if(decl->declarators)
1678 {
1679 struct Declarator * d;
1680
1681 for(d = (*decl->declarators).first; d; d = d->next)
1682 {
1683 if(d->structDecl.exp)
1684 {
1685 classType = 2;
1686 break;
1687 }
1688 }
1689 if(d)
1690 break;
1691 }
1692 }
1693 }
1694 }
1695 }
1696 }
1697 if(classType == 0 && wouldBeEnum)
1698 classType = 4;
1699 regClass = symbol->registered = __ecereNameSpace__ecere__com__eSystem_RegisterClass((classType == 6) ? 1 : classType, symbol->string, baseName[0] ? baseName : (((void *)0)), 0, 0, (((void *)0)), (((void *)0)), privateModule, 1, inheritanceAccess);
1700 if(regClass)
1701 regClass->symbol = symbol;
1702 classDefine = __extension__ ({
1703 struct ClassDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassDefine);
1704
1705 __ecereInstance1->type = 1, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(symbol->string), __ecereInstance1->base = baseName[0] ? __ecereNameSpace__ecere__sys__CopyString(baseName) : (((void *)0)), __ecereInstance1->isStatic = declMode == 3, __ecereInstance1->isRemote = symbol->isRemote, __ecereInstance1->isWatchable = isWatchable, __ecereInstance1;
1706 });
1707 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&precompDefines, classDefine);
1708 if(classType == 6)
1709 {
1710 struct __ecereNameSpace__ecere__com__DataMember * unionMember = __ecereNameSpace__ecere__com__eMember_New(1, 1);
1711 struct DataMemberDefine * unionDefine;
1712
1713 unionDefine = __extension__ ({
1714 struct DataMemberDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataMemberDefine);
1715
1716 __ecereInstance1->isProperty = 3, __ecereInstance1->memberType = 1, __ecereInstance1;
1717 });
1718 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classDefine->propertiesAndMembers, unionDefine);
1719 AddDefinitions(classDefine, unionDefine, regClass, unionMember, definitions);
1720 __ecereNameSpace__ecere__com__eClass_AddMember(regClass, unionMember);
1721 }
1722 else if(regClass)
1723 AddDefinitions(classDefine, (struct DataMemberDefine *)classDefine, regClass, (((void *)0)), definitions);
1724 if(definitions != (((void *)0)))
1725 {
1726 for(def = definitions->first; def; def = def->next)
1727 {
1728 if(def->type == 0)
1729 {
1730 struct ClassFunction * func = def->function;
1731
1732 if(!func->dontMangle && func->declarator)
1733 {
1734 struct Identifier * id = GetDeclId(func->declarator);
1735 struct __ecereNameSpace__ecere__com__Method * method;
1736 struct MethodDefine * methodDefine;
1737
1738 {
1739 char * dataTypeString = StringFromSpecDecl(func->specifiers, func->declarator);
1740
1741 if(func->isVirtual)
1742 method = __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(regClass, id->string, dataTypeString, func->declarator->symbol, def->memberAccess);
1743 else
1744 method = __ecereNameSpace__ecere__com__eClass_AddMethod(regClass, id->string, dataTypeString, func->declarator->symbol, def->memberAccess);
1745 (__ecereNameSpace__ecere__com__eSystem_Delete(dataTypeString), dataTypeString = 0);
1746 }
1747 if(method)
1748 {
1749 method->symbol = __extension__ ({
1750 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
1751
1752 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(func->declarator->symbol->string), __ecereInstance1->id = func->declarator->symbol->id, __ecereInstance1->type = func->declarator->symbol->type, __ecereInstance1;
1753 });
1754 if(func->declarator->symbol->type)
1755 func->declarator->symbol->type->refCount++;
1756 ((struct Symbol *)method->symbol)->method = method;
1757 func->declarator->symbol = (((void *)0));
1758 if(method->type != 1 || method->_class == regClass)
1759 {
1760 methodDefine = __extension__ ({
1761 struct MethodDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodDefine);
1762
1763 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->type = __ecereNameSpace__ecere__sys__CopyString(method->dataTypeString), __ecereInstance1->memberAccess = def->memberAccess, __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
1764 });
1765 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classDefine->methods, methodDefine);
1766 }
1767 }
1768 }
1769 }
1770 else if(def->type == 13)
1771 {
1772 struct __ecereNameSpace__ecere__com__Method * method;
1773
1774 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(regClass, def->id->string, privateModule)))
1775 {
1776 struct MethodDefine * methodDefine;
1777
1778 method = __ecereNameSpace__ecere__com__eClass_AddMethod(regClass, def->id->string, (((void *)0)), (((void *)0)), def->memberAccess);
1779 methodDefine = __extension__ ({
1780 struct MethodDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodDefine);
1781
1782 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->memberAccess = def->memberAccess, __ecereInstance1;
1783 });
1784 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classDefine->methods, methodDefine);
1785 }
1786 }
1787 }
1788 }
1789 if(regClass && symbol->templateParams)
1790 {
1791 struct TemplateParameter * param;
1792
1793 for(param = (*symbol->templateParams).first; param; param = param->next)
1794 {
1795 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg = 
1796 {
1797 0, 0, 0, 0, 0
1798 };
1799
1800 if(param->defaultArgument)
1801 {
1802 switch(param->type)
1803 {
1804 case 0:
1805 defaultArg.dataTypeString = StringFromSpecDecl(param->defaultArgument->templateDatatype->specifiers, param->defaultArgument->templateDatatype->decl);
1806 break;
1807 case 1:
1808 {
1809 char memberString[1024];
1810
1811 memberString[0] = '\0';
1812 if(param->defaultArgument->identifier->_class && param->defaultArgument->identifier->_class->name)
1813 {
1814 if(param->defaultArgument->identifier->_class->type == 8)
1815 strcpy(memberString, param->defaultArgument->identifier->_class->templateParameter->identifier->string);
1816 else
1817 strcpy(memberString, param->defaultArgument->identifier->_class->name);
1818 }
1819 if(memberString[0])
1820 {
1821 strcat(memberString, "::");
1822 }
1823 strcat(memberString, param->defaultArgument->identifier->string);
1824 defaultArg.memberString = __ecereNameSpace__ecere__sys__CopyString(memberString);
1825 break;
1826 }
1827 case 2:
1828 {
1829 struct Operand op;
1830
1831 ProcessExpressionType(param->defaultArgument->expression);
1832 ComputeExpression(param->defaultArgument->expression);
1833 op = GetOperand(param->defaultArgument->expression);
1834 defaultArg.expression.ui64 = op.ui64;
1835 break;
1836 }
1837 }
1838 }
1839 if(param->type == 1)
1840 {
1841 __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(regClass, param->identifier->string, param->type, (void *)param->memberType, &defaultArg);
1842 }
1843 else
1844 {
1845 char * typeString = param->dataType ? StringFromSpecDecl(param->dataType->specifiers, param->dataType->decl) : (((void *)0));
1846
1847 __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(regClass, param->identifier->string, param->type, typeString, &defaultArg);
1848 }
1849 }
1850 }
1851 }
1852
1853 extern void SetParsingType(unsigned int b);
1854
1855 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char *  string, int value);
1856
1857 extern int __ecereNameSpace__ecere__com__eEnum_AddValue(struct __ecereNameSpace__ecere__com__Class * _class, char *  string);
1858
1859 static void ProcessClassEnumValues(int classType, struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol, struct __ecereNameSpace__ecere__sys__OldList * baseSpecs, struct __ecereNameSpace__ecere__sys__OldList * enumValues)
1860 {
1861 struct __ecereNameSpace__ecere__com__Class * regClass = symbol->registered;
1862
1863 if(regClass && enumValues)
1864 {
1865 struct Enumerator * e;
1866
1867 for(e = enumValues->first; e; e = e->next)
1868 {
1869 if(e->exp)
1870 {
1871 struct Type * destType = (destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), destType->kind = 3, destType->refCount = 1, destType);
1872
1873 e->exp->destType = destType;
1874 SetParsingType(0x1);
1875 ProcessExpressionType(e->exp);
1876 SetParsingType(0x0);
1877 if(!e->exp->expType)
1878 {
1879 destType->kind = 8;
1880 destType->_class = symbol;
1881 ProcessExpressionType(e->exp);
1882 }
1883 ComputeExpression(e->exp);
1884 if(e->exp->isConstant && e->exp->type == 2)
1885 {
1886 struct Operand op = GetOperand(e->exp);
1887 int value;
1888
1889 switch(op.kind)
1890 {
1891 case 1:
1892 value = op.type->isSigned ? (int)op.c : (int)op.uc;
1893 break;
1894 case 2:
1895 value = op.type->isSigned ? (int)op.s : (int)op.us;
1896 break;
1897 default:
1898 value = op.i;
1899 }
1900 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(regClass, e->id->string, value);
1901 }
1902 else
1903 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
1904 }
1905 else
1906 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, e->id->string);
1907 }
1908 }
1909 }
1910
1911 extern struct __ecereNameSpace__ecere__sys__OldList *  GetAST(void);
1912
1913 extern struct Symbol * FindClass(char *  name);
1914
1915 extern void SetCurrentNameSpace(char *  s);
1916
1917 extern void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module);
1918
1919 void PreCompPreProcessClassDefinitions()
1920 {
1921 struct __ecereNameSpace__ecere__sys__OldList * ast = GetAST();
1922 struct External * external, * next;
1923
1924 for(external = (*ast).first; external; external = next)
1925 {
1926 next = external->next;
1927 if(external->type == 2)
1928 {
1929 struct ClassDefinition * _class = external->_class;
1930
1931 if(_class->declMode == 1 || _class->declMode == 2 || _class->declMode == 3)
1932 {
1933 if(_class->definitions)
1934 {
1935 ProcessClass(0, _class->definitions, _class->symbol, _class->baseSpecs, (((void *)0)), _class->deleteWatchable, _class->declMode);
1936 }
1937 }
1938 }
1939 else if(external->type == 1)
1940 {
1941 struct Declaration * declaration = external->declaration;
1942
1943 if(declaration->type == 1)
1944 {
1945 if(external->declaration->declMode == 1 || external->declaration->declMode == 2 || external->declaration->declMode == 3)
1946 {
1947 if(declaration->specifiers)
1948 {
1949 struct Specifier * specifier;
1950
1951 for(specifier = (*declaration->specifiers).first; specifier; specifier = specifier->next)
1952 {
1953 if((specifier->type == 2 || specifier->type == 3 || specifier->type == 4) && specifier->id && specifier->id->string && (declaration->declMode || specifier->baseSpecs || (specifier->type == 2 && specifier->definitions)))
1954 {
1955 struct Symbol * symbol = FindClass(specifier->id->string);
1956
1957 if(symbol)
1958 {
1959 int classType;
1960
1961 if(specifier->type == 2)
1962 classType = 4;
1963 else if(specifier->type == 4)
1964 classType = 6;
1965 else
1966 classType = 1;
1967 ProcessClass(classType, specifier->definitions, symbol, specifier->baseSpecs, specifier->list, 0x0, external->declaration->declMode);
1968 }
1969 }
1970 }
1971 }
1972 if(external->declaration->declMode == 1 || external->declaration->declMode == 2)
1973 {
1974 if(declaration->declarators)
1975 {
1976 struct InitDeclarator * d;
1977
1978 for(d = (*declaration->declarators).first; d; d = d->next)
1979 {
1980 if(d->declarator)
1981 {
1982 struct Symbol * symbol = d->declarator->symbol;
1983
1984 if(symbol)
1985 {
1986 struct DataDefine * dataDefine;
1987 char typeString[1024];
1988
1989 typeString[0] = '\0';
1990 PrintType(symbol->type, typeString, 0x0, 0x1);
1991 dataDefine = __extension__ ({
1992 struct DataDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataDefine);
1993
1994 __ecereInstance1->type = 4, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(symbol->string), __ecereInstance1->dataType = __ecereNameSpace__ecere__sys__CopyString(typeString), __ecereInstance1;
1995 });
1996 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&precompDefines, dataDefine);
1997 }
1998 }
1999 }
2000 }
2001 }
2002 }
2003 }
2004 else if(declaration->type == 2)
2005 {
2006 if(external->declaration->declMode == 1 || external->declaration->declMode == 2)
2007 {
2008 struct Symbol * symbol = declaration->inst->symbol;
2009
2010 if(symbol)
2011 {
2012 struct DataDefine * dataDefine;
2013 char typeString[1024];
2014
2015 typeString[0] = '\0';
2016 PrintType(symbol->type, typeString, 0x0, 0x1);
2017 dataDefine = __extension__ ({
2018 struct DataDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataDefine);
2019
2020 __ecereInstance1->type = 4, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(symbol->string), __ecereInstance1->dataType = __ecereNameSpace__ecere__sys__CopyString(typeString), __ecereInstance1;
2021 });
2022 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&precompDefines, dataDefine);
2023 }
2024 }
2025 globalInstance = 0x1;
2026 }
2027 else if(declaration->type == 3)
2028 {
2029 if(external->declaration->declMode == 1 || external->declaration->declMode == 2)
2030 {
2031 struct Define * definition = (definition = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Define), definition->type = 2, definition->name = __ecereNameSpace__ecere__sys__CopyString(declaration->id->string), definition->exp = declaration->exp, definition);
2032
2033 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&precompDefines, definition);
2034 }
2035 }
2036 }
2037 else if(external->type == 0 && (external->function->declMode == 1 || external->function->declMode == 2))
2038 {
2039 struct FunctionDefinition * function = external->function;
2040 struct FunctionDefine * functionDefine;
2041 char typeString[1024];
2042
2043 typeString[0] = '\0';
2044 PrintType(function->declarator->symbol->type, typeString, 0x1, 0x1);
2045 functionDefine = __extension__ ({
2046 struct FunctionDefine * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionDefine);
2047
2048 __ecereInstance1->type = 3, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->declarator->symbol->string), __ecereInstance1->dataType = __ecereNameSpace__ecere__sys__CopyString(typeString), __ecereInstance1;
2049 });
2050 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&precompDefines, functionDefine);
2051 }
2052 else if(external->type == 4)
2053 {
2054 SetCurrentNameSpace(external->id->string);
2055 }
2056 }
2057 ComputeModuleClasses(privateModule);
2058 for(external = (*ast).first; external; external = next)
2059 {
2060 next = external->next;
2061 if(external->type == 1 && (external->declaration->declMode == 1 || external->declaration->declMode == 2))
2062 {
2063 struct Declaration * declaration = external->declaration;
2064
2065 if(declaration->type == 1)
2066 {
2067 if(declaration->specifiers)
2068 {
2069 struct Specifier * specifier;
2070
2071 for(specifier = (*declaration->specifiers).first; specifier; specifier = specifier->next)
2072 {
2073 if((specifier->type == 2) && specifier->id && specifier->id->string && (declaration->declMode || specifier->baseSpecs || (specifier->type == 2 && specifier->definitions)))
2074 {
2075 struct Symbol * symbol = FindClass(specifier->id->string);
2076
2077 if(symbol)
2078 {
2079 ProcessClassEnumValues(4, specifier->definitions, symbol, specifier->baseSpecs, specifier->list);
2080 }
2081 }
2082 }
2083 }
2084 }
2085 }
2086 }
2087 }
2088
2089 int __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(struct __ecereNameSpace__ecere__com__Instance * this, char *  format, ...);
2090
2091 static void OutputDataMembers(struct ClassDefine * classDefine, struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Instance * f)
2092 {
2093 if(classDefine->propertiesAndMembers.first)
2094 {
2095 struct DataMemberDefine * member = classDefine->propertiesAndMembers.first;
2096 int last = 0;
2097
2098 for(member = classDefine->propertiesAndMembers.first; member; member = member->next)
2099 {
2100 if(member->isProperty == 1)
2101 {
2102 struct PropertyDefine * prop = (struct PropertyDefine *)member;
2103
2104 if(last != 1)
2105 {
2106 if(last)
2107 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2108 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Defined Properties]\n");
2109 }
2110 if(prop->name)
2111 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", prop->name);
2112 else
2113 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         [Conversion]\n");
2114 if(prop->memberAccess == 1)
2115 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Public]\n");
2116 else
2117 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Private]\n");
2118 if(prop->isVirtual)
2119 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Virtual]\n");
2120 if(prop->hasSet)
2121 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Set]\n");
2122 if(prop->hasGet)
2123 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Get]\n");
2124 if(prop->isWatchable)
2125 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Watchable]\n");
2126 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Type]\n");
2127 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", prop->type ? prop->type : "");
2128 }
2129 else
2130 {
2131 if(last != 3)
2132 {
2133 if(last)
2134 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2135 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Defined Data Members]\n");
2136 }
2137 if(member->memberType == 0)
2138 {
2139 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", member->name);
2140 if(member->memberAccess == 1)
2141 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Public]\n");
2142 else
2143 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Private]\n");
2144 if(_class && _class->type == 2)
2145 {
2146 if(member->size)
2147 {
2148 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Size]\n");
2149 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %d\n", member->size);
2150 }
2151 if(member->bitPos != -1)
2152 {
2153 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Pos]\n");
2154 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %d\n", member->bitPos);
2155 }
2156 }
2157 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Type]\n");
2158 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", member->type ? member->type : "");
2159 }
2160 else
2161 {
2162 if(member->memberAccess == 1)
2163 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Public]\n");
2164 else
2165 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Private]\n");
2166 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, (member->memberType == 1) ? "      [Union]\n" : "      [Struct]\n");
2167 OutputDataMembers((struct ClassDefine *)member, (((void *)0)), f);
2168 }
2169 }
2170 last = member->isProperty;
2171 }
2172 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2173 }
2174 if(classDefine->classProperties.first)
2175 {
2176 struct PropertyDefine * prop = classDefine->propertiesAndMembers.first;
2177
2178 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Defined Class Properties]\n");
2179 for(prop = classDefine->classProperties.first; prop; prop = prop->next)
2180 {
2181 if(prop->name)
2182 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", prop->name);
2183 if(prop->hasSet)
2184 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Set]\n");
2185 if(prop->hasGet)
2186 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Get]\n");
2187 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Type]\n");
2188 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", prop->type ? prop->type : "");
2189 }
2190 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2191 }
2192 }
2193
2194 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__FileOpen(char *  fileName, int mode);
2195
2196 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ImportedModule;
2197
2198 struct ImportedModule
2199 {
2200 struct ImportedModule * prev;
2201 struct ImportedModule * next;
2202 char *  name;
2203 int type;
2204 int importType;
2205 unsigned int globalInstance;
2206 unsigned int dllOnly;
2207 int importAccess;
2208 } __attribute__ ((gcc_struct));
2209
2210 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char *  name);
2211
2212 extern void PrintExpression(struct Expression * exp, char *  string);
2213
2214 extern void __ecereNameSpace__ecere__sys__ChangeCh(char *  string, char ch1, char ch2);
2215
2216 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
2217
2218 struct __ecereNameSpace__ecere__com__EnumClassData
2219 {
2220 struct __ecereNameSpace__ecere__sys__OldList values;
2221 int largest;
2222 } __attribute__ ((gcc_struct));
2223
2224 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink;
2225
2226 struct __ecereNameSpace__ecere__sys__NamedLink
2227 {
2228 struct __ecereNameSpace__ecere__sys__NamedLink * prev;
2229 struct __ecereNameSpace__ecere__sys__NamedLink * next;
2230 char *  name;
2231 void *  data;
2232 } __attribute__ ((gcc_struct));
2233
2234 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
2235
2236 struct __ecereNameSpace__ecere__com__DefinedExpression;
2237
2238 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, char *  name);
2239
2240 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
2241
2242 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts;
2243
2244 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
2245
2246 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
2247
2248 static void OutputSymbols(char * fileName)
2249 {
2250 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__sys__FileOpen(fileName, 2);
2251
2252 if(f)
2253 {
2254 int lastType = (int)-1;
2255 struct Definition * definition;
2256
2257 if(globalInstance)
2258 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "[Global Instance]\n");
2259 for(definition = precompDefines.first; definition; definition = definition->next)
2260 {
2261 if(definition->type != lastType)
2262 {
2263 if(lastType != (int)-1)
2264 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   .\n");
2265 if(definition->type == 0)
2266 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "[Imported Modules]\n");
2267 else if(definition->type == 1)
2268 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "[Defined Classes]\n");
2269 else if(definition->type == 2)
2270 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "[Defined Expressions]\n");
2271 else if(definition->type == 3)
2272 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "[Defined Functions]\n");
2273 else if(definition->type == 4)
2274 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "[Defined Data]\n");
2275 lastType = definition->type;
2276 }
2277 if(definition->type == 0)
2278 {
2279 struct ImportedModule * module = (struct ImportedModule *)definition;
2280
2281 if(module->importType == 1)
2282 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   [Static]\n");
2283 else if(module->importType == 2)
2284 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   [Remote]\n");
2285 if(module->importAccess == 2)
2286 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   [Private]\n");
2287 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   %s\n", module->name);
2288 }
2289 else if(definition->type == 1)
2290 {
2291 struct __ecereNameSpace__ecere__com__Class * _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, definition->name);
2292 struct ClassDefine * classDefine = (struct ClassDefine *)definition;
2293
2294 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   %s\n", definition->name);
2295 if(classDefine->isStatic)
2296 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Static]\n");
2297 if(classDefine->fixed)
2298 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Fixed]\n");
2299 if(classDefine->noExpansion)
2300 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [No Expansion]\n");
2301 if(classDefine->isRemote)
2302 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Remote]\n");
2303 if(classDefine->isWatchable)
2304 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Watchable]\n");
2305 if(_class->type == 4)
2306 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Enum]\n");
2307 else if(_class->type == 2)
2308 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Bit]\n");
2309 else if(_class->type == 1)
2310 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Struct]\n");
2311 else if(_class->type == 3)
2312 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Unit]\n");
2313 else if(_class->type == 5)
2314 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [NoHead]\n");
2315 if(_class->inheritanceAccess == 2)
2316 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Private Base]\n");
2317 else
2318 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Base]\n");
2319 if(classDefine->base)
2320 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", classDefine->base);
2321 else
2322 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         [None]\n");
2323 if(_class->templateParams.count)
2324 {
2325 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
2326 struct TemplateParameter * tp;
2327
2328 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         [Template Parameters]\n");
2329 for(tp = (*((struct Symbol *)_class->symbol)->templateParams).first, param = _class->templateParams.first; param && tp; param = param->next, tp = tp->next)
2330 {
2331 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", param->name);
2332 switch(param->type)
2333 {
2334 case 0:
2335 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               [Type]\n");
2336 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", param->dataTypeString ? param->dataTypeString : "[None]");
2337 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", param->defaultArg.dataTypeString ? param->defaultArg.dataTypeString : "[None]");
2338 break;
2339 case 2:
2340 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               [Expression]\n");
2341 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", param->dataTypeString ? param->dataTypeString : "[None]");
2342 if(tp->defaultArgument && tp->defaultArgument->expression)
2343 {
2344 char temp[8192];
2345
2346 temp[0] = (char)0;
2347 PrintExpression(tp->defaultArgument->expression, temp);
2348 __ecereNameSpace__ecere__sys__ChangeCh(temp, '\n', ' ');
2349 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               ");
2350 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))__extension__ ({
2351 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
2352
2353 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
2354 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, temp);
2355 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))__extension__ ({
2356 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
2357
2358 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
2359 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2360 }
2361 else
2362 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               [None]\n");
2363 break;
2364 case 1:
2365 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               [Identifier]\n");
2366 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", (param->memberType == 0) ? "[Data member]" : ((param->memberType == 1) ? "[Method]" : "[Property]"));
2367 if(tp->defaultArgument && tp->defaultArgument->identifier)
2368 {
2369 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               ");
2370 if(tp->defaultArgument->identifier->_class && tp->defaultArgument->identifier->_class->type == 1 && tp->defaultArgument->identifier->_class->name)
2371 {
2372 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "%s::", tp->defaultArgument->identifier->_class->name);
2373 }
2374 else if(tp->defaultArgument->identifier->_class && tp->defaultArgument->identifier->_class->type == 8 && tp->defaultArgument->identifier->_class->templateParameter->identifier)
2375 {
2376 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "%s::", tp->defaultArgument->identifier->_class->templateParameter->identifier->string);
2377 }
2378 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "%s\n", tp->defaultArgument->identifier->string);
2379 }
2380 else
2381 {
2382 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               [None]\n");
2383 }
2384 break;
2385 }
2386 }
2387 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2388 }
2389 if(!classDefine->isStatic)
2390 {
2391 if(classDefine->methods.first)
2392 {
2393 struct MethodDefine * method;
2394
2395 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Defined Methods]\n");
2396 for(method = classDefine->methods.first; method; method = method->next)
2397 {
2398 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", method->name);
2399 if(method->memberAccess == 1)
2400 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Public]\n");
2401 else
2402 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Private]\n");
2403 if(method->isVirtual)
2404 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Virtual]\n");
2405 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "            [Type]\n");
2406 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "               %s\n", method->type ? method->type : "");
2407 }
2408 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2409 }
2410 OutputDataMembers(classDefine, _class, f);
2411 if(_class->type == 4)
2412 {
2413 struct __ecereNameSpace__ecere__sys__NamedLink * value;
2414 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
2415 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
2416
2417 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Enum Values]\n");
2418 for(value = e->values.first; value; value = value->next)
2419 {
2420 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s = %d\n", value->name, value->data);
2421 }
2422 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         .\n");
2423 }
2424 }
2425 }
2426 else if(definition->type == 2)
2427 {
2428 struct __ecereNameSpace__ecere__com__DefinedExpression * defExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, definition->name);
2429 struct Define * defineDefine = (struct Define *)definition;
2430
2431 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   %s\n", definition->name);
2432 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Value]\n");
2433 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         ");
2434 OutputExpression(defineDefine->exp, f);
2435 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
2436 }
2437 else if(definition->type == 3)
2438 {
2439 struct FunctionDefine * functionDefine = (struct FunctionDefine *)definition;
2440
2441 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   %s\n", functionDefine->name);
2442 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Type]\n");
2443 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", functionDefine->dataType);
2444 }
2445 else if(definition->type == 4)
2446 {
2447 struct DataDefine * dataDefine = (struct DataDefine *)definition;
2448
2449 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   %s\n", dataDefine->name);
2450 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      [Type]\n");
2451 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         %s\n", dataDefine->dataType);
2452 }
2453 }
2454 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   .\n");
2455 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
2456 }
2457 }
2458
2459 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_PrecompApp;
2460
2461 extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
2462
2463 extern int GetHostBits(void);
2464
2465 extern int strcmp(const char * , const char * );
2466
2467 extern size_t strlen(const char * );
2468
2469 extern char *  PassArg(char *  output, const char *  input);
2470
2471 extern char *  GetOutputFile(void);
2472
2473 extern void SetOutputFile(char *  s);
2474
2475 extern char *  GetSourceFile(void);
2476
2477 extern void SetSourceFile(char *  s);
2478
2479 extern void SetSymbolsDir(char *  s);
2480
2481 extern void SetDefaultNameSpace(char *  s);
2482
2483 extern void SetStrictNameSpaces(unsigned int b);
2484
2485 extern char *  GetSymbolsDir(void);
2486
2487 extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
2488
2489 extern char *  __ecereNameSpace__ecere__sys__ChangeExtension(char *  string, char *  ext, char *  output);
2490
2491 extern int printf(char * , ...);
2492
2493 extern char *  __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char *  string, char *  stringAndContext);
2494
2495 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
2496
2497 extern void SetGlobalData(struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace);
2498
2499 extern void SetExcludedSymbols(struct __ecereNameSpace__ecere__sys__OldList *  list);
2500
2501 extern void SetGlobalContext(struct Context * context);
2502
2503 extern void SetCurrentContext(struct Context * context);
2504
2505 extern void SetTopContext(struct Context * context);
2506
2507 extern void SetDefines(struct __ecereNameSpace__ecere__sys__OldList *  list);
2508
2509 extern void SetImports(struct __ecereNameSpace__ecere__sys__OldList *  list);
2510
2511 extern void SetInPreCompiler(unsigned int b);
2512
2513 extern void SetPrecompDefines(struct __ecereNameSpace__ecere__sys__OldList *  list);
2514
2515 extern void SetTargetPlatform(int platform);
2516
2517 extern void SetTargetBits(int bits);
2518
2519 extern void SetEchoOn(unsigned int b);
2520
2521 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__com____ecere_COM_Initialize(unsigned int guiApp, int argc, char *  argv[]);
2522
2523 extern void SetPrivateModule(struct __ecereNameSpace__ecere__com__Instance * module);
2524
2525 extern struct Type * ProcessTypeString(char *  string, unsigned int staticMethod);
2526
2527 extern unsigned int __ecereNameSpace__ecere__sys__FileExists(char *  fileName);
2528
2529 extern unsigned int __ecereNameSpace__ecere__sys__DeleteFile(char *  fileName);
2530
2531 extern int snprintf(char * , size_t, char * , ...);
2532
2533 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__DualPipeOpen(unsigned int mode, char *  commandLine);
2534
2535 extern void SetFileInput(struct __ecereNameSpace__ecere__com__Instance * file);
2536
2537 extern void SetMainModule(struct ModuleImport * moduleImport);
2538
2539 extern void resetScanner(void);
2540
2541 extern void ParseEc(void);
2542
2543 extern void SetYydebug(unsigned int b);
2544
2545 extern void ProcessDBTableDefinitions(void);
2546
2547 extern void FreeASTTree(struct __ecereNameSpace__ecere__sys__OldList * ast);
2548
2549 extern void FreeContext(struct Context * context);
2550
2551 extern void FreeExcludedSymbols(struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols);
2552
2553 extern void FreeModuleDefine(struct Definition * def);
2554
2555 extern void FreeModuleImport(struct ModuleImport * imp);
2556
2557 extern void FreeTypeData(struct __ecereNameSpace__ecere__com__Instance * privateModule);
2558
2559 extern void FreeIncludeFiles(void);
2560
2561 extern void FreeGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * globalDataList);
2562
2563 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
2564
2565 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
2566
2567 struct __ecereNameSpace__ecere__com__Application
2568 {
2569 int argc;
2570 char * *  argv;
2571 int exitCode;
2572 unsigned int isGUIApp;
2573 struct __ecereNameSpace__ecere__sys__OldList allModules;
2574 char *  parsedCommand;
2575 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
2576 } __attribute__ ((gcc_struct));
2577
2578 char *  __ecereProp___ecereNameSpace__ecere__com__Platform_Get_char__PTR_(int this);
2579
2580 int __ecereProp___ecereNameSpace__ecere__com__Platform_Set_char__PTR_(char *  value);
2581
2582 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__Platform_char__PTR_;
2583
2584 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
2585
2586 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof;
2587
2588 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__DualPipe;
2589
2590 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Read;
2591
2592 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
2593
2594 int __ecereMethod___ecereNameSpace__ecere__sys__DualPipe_GetExitCode();
2595
2596 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
2597
2598 void __ecereMethod_PrecompApp_Main(struct __ecereNameSpace__ecere__com__Instance * this)
2599 {
2600 int c;
2601 unsigned int valid = 0x1;
2602 char defaultSymFile[797];
2603 char * cppCommand = (((void *)0));
2604 char * cppOptions = (((void *)0));
2605 int cppOptionsLen = 0;
2606 int targetPlatform = __ecereNameSpace__ecere__com__GetRuntimePlatform();
2607 int targetBits = GetHostBits();
2608
2609 for(c = 1; c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc; c++)
2610 {
2611 char * arg = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c];
2612
2613 if(arg[0] == '-')
2614 {
2615 if(!strcmp(arg + 1, "m32") || !strcmp(arg + 1, "m64"))
2616 {
2617 int newLen = cppOptionsLen + 1 + strlen(arg);
2618
2619 cppOptions = __ecereNameSpace__ecere__com__eSystem_Renew(cppOptions, sizeof(char) * (newLen + 1));
2620 cppOptions[cppOptionsLen] = ' ';
2621 strcpy(cppOptions + cppOptionsLen + 1, arg);
2622 cppOptionsLen = newLen;
2623 targetBits = !strcmp(arg + 1, "m32") ? 32 : 64;
2624 }
2625 else if(!strcmp(arg + 1, "t32") || !strcmp(arg + 1, "t64"))
2626 {
2627 targetBits = !strcmp(arg + 1, "t32") ? 32 : 64;
2628 }
2629 else if(arg[1] == 'D' || arg[1] == 'I')
2630 {
2631 char * buf;
2632 int size = cppOptionsLen + 1 + strlen(arg) * 2 + 1;
2633
2634 cppOptions = __ecereNameSpace__ecere__com__eSystem_Renew(cppOptions, sizeof(char) * (size));
2635 buf = cppOptions + cppOptionsLen;
2636 *buf++ = ' ';
2637 PassArg(buf, arg);
2638 cppOptionsLen = cppOptionsLen + 1 + strlen(buf);
2639 }
2640 else if(!strcmp(arg + 1, "t"))
2641 {
2642 if(++c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2643 targetPlatform = __ecereProp___ecereNameSpace__ecere__com__Platform_Set_char__PTR_(((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c]);
2644 else
2645 valid = 0x0;
2646 }
2647 else if(!strcmp(arg + 1, "cpp"))
2648 {
2649 if(++c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2650 cppCommand = __ecereNameSpace__ecere__sys__CopyString(((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c]);
2651 else
2652 valid = 0x0;
2653 }
2654 else if(!strcmp(arg + 1, "o"))
2655 {
2656 if(!GetOutputFile() && c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2657 {
2658 SetOutputFile(((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c + 1]);
2659 c++;
2660 }
2661 else
2662 valid = 0x0;
2663 }
2664 else if(!strcmp(arg + 1, "c"))
2665 {
2666 if(!GetSourceFile() && c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2667 {
2668 SetSourceFile(((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c + 1]);
2669 c++;
2670 }
2671 else
2672 valid = 0x0;
2673 }
2674 else if(!strcmp(arg + 1, "isystem") || !strcmp(arg + 1, "isysroot"))
2675 {
2676 if(c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2677 {
2678 char * buf;
2679 char * arg1 = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[++c];
2680 int size = cppOptionsLen + 1 + strlen(arg) * 2 + strlen(arg1) * 2 + 1;
2681
2682 cppOptions = __ecereNameSpace__ecere__com__eSystem_Renew(cppOptions, sizeof(char) * (size));
2683 buf = cppOptions + cppOptionsLen;
2684 *buf++ = ' ';
2685 buf = PassArg(buf, arg);
2686 *buf++ = ' ';
2687 buf = PassArg(buf, arg1);
2688 cppOptionsLen = buf - cppOptions;
2689 }
2690 else
2691 valid = 0x0;
2692 }
2693 else if(!strcmp(arg + 1, "fno-diagnostics-show-caret"))
2694 {
2695 char * buf;
2696 int size = cppOptionsLen + 1 + strlen(arg) * 2 + 1;
2697
2698 cppOptions = __ecereNameSpace__ecere__com__eSystem_Renew(cppOptions, sizeof(char) * (size));
2699 buf = cppOptions + cppOptionsLen;
2700 *buf++ = ' ';
2701 PassArg(buf, arg);
2702 cppOptionsLen = cppOptionsLen + 1 + strlen(buf);
2703 }
2704 else if(!strcmp(arg + 1, "symbols"))
2705 {
2706 if(c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2707 {
2708 SetSymbolsDir(((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c + 1]);
2709 c++;
2710 }
2711 else
2712 valid = 0x0;
2713 }
2714 else if(!strcmp(arg + 1, "defaultns"))
2715 {
2716 if(c + 1 < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argc)
2717 {
2718 SetDefaultNameSpace(((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->argv[c + 1]);
2719 c++;
2720 }
2721 else
2722 valid = 0x0;
2723 }
2724 else if(!strcmp(arg + 1, "strictns"))
2725 {
2726 SetStrictNameSpaces(0x1);
2727 }
2728 }
2729 else
2730 valid = 0x0;
2731 }
2732 if(valid)
2733 {
2734 if(!cppCommand)
2735 cppCommand = __ecereNameSpace__ecere__sys__CopyString("gcc");
2736 if(!GetSourceFile())
2737 valid = 0x0;
2738 else if(!GetOutputFile())
2739 {
2740 strcpy(defaultSymFile, GetSymbolsDir());
2741 __ecereNameSpace__ecere__sys__PathCat(defaultSymFile, GetSourceFile());
2742 __ecereNameSpace__ecere__sys__ChangeExtension(defaultSymFile, "sym", defaultSymFile);
2743 SetOutputFile(defaultSymFile);
2744 }
2745 }
2746 if(!valid)
2747 {
2748 printf(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Syntax:\n   ecp [-t <target platform>] [-cpp <c preprocessor>] [-o <output>] [-symbols <outputdir>] [-I<includedir>]* [-isystem <sysincludedir>]* [-D<definition>]* -c <input>\n", (((void *)0))));
2749 }
2750 else
2751 {
2752 struct __ecereNameSpace__ecere__com__Instance * cppOutput;
2753 char command[3075LL];
2754
2755 SetGlobalData(&globalData);
2756 SetExcludedSymbols(&_excludedSymbols);
2757 SetGlobalContext(globalContext);
2758 SetCurrentContext(globalContext);
2759 SetTopContext(globalContext);
2760 SetDefines(&defines);
2761 SetImports(&imports);
2762 SetInPreCompiler(0x1);
2763 SetPrecompDefines(&precompDefines);
2764 SetTargetPlatform(targetPlatform);
2765 SetTargetBits(targetBits);
2766 SetEchoOn(0x0);
2767 privateModule = (struct __ecereNameSpace__ecere__com__Instance *)__ecereNameSpace__ecere__com____ecere_COM_Initialize(0x1 | (targetBits == sizeof(uintptr_t) * 8 ? (unsigned int)0 : targetBits == 64 ? (unsigned int)2 : targetBits == 32 ? (unsigned int)4 : (unsigned int)0) | (unsigned int)8, 1, (((void *)0)));
2768 SetPrivateModule(privateModule);
2769 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2770 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2771
2772 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("uint"), __ecereInstance1->type = ProcessTypeString("unsigned int", 0x0), __ecereInstance1;
2773 }));
2774 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2775 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2776
2777 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("uint64"), __ecereInstance1->type = ProcessTypeString("unsigned int64", 0x0), __ecereInstance1;
2778 }));
2779 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2780 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2781
2782 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("uint32"), __ecereInstance1->type = ProcessTypeString("unsigned int", 0x0), __ecereInstance1;
2783 }));
2784 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2785 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2786
2787 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("uint16"), __ecereInstance1->type = ProcessTypeString("unsigned short", 0x0), __ecereInstance1;
2788 }));
2789 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2790 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2791
2792 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("byte"), __ecereInstance1->type = ProcessTypeString("unsigned char", 0x0), __ecereInstance1;
2793 }));
2794 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2795 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2796
2797 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("intptr_t"), __ecereInstance1->type = ProcessTypeString("intptr", 0x0), __ecereInstance1;
2798 }));
2799 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2800 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2801
2802 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("uintptr_t"), __ecereInstance1->type = ProcessTypeString("uintptr", 0x0), __ecereInstance1;
2803 }));
2804 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2805 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2806
2807 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("ssize_t"), __ecereInstance1->type = ProcessTypeString("intsize", 0x0), __ecereInstance1;
2808 }));
2809 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->types, (struct __ecereNameSpace__ecere__sys__BTNode *)__extension__ ({
2810 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
2811
2812 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("size_t"), __ecereInstance1->type = ProcessTypeString("uintsize", 0x0), __ecereInstance1;
2813 }));
2814 {
2815 char * outputFilePath = GetOutputFile();
2816
2817 if(__ecereNameSpace__ecere__sys__FileExists(outputFilePath))
2818 __ecereNameSpace__ecere__sys__DeleteFile(outputFilePath);
2819 }
2820 snprintf(command, sizeof command, "%s%s -x c -E \"%s\"", cppCommand, cppOptions ? cppOptions : "", GetSourceFile());
2821 command[sizeof command - 1] = (char)0;
2822 if((cppOutput = __ecereNameSpace__ecere__sys__DualPipeOpen((((unsigned int)(0x1))), command)))
2823 {
2824 int exitCode;
2825 struct __ecereNameSpace__ecere__sys__OldList * ast;
2826 struct __ecereNameSpace__ecere__com__Instance * fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
2827 struct ModuleImport * mainModule = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ModuleImport);
2828
2829 SetFileInput(fileInput);
2830 SetMainModule(mainModule);
2831 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&imports, mainModule);
2832 resetScanner();
2833 for(; !((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
2834 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = cppOutput;
2835
2836 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__DualPipe->_vTbl;
2837 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof])(cppOutput); )
2838 {
2839 char junk[4096];
2840 int count = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))__extension__ ({
2841 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = cppOutput;
2842
2843 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__DualPipe->_vTbl;
2844 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(cppOutput, junk, 1, 4096);
2845
2846 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))__extension__ ({
2847 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
2848
2849 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
2850 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, junk, 1, count);
2851 }
2852 exitCode = __ecereMethod___ecereNameSpace__ecere__sys__DualPipe_GetExitCode(cppOutput);
2853 (__ecereNameSpace__ecere__com__eInstance_DecRef(cppOutput), cppOutput = 0);
2854 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
2855 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
2856
2857 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
2858 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
2859 ParseEc();
2860 SetCurrentNameSpace((((void *)0)));
2861 SetYydebug(0x0);
2862 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
2863 SetFileInput((((void *)0)));
2864 ast = GetAST();
2865 if(!exitCode)
2866 {
2867 if(ast)
2868 {
2869 ProcessDBTableDefinitions();
2870 PreCompPreProcessClassDefinitions();
2871 }
2872 if(!((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->exitCode)
2873 OutputSymbols(GetOutputFile());
2874 }
2875 else
2876 ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + structSize_Module)))->exitCode = exitCode;
2877 if(ast)
2878 {
2879 FreeASTTree(ast);
2880 }
2881 }
2882 FreeContext(globalContext);
2883 FreeExcludedSymbols(&_excludedSymbols);
2884 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&defines, FreeModuleDefine);
2885 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&imports, FreeModuleImport);
2886 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&precompDefines, FreeDefinition);
2887 FreeTypeData(privateModule);
2888 FreeIncludeFiles();
2889 FreeGlobalData(&globalData);
2890 (__ecereNameSpace__ecere__com__eInstance_DecRef(privateModule), privateModule = 0);
2891 }
2892 (__ecereNameSpace__ecere__com__eSystem_Delete(cppCommand), cppCommand = 0);
2893 (__ecereNameSpace__ecere__com__eSystem_Delete(cppOptions), cppOptions = 0);
2894 SetSymbolsDir((((void *)0)));
2895 }
2896
2897 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
2898
2899 struct __ecereNameSpace__ecere__com__Module
2900 {
2901 struct __ecereNameSpace__ecere__com__Instance * application;
2902 struct __ecereNameSpace__ecere__sys__OldList classes;
2903 struct __ecereNameSpace__ecere__sys__OldList defines;
2904 struct __ecereNameSpace__ecere__sys__OldList functions;
2905 struct __ecereNameSpace__ecere__sys__OldList modules;
2906 struct __ecereNameSpace__ecere__com__Instance * prev;
2907 struct __ecereNameSpace__ecere__com__Instance * next;
2908 char *  name;
2909 void *  library;
2910 void *  Unload;
2911 int importType;
2912 int origImportType;
2913 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
2914 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
2915 } __attribute__ ((gcc_struct));
2916
2917 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2918
2919 struct __ecereNameSpace__ecere__com__GlobalFunction;
2920
2921 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);
2922
2923 void __ecereRegisterModule_ecp(struct __ecereNameSpace__ecere__com__Instance * module)
2924 {
2925 struct __ecereNameSpace__ecere__com__Class * class;
2926
2927 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "ClassDefine", "Definition", sizeof(struct ClassDefine), 0, 0, 0, module, 2, 1);
2928 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2929 __ecereClass_ClassDefine = class;
2930 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "base", "char *", arch_PointerSize, arch_PointerSize, 1);
2931 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "propertiesAndMembers", "ecere::sys::OldList", structSize_OldList, arch_PointerSize, 1);
2932 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "classProperties", "ecere::sys::OldList", structSize_OldList, arch_PointerSize, 1);
2933 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "methods", "ecere::sys::OldList", structSize_OldList, arch_PointerSize, 1);
2934 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "isRemote", "bool", 4, 4, 1);
2935 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "isWatchable", "bool", 4, 4, 1);
2936 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "fixed", "bool", 4, 4, 1);
2937 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "isStatic", "bool", 4, 4, 1);
2938 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "noExpansion", "bool", 4, 4, 1);
2939 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Define", "Definition", sizeof(struct Define), 0, 0, 0, module, 2, 1);
2940 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2941 __ecereClass_Define = class;
2942 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "exp", "Expression", arch_PointerSize, arch_PointerSize, 1);
2943 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "FunctionDefine", "Definition", sizeof(struct FunctionDefine), 0, 0, 0, module, 2, 1);
2944 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2945 __ecereClass_FunctionDefine = class;
2946 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "dataType", "char *", arch_PointerSize, arch_PointerSize, 1);
2947 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "DataDefine", "Definition", sizeof(struct DataDefine), 0, 0, 0, module, 2, 1);
2948 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2949 __ecereClass_DataDefine = class;
2950 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "dataType", "char *", arch_PointerSize, arch_PointerSize, 1);
2951 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "MethodDefine", 0, sizeof(struct MethodDefine), 0, 0, 0, module, 2, 1);
2952 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2953 __ecereClass_MethodDefine = class;
2954 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "PropertyDefine", 0, sizeof(struct PropertyDefine), 0, 0, 0, module, 2, 1);
2955 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2956 __ecereClass_PropertyDefine = class;
2957 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "DataMemberDefine", 0, sizeof(struct DataMemberDefine), 0, 0, 0, module, 2, 1);
2958 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2959 __ecereClass_DataMemberDefine = class;
2960 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FreeMethodDefine", "void FreeMethodDefine(MethodDefine method)", FreeMethodDefine, module, 2);
2961 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FreeDataMemberDefine", "void FreeDataMemberDefine(DataMemberDefine dataMember)", FreeDataMemberDefine, module, 2);
2962 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FreeDataDefine", "void FreeDataDefine(DataDefine data)", FreeDataDefine, module, 2);
2963 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FreeDefinition", "void FreeDefinition(Definition definition)", FreeDefinition, module, 2);
2964 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PreCompPreProcessClassDefinitions", "void PreCompPreProcessClassDefinitions(void)", PreCompPreProcessClassDefinitions, module, 2);
2965 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "PrecompApp", "ecere::com::Application", 0, 0, 0, 0, module, 2, 1);
2966 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
2967 __ecereClass_PrecompApp = class;
2968 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Main", 0, __ecereMethod_PrecompApp_Main, 1);
2969 }
2970
2971 void __ecereUnregisterModule_ecp(struct __ecereNameSpace__ecere__com__Instance * module)
2972 {
2973
2974 }
2975
2976 int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  a, char *  b);
2977
2978 void __ecereCreateModuleInstances_ecp()
2979 {
2980 globalContext = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
2981 (globalData.classes.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString, globalData.defines.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString, globalData.functions.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString, globalData.nameSpaces.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString);
2982 }
2983
2984 void __ecereDestroyModuleInstances_ecp()
2985 {
2986 ((globalContext ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor(globalContext) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(globalContext)) : 0), globalContext = 0);
2987 }
2988